{"version":3,"file":"main.89a7a29845ce4d40.js","mappings":"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,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,GAAG,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAA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,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAEC,IAAI,IAAIC,GAAEC,IAAI,IAAIC,GAAGC,IAAI,IAAIhtE,GAAGitE,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,IAAIC,GAAGC,IAAI,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,qBAAsB,iBAAzD,GAGtBjX,KAAKgL,aAAa,wBAAyB,CAAC90D,GAAQ8pD,MAEhD,SAASoX,GAA4BnE,IACjC,OAAO,SAAUx0Q,IACMq0Q,GAAe58D,GAAQ+8D,IAC/Bp2Q,QAAQ6kQ,KAGf,MAAM2V,GAAwBnhE,GAAOmhE,sBACrC,GAAIA,GAAuB,CACvB,MAAMzhD,GAAM,IAAIyhD,GAAsBpE,GAAS,CAAExiL,QAAShyF,GAAEgyF,QAASooH,OAAQp6M,GAAE2sQ,YAC/E1J,GAAU9mM,OAAOg7J,GACpB,GAER,CACJ,CACG1f,GAAOmhE,wBACPrX,GAAK+I,EAAW,qCACZqO,GAA4B,sBAChCpX,GAAK+I,EAAW,4BACZqO,GAA4B,oBAAD,EApBvC,mBCztFA,OACA,eACA,KACA,MAEA,YACA,KACA,MAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,KACA,MAEA,iBACA,MACA,OAEA,iBACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,mBACA,KACA,MAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,KACA,MAEA,iBACA,MACA,OAEA,iBACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,wBACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,gBACA,MACA,OAEA,aACA,MACA,OAEA,YACA,KACA,MAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,gBACA,MACA,OAEA,aACA,MACA,OAEA,YACA,KACA,MAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,eACA,KACA,MAEA,YACA,MACA,OAEA,eACA,KACA,MAEA,YACA,MACA,OAEA,gBACA,MACA,OAEA,gBACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,KACA,MAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,IACA,KAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,gBACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,qBACA,KACA,MAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,KACA,MAEA,uBACA,MACA,OAEA,uBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,KACA,MAEA,yBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,KACA,MAEA,mBACA,MACA,OAEA,kBACA,KACA,MAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,uBACA,MACA,OAEA,uBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,8BACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,sBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,sBACA,KACA,MAEA,mBACA,KACA,MAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,KACA,MAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,qBACA,GACA,IAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,KACA,MAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,sBACA,MACA,OAEA,sBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,IACA,KAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,qBACA,KACA,MAEA,qBACA,KACA,MAEA,qBACA,KACA,MAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,sBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,KACA,MAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,KACA,MAEA,0BACA,MACA,OAEA,0BACA,KACA,MAEA,uBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,KACA,MAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,KACA,MAEA,0BACA,MACA,OAEA,uBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,KACA,MAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,qBACA,KACA,MAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,KACA,MAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,sBACA,MACA,OAEA,sBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,uBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,KACA,MAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,IACA,KAEA,kBACA,KACA,MAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,uBACA,MACA,OAEA,uBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,KACA,MAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,sBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,sBACA,MACA,OAEA,mBACA,KACA,MAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,wBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,KACA,MAEA,kBACA,MACA,OAEA,sBACA,MACA,OAEA,mBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,KACA,MAEA,mBACA,MACA,OAEA,kBACA,KACA,MAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,qBACA,KACA,MAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,uBACA,MACA,OAEA,uBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,KACA,MAEA,mBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,KACA,MAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,KACA,MAEA,wBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,uBACA,MACA,OAEA,uBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,wBACA,IACA,KAEA,wBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,uBACA,KACA,MAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,uBACA,MACA,OAEA,kBACA,MACA,OAEA,uBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,MACA,OAEA,qBACA,GACA,IAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,sBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,KACA,MAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,uBACA,MACA,OAEA,uBACA,MACA,OAEA,uBACA,MACA,OAEA,kBACA,MACA,OAEA,wBACA,KACA,MAEA,wBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,mBACA,MACA,OAEA,mBACA,MACA,OAEA,kBACA,MACA,OAEA,qBACA,MACA,OAEA,kBACA,MACA,OAEA,sBACA,MACA,OAEA,sBACA,MACA,OAEA,mBACA,MACA,OAEA,wBACA,MACA,OAEA,wBACA,MACA,OAEA,mBACA,KACA,MAEA,mBACA,MACA,OAEA,0BACA,IACA,KAEA,0BACA,MACA,OAEA,0BACA,MACA,OAEA,uBACA,MACA,OAEA,0BACA,KACA,MAEA,0BACA,MACA,OAEA,uBACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,KACA,MAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,iBACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,KACA,MAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,iBACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,IACA,KAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,KACA,MAEA,YACA,MACA,OAEA,gBACA,MACA,OAEA,gBACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,iBACA,MACA,OAEA,YACA,MACA,OAEA,eACA,KACA,MAEA,YACA,KACA,MAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,KACA,MAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,aACA,KACA,MAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,iBACA,MACA,OAEA,iBACA,KACA,MAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,KACA,MAEA,aACA,MACA,OAEA,YACA,KACA,MAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,KACA,MAEA,YACA,MACA,OAEA,gBACA,MACA,OAEA,aACA,KACA,MAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,gBACA,KACA,MAEA,aACA,MACA,OAEA,aACA,KACA,MAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,aACA,KACA,MAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,kBACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,KACA,MAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,KACA,MAEA,gBACA,MACA,OAEA,aACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,YACA,KACA,MAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,eACA,MACA,OAEA,YACA,KACA,MAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,iBACA,MACA,OAEA,iBACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,eACA,KACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,kBACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,iBACA,MACA,OAEA,iBACA,MACA,OAEA,YACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,kBACA,IACA,KAEA,kBACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,KACA,MAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,iBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,iBACA,MACA,OAEA,YACA,MACA,OAEA,iBACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,KACA,MAEA,gBACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,YACA,KACA,MAEA,eACA,MACA,OAEA,YACA,KACA,MAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,iBACA,MACA,OAEA,iBACA,MACA,OAEA,iBACA,MACA,OAEA,YACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,gBACA,MACA,OAEA,gBACA,MACA,OAEA,aACA,MACA,OAEA,kBACA,MACA,OAEA,kBACA,MACA,OAEA,aACA,MACA,OAEA,aACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,oBACA,MACA,OAEA,iBACA,KACA,MAEA,oBACA,KACA,MAEA,oBACA,MACA,OAEA,iBACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,QAGA,cACA,aACA,mCACA,8CACA,gCACA34Q,IAIA,kBACA,0BACA+vD,KAEA,CACA8oN,0BACAA,WACA91M,+BC1hJA,OACA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,MACA,OAEA,YACA,IACA,KAEA,YACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,eACA,KACA,MAEA,eACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,YACA,KACA,MAEA,YACA,MACA,MACA,OAEA,eACA,MACA,MACA,OAEA,YACA,MACA,OAEA,YACA,MACA,MACA,OAEA,YACA,MACA,MACA,OAEA,YACA,MACA,MACA,OAEA,YACA,KACA,MAEA,YACA,MACA,OAEA,eACA,MACA,OAEA,YACA,KACA,MAEA,YACA,MACA,OAEA,YACA,KACA,MACA,MAEA,YACA,MACA,OAEA,eACA,MACA,QAGA,cACA,aACA,mCACA,8CACA,gCACA/iE,IAIA,kBACA,iDACA+vD,KAEA,CACA8oN,0BACAA,WACA91M,+BC/MAhT,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,KACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACR,MAAWA,EAAQ,OAEnBgT,qCC1CAhT,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACR,MAAWA,EAAQ,OAEnBgT,oCCVAhT,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACR,MAAWA,EAAQ,OAEnBgT,wCCLAhT,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACR,MAAWA,EAAQ,OAEnBgT,mCCNAhT,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACR,MAAWA,EAAQ,OAEnBgT,oCCpBAhT,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACR,MAAWA,EAAQ,OAEnBgT,qCCfAhT,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,KACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACR,MAAWA,EAAQ,OAEnBgT,sCCjCAhT,EAAQ,OACR,MAAWA,EAAQ,OAEnBgT,0CCHAhT,EAAQ,OACR,MAAWA,EAAQ,OAEnBgT,wCCHAhT,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,IACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACR,MAAWA,EAAQ,OAEnBgT,uCCjBAhT,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MAA+B,mBCVvCA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACR,MAAWA,EAAQ,OAEnBgT,mCCNAhT,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,MACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,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","names":["ImpersonationService","constructor","_accountService","_appUrlService","_authService","this","impersonateTenant","userId","tenantId","input","ImpersonateTenantInput","subscribe","result","targetUrl","getAppRootUrl","impersonationToken","logout","impersonateUser","ImpersonateUserInput","delegatedImpersonate","userDelegationId","DelegatedImpersonateInput","backToImpersonator","abp","session","impersonatorTenantId","getAppRootUrlOfTenant","tenancyName","i0","factory","ElementStyleUtil","static","element","property","value","important","style","setProperty","attributeName","getPropertyValue","attibuteName","removeProperty","DataUtil","instance","key","data","instanceData","store","get","set","newMap","Map","delete","eventId","eventsIds","updateEventsIds","filter","f","has","forEach","val","v","k","push","getObjectPropertyValueByKey","obj","map","Object","entries","hasOwnProperty","getUniqueIdWithPrefix","prefix","Math","floor","random","Date","getTime","toString","stringSnakeToCamel","str","replace","m","toUpperCase","DOMEventHandlerUtil","selector","eventName","callBack","e","targets","querySelectorAll","target","i","length","call","parentElement","addEventListener","funcFromStore","removeEventListener","calee","type","currentTarget","ElementAnimateUtil","from","to","duration","update","complete","change","start","window","performance","now","requestAnimationFrame","loop","timestamp","time","t","b","c","d","easings","animationName","animateClasses","split","cssClass","classList","add","remove","offset","targetPos","getElementOffset","top","scrollPos","pageYOffset","document","documentElement","scrollTop","body","animate","scrollTo","getCSS","el","styleProp","defaultView","ownerDocument","toLowerCase","getComputedStyle","getElementMatches","p","Element","prototype","tagName","matches","webkitMatchesSelector","getClientRects","left","rect","getBoundingClientRect","win","pageXOffset","getScrollTop","scrollingElement","getViewPort","width","innerWidth","height","innerHeight","isVisibleElement","offsetWidth","offsetHeight","throttle","timer","func","delay","setTimeout","undefined","getElementChild","children","getElementChildren","childNodes","child","nodeType","slide","dir","speed","callback","calcHeight","getElementActualHeight","getElementActualCss","prop","cache","css","getAttribute","cssText","setAttribute","parseFloat","attributeValue","calcPaddingTop","calcPaddingBottom","parseInt","paddingTop","paddingBottom","display","overflow","getBreakpoint","breakpoint","getCSSVariableValue","variableName","hex","trim","getAttributeValueByBreakpoint","incomingAttr","toJSON","jsonStr","join","matched","substring","JSON","parse","_a","resultKey","resultBreakpoint","EventHandlerUtil","name","handlers","handlerId","meta","handlersIds","handerId","fired","getEventMetaByHandlerId","setEventMetaByNameAndHandlerId","one","eventValue","returnValue","handler","addEvent","removeEvent","DrawerStore","instanceId","drawerComponentObj","defaultDrawerOptions","overlay","baseClass","overlayClass","direction","DrawerComponent","_element","options","togglers","_getOption","closers","preventDefault","toggleElement","getElementById","_toggle","closeElement","_hide","String","hasBaseClass","contains","bodyCanvasAttr","shown","lastWidth","attr","optionName","option","_show","_deleteOverlay","removeAttribute","_createOverlay","overlayElement","createElement","elementZIndex","overlayZindex","append","overlayClassOption","parentNode","removeChild","_update","event","assign","instanceUid","_handlers","id","item","drawer","getInstance","hide","elementId","getAllInstances","dr","closest","isShown","createInstances","initGlobalHandlers","handleDismiss","hideAll","updateAll","CookieComponent","cookie","match","RegExp","decodeURIComponent","cookieOptions","path","expires","toUTCString","updatedCookie","encodeURIComponent","optionKey","optionValue","defaultScrollOptions","saveState","ScrollComponent","hasAttribute","getOption","dependencies","wrappers","elements","len","borderTop","borderBottom","getHeight","heightType","getHeightType","pos","scrollHandler","heghtType","resetHeight","destroyScrollHandler","setupHeight","setupScrollHandler","setupState","Function","getAutoHeight","hasInstace","scroll","resize","defaultScrollTopOptions","ScrollTopComponent","_scroll","_go","querySelector","defaultStickyOptions","reverse","animation","animationSpeed","animationClass","StickyComponent","offsetNum","st","lastScrollTop","enable","eventTriggerState","disable","dataStickyAttr","attrValue","zindex","widthTarget","targetElement","offsetLeft","instanceName","sticky","defaultToggleOptions","ToggleComponent","mode","_isEnabled","_disable","_enable","attribute","state","elementTargetAttr","elementToggleAttr","elementModeAttr","toggle","SwapperStore","defaultSwapperOptions","defaultSwapperQueires","componentName","instanseQuery","attrQuery","SwapperComponent","_options","_queries","parentSelector","prepend","queries","place","getWindow","node","isElement","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","max","min","round","getUAString","uaData","navigator","userAgentData","brands","Array","isArray","brand","version","userAgent","isLayoutViewport","test","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","visualViewport","addVisualOffsets","x","y","offsetTop","right","bottom","getWindowScroll","scrollLeft","getNodeName","nodeName","getDocumentElement","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflowY","overflowX","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","offsets","getNodeScroll","getHTMLElementScroll","clientLeft","clientTop","getLayoutRect","abs","getParentNode","assignedSlot","host","getScrollParent","indexOf","listScrollParents","list","_element$ownerDocumen","scrollParent","isBody","concat","updatedList","isTableElement","getTrueOffsetParent","position","getOffsetParent","getContainingBlock","isFirefox","currentNode","transform","perspective","contain","willChange","auto","basePlacements","end","viewport","popper","variationPlacements","reduce","acc","placement","placements","modifierPhases","order","modifiers","visited","Set","sort","modifier","requires","requiresIfExists","dep","depModifier","debounce","fn","pending","Promise","resolve","then","DEFAULT_OPTIONS","strategy","areValidElements","_len","arguments","args","_key","some","popperGenerator","generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","reference","orderedModifiers","modifiersData","attributes","styles","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","orderModifiers","phase","mergeByName","merged","current","existing","keys","runModifierEffects","enabled","_ref3","_ref3$options","effect","cleanupFn","forceUpdate","_state$elements","rects","reset","index","_state$orderedModifie","_state$orderedModifie2","destroy","onFirstUpdate","passive","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","_ref","basePlacement","variation","commonX","commonY","mainAxis","unsetSides","mapToStyles","_ref2","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","_ref4","roundOffsetsByDPR","dpr","devicePixelRatio","hash","getOppositePlacement","getOppositeVariationPlacement","parent","rootNode","getRootNode","next","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","getViewportRect","html","clientWidth","clientHeight","layoutViewport","getInnerBoundingClientRect","getDocumentRect","winScroll","scrollWidth","scrollHeight","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$strategy","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","padding","clippingClientRect","getClippingRect","mainClippingParents","getClippingParents","clippingParents","clipperElement","clippingRect","accRect","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","axis","within","mathMax","mathMin","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","createPopper","_options$scroll","_options$resize","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","arrow","applyStyles","initialStyles","margin","_options$offset","distanceAndSkiddingToXY","invertDistance","skidding","distance","_data$state$placement","flip","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","getExpandedFallbackPlacements","oppositePlacement","computeAutoPlacement","_options$allowedAutoP","allPlacements","allowedPlacements","overflows","a","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","find","slice","preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","getAltAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","center","centerOffset","_options$element","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","defaultMenuOptions","dropdown","hoverTimeout","accordion","slideSpeed","expand","MenuComponent","triggerElement","_isTriggerElement","itemElement","sub","subItem","parentItem","parents","buffer","_getItemParentElement","unshift","placementOption","_getItemOption","offsetValue","_getItemChildElement","_getItemSubElement","_getCss","_getItemSubType","subHTMLElement","getElementParents","s","_getItemLinkElement","hideDropdowns","parentZindex","getHighestZindex","bufferNode","isNaN","initDropdownPopper","appendChild","attach","_getDropdownPopperConfig","insertAfterElement","referenceNode","insertBefore","nextSibling","destroyDropdownPopper","_hideAccordions","_hideDropdown","subElement","slideDown","slideUp","itemsToHide","itemToHide","_hideAccordion","_hasItemSub","_reset","_isItemSubShown","_showDropdown","_showAccordion","_getItemElement","timeout","clearTimeout","items","_getItemChildElements","itemSubType","_click","_link","_dismiss","_mouseover","_mouseout","_getItemToggleElement","_getItemParentElements","_isItemParentShown","_isItemDropdownPermanent","_setTriggerElement","elementMenu","menu","menuData","subMenu","skip","getItemSubType","getItemSubElement","menuInstance","menuItems","menuObj","getElement","click","stopPropagation","link","dismiss","mouseover","mouseout","ThemesLayoutBaseComponent","AppComponentBase","injector","_dateTimeService","super","TenantLoginInfoDto","SubscriptionStartType","EditionPaymentType","AppConsts","currentTheme","baseSettings","asideSkin","subscriptionStatusBarVisible","appSession","tenant","subscriptionPaymentType","SubscriptionPaymentType","isInTrialPeriod","subscriptionIsExpiringSoon","subscriptionEndDateUtc","today","getUTCDate","plusDays","getSubscriptionExpiringDayCount","todayUTC","diff","days","getTrialSubscriptionNotification","l","edition","displayName","editionPaymentType","BuyNow","getExpireNotification","localizationKey","isMobileDevice","KTUtil","isDarkModeActive","theme","layout","darkMode","getSkin","selectors","LuxonFromNowPipe","toRelative","pure","ctx_r17","core","$event","ctx_r23","HeaderNotificationsComponent","_notificationService","_userNotificationHelper","_zone","ngOnInit","loadNotifications","registerToEvents","UrlHelper","location","href","getUserNotifications","unreadNotificationCount","unreadCount","notifications","_forEach","format","shouldUserUpdateApp","self","subscribeToEvent","userNotification","run","onNotificationReceived","show","onNotificationsRefresh","userNotificationId","success","onNotificationsRead","isUnread","setAllNotificationsAsRead","setAllAsRead","openNotificationSettingsModal","openSettingsModal","setNotificationAsRead","setAsRead","gotoUrl","url","MenuSearchBarComponent","_appNavigationService","router","initializeMenuSearch","showMenuItem","menuItem","searchMenuItem","searchMenuResults","allMenuItems","includes","query","route","NameValuePair","selectMenuItem","navigate","navigated","selected","getAllMenuItems","isMenuSearchActive","themeSettings","searchActive","SideBarMenuComponent","permission","render","getMenu","currentRouteUrl","events","pipe","NavigationEnd","NavigationCancel","reinitializeMenu","ngAfterViewInit","scrollToCurrentMenuElement","isMenuItemIsActive","isMenuRootItemIsActive","urlString","parseUrl","root","primary","segments","segment","exactMatch","routeTemplates","FormattedStringValueExtracter","Extract","IsMatch","pathname","scrollIntoView","block","getItemCssClasses","classes","iconMenu","customClass","objectPath","getSubMenuItemCssClass","TopBarMenuComponent","menuWrapperStyle","ThemeAssetContributorFactory","getMenuWrapperStyle","depth","cssClasses","getAnchorItemCssClasses","getSubmenuCssClasses","getItemAttrSubmenuToggle","FooterComponent","releaseDate","application","toFormat","webAppGuiVersion","themeAssetContributor","footerStyle","getFooterStyle","QuickThemeSelectionComponent","setting","getBoolean","LanguageSwitchDropdownComponent","_profileServiceProxy","languages","_filter","localization","isDisabled","currentLanguage","changeLanguage","languageName","ChangeUserLanguageDto","utils","setCookieValue","appPath","reload","FeatureCheckerPipe","featureCheckerService","FeatureCheckerService","feature","isEnabled","ChatToggleButtonComponent","_abpSessionService","isHost","messageCount","unreadChatMessageCount","chatConnected","SubscriptionNotificationBarComponent","UserMenuComponent","_router","_linkedAccountService","_abpMultiTenancyService","_userLinkServiceProxy","_impersonationService","isImpersonatedLogin","impersonatorUserId","isMultiTenancyEnabled","setCurrentLoginInformations","getProfilePicture","getRecentlyLinkedUsers","usernameFirstLetter","user","userName","shownLoginName","getShownLoginName","emailAddress","getShownUserName","linkedUser","username","profilePicture","getRecentlyUsedLinkedUsers","recentlyLinkedUsers","showLoginAttempts","showLinkedAccounts","trigger","showUserDelegations","changePassword","changeProfilePicture","changeMySettings","onMySettingsModalSaved","backToMyAccount","switchToLinkedUser","switchToAccount","downloadCollectedData","prepareCollectedData","message","ctx","DefaultLogoComponent","setLogoUrl","onResize","defaultLogo","skin","defaultSmallLogo","DOCUMENT","DefaultBrandComponent","getMenuSkin","ActiveDelegatedUsersComboComponent","_userDelegationService","getActiveUserDelegations","delegations","switchToDelegatedUser","selectedOptions","confirm","isConfirmed","currentSelectedUserDelegationId","selectedUserDelegationId","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","ToggleDarkModeComponent","_uiCustomizationAppService","toggleDarkMode","changeDarkModeOfCurrentTheme","DefaultLayoutComponent","installationMode","defaultMinimizedAside","getMobileMenuSkin","appModuleAnimation","LanguagePickerLocalComponent","_languageService","LanguageData","flagUrl","tetantLanguageName$","tenantLanguageName$","language","isUserLoggedIn","showLanguageList","islanguageListShown","SiteNavbarComponent","renderer","removeBurgerMenu","toggleBurger","myLinksId","listen","SiteLayoutComponent","changeDetectorRef","getStartOfDay","getEndOfDay","Subject","_showLogsSubject","asObservable","tap","_showLogsTapCount","distinctUntilChanged","_logsDate","detectChanges","setInterval","logsDate","logs","_logs","copyLogs","copyToClipboard","innerText","text","textArea","select","execCommand","invervalId","clearInterval","onclick","LinkAccountModalComponent","_userLinkService","EventEmitter","LinkToUserInput","active","linkUser","modal","onShown","focus","save","saving","linkToUser","finalize","notify","info","close","modalSave","emit","LinkedAccountsModalComponent","abpMultiTenancyService","getLinkedUsers","primengTableHelper","showLoadingIndicator","getMaxResultCount","paginator","getSkipCount","getSorting","dataTable","hideLoadingIndicator","totalRecordsCount","totalCount","records","getShownLinkedUserName","deleteLinkedUser","unlinkUserInput","UnlinkUserInput","unlinkUser","reloadPage","changePage","getPage","manageLinkedAccounts","linkAccountModal","switchToUser","modalClose","CreateNewUserDelegationModalComponent","_commonLookupService","CreateUserDelegationDto","userDelegation","userLookupModal","configure","title","dataSource","skipCount","maxResultCount","FindUsersInput","excludeCurrentUser","findUsers","showCommonLookupModal","userSelected","targetUserId","selectedUsername","startTime","getStartOfDayForDate","endTime","getEndOfDayForDate","delegateNewUser","UserDelegationsModalComponent","getUserDelegations","getDelegatedUsers","deleteUserDelegation","removeDelegation","manageUserDelegations","createNewUserDelegation","ChangePasswordModalComponent","_profileService","PasswordComplexitySetting","currentPassword","password","confirmPassword","getPasswordComplexitySetting","passwordComplexitySetting","ChangePasswordInput","newPassword","SmsVerificationModalComponent","VerifySmsCodeInputDto","verifyCodeInput","phoneNumber","newPhoneNumber","verifySmsCode","MySettingsModalComponent","clock","provider","supportsMultipleTimezone","SettingScopes","multiTenancy","isTwoFactorLoginEnabledForApplication","getCurrentUserProfileForEdit","smsEnabled","_initialTimezone","timezone","canChangeUserName","isGoogleAuthenticatorEnabled","isPhoneNumberConfirmed","savedPhoneNumber","updateQrCodeSetupImageUrl","updateGoogleAuthenticatorKey","qrCodeSetupImageUrl","disableGoogleAuthenticator","smsVerify","SendVerificationSmsInputDto","sendVerificationSms","smsVerificationModal","changePhoneNumberToVerified","updateCurrentUserProfile","surname","_baseLt","baseLt","other","array","baseExtremum","iteratee","comparator","computed","isSymbol","identity","_arrayReduce","arrayReduce","accumulator","initAccum","baseReduce","collection","eachFunc","ChatFriendDto","FriendDto","FriendProfilePictureComponent","setProfileImage","getFriendProfilePicture","ChatFriendListItemComponent","AbpMultiTenancyService","tenanycName","getRemoteImageUrl","profilePictureId","remoteServiceUrl","ChatMessageComponent","_chatService","_localStorageService","setChatMessageType","getItem","err","encryptedAuthToken","token","startsWith","chatMessageType","image","chatMessage","contentType","file","fileName","linkMessage","ChatBarComponent","_friendshipService","_chatSignalrService","_httpClient","FriendshipState","ChatSide","ChatMessageReadState","uploadUrl","chatUserSearchHint","selectedUser","_selectedUser","isOpen","_isOpen","pinned","_pinned","newValue","setItem","markAllUnreadMessagesOfUserAsRead","messages","messagesLoaded","mouseleave","chatDrawer","shareCurrentLink","sendMessage","uploadImage","formData","FormData","files","post","chatImageUpload","clear","response","isFileSelected","progress","uploadFile","chatFileUpload","onBeforeSend","xhr","upload","lengthComputable","loaded","total","onProgress","originalEvent","init","blockUserInput","BlockUserInput","friendTenantId","friendUserId","blockUser","unblock","unblockUserInput","UnblockUserInput","unblockUser","removeFriendUI","friends","quickSideBarBackClick","removeFriend","unreadMessages","readState","unreadMessageIds","_map","MarkAllUnreadMessagesOfUserAsReadInput","loadPreviousMesssagesOfSelectedUser","loadMessages","minMessageId","loadingPreviousUserMessages","getUserChatMessages","allPreviousMessagesLoaded","openSearchModal","filterText","addFriendSelected","CreateFriendshipRequestInput","createFriendshipRequest","userNameFilter","search","CreateFriendshipRequestByUserNameInput","tenancyAndUserNames","interTenantChatAllowed","createFriendshipRequestByUserName","getFriendOrNull","friend","getFilteredFriends","friendTenancyName","friendUserName","toLocaleLowerCase","getFilteredFriendsCount","getUserNameByChatSide","chatSide","currentUser","getFixedMessageTime","messageTime","fromISODateString","plusSeconds","serverClientTimeDifference","getFriendsAndSettings","getUserChatFriendsWithSettings","getDiffInSeconds","getDate","serverTime","triggerUnreadMessageCountChangeEvent","scrollToBottom","heightInt","loadLastState","selectFriend","chatUser","dispatchEvent","Event","sendingMessage","reversePinned","on","totalUnreadMessageCount","baseIteratee","baseEach","_reduce","memo","unreadMessageCount","registerEvents","onMessageReceived","targetTenantId","formatString","truncateString","className","showChatPanel","isOwnRequest","onFriendshipRequestReceived","onUserConnectionStateChanged","isOnline","isConnected","onUserStateChanged","onAllUnreadMessagesOfUserRead","onReadStateChange","receiverReadState","onConnected","DomHelper","getReadStateHtml","tenantToTenantChatAllowed","tenantToHostChatAllowed","ThemeSelectionPanelComponent","_uiCustomizationService","currentThemeName","getLocalizedThemeName","toPascalCase","changeTheme","themeName","changeThemeWithDefaultValues","NotificationSettingsModalComponent","getSettings","UpdateNotificationSettingsInput","receiveNotifications","settings","n","subscription","NotificationSubscriptionDto","isSubscribed","updateNotificationSettings","getNotificationSettings","SessionTimeoutModalComponent","_appAuthService","_sessionService","ngOnDestroy","unsubscribe","currentSecond","timeOutSecond","changeNotifyContent","stop","done","redirectToLockScreen","progresbarWidth","getCurrentLoginInformations","stringify","returnUrl","encodeURI","SessionTimeoutComponent","bindActions","writeToStorage","subscriptions","control","destroy$","fromEvent","takeUntil","debounceTime","setUserActivity","IsUserActive","controlStorage","localStorage","lastActivityTimeStorageKey","lastActivityTime","controlValue","getCookieValue","notifierIsOpened","sessionTimeOutModal","AppComponent","_scrollService","easilyLoggedIn","SessionCheck","settingsModal","notificationSettingsModal","flag","registerModalOpenEvents","SignalRHelper","LocalStorageService","signalr","autoConnect","connect","hubs","qs","remoteServiceBaseUrl","startConnection","script","onload","src","head","pluginsInitialization","defaultSourceName","prevToken","getData","pluginsInitialized","linkedAccountsModal","userDelegationsModal","changePasswordModal","changeProfilePictureModal","mySettingsModal","SiteFooterComponent","currentPageCheck","getCurrentYear","isInAboutPage","isInContactPage","isInSupportPage","currentYear","getFullYear","MovingTextComponent","handleType","loopNum","dataText","fullText","movingFunction","HomeHeaderComponent","isUserGuest","HomeComponent","ourShowImage","windowWidth","ourShowImageMobile","ourShowImageDesktop","NotificationsComponent","record","isRead","formattedNotification","fromNow","date","formatRecord","formatNotification","formattedRecord","truncateStringWithPostfix","formatNotifications","formattedRecords","getNotifications","shouldResetPaging","readStateFilter","UserNotificationState","dateRange","deleteNotification","deleteNotifications","deleteAllUserNotifications","endOf","getRowClass","getNotificationTextBySeverity","severity","SUCCESS","WARN","ERROR","FATAL","INFO","HeaderComponent","PageDetermination","AboutPageHeaderChanges","isInAboutUsPage","color","imgSrc","isInEpisodesPage","isInGamesPage","isInDownload","isInEpisodePage","isInLearnMorePage","isInInfoPage","isInEpisodesOrGamesOrEpisodePage","InfoComponent","AboutComponent","mobileVersionCheck","scrollToForm","section","behavior","isMobileVersion","screenWidth","mobileVersionWidth","wordplay_arrow","ContactComponent","SupportComponent","PrivacyPolicyComponent","goToLink","open","OurShowComponent","_episodeService","BehaviorSubject","_allEpisodesSubject","mergeMap","getAllEpisodes","combineLatest","_allEpisodes$","allEpisodes","tenantLanguageName","episodes","applicationLanguageName","episodesAll","eposidesArrrayLength","placeEpisodes","_episodes$","_mobileVersionCheck","firstIndex","secondIndex","thirdIndex","clickLearnMore","isLearnMoreClicked","regularDecrease","regularIncrease","ourShowHeader","EpisodeMedia","videoUrl","audioUrl","EpisodePanelComponent","_episodeUsersServiceProxy","Number","snapshot","paramMap","EntityDto","episodeId","distinctUntilKeyChanged","compare","_currentEpisode$","episode","episodeVideoContent","getUrl","_episodeVideoUrl$","startSyncMedia","audioContent","_episodeAudioUrl$","shareReplay","media","_media","scriptContent","vocabularyContent","_urlSubject","fileGuid","merge","_syncAudioVideo$","_streams","entityDto","onPlayerReady","_mediaApi","configureFullScreen","initializeVideo","initializeAudio","console","log","fsAPI","polyfill","request","videoMedia","medias","videoElement","elem","audioMedia","audioElement","subscribeMedia","error","mediaId","getMediaById","abort","emptied","stalled","suspend","waiting","loadedData","loadedMetadata","stopSyncMedia","_syncMediaIntervalId","syncMedia","_isSyncingMedia","_syncMedia","isMediaPlaying","videoState","readyState","HTMLMediaElement","HAVE_FUTURE_DATA","isMediaLoading","currentTime","pause","audioState","paused","play","playPauseMedia","pauseMedia","playMedia","isAudioMuted","watchedEpisode","userWatchedVideo","mediaEnded","goToBeginning","onVideoEnd","scrolled","openFile","_url$","take","EpisodeDescriptionComponent","episodesInCurrentLanguage","episodesLength","placeEpisodesMobile","findIndex","currentIndex","nextEpisodesMobile","nextEpisodes","_currentEpisodeIndex$","nextIndex","_nextEpisodeIndexValueSubject","_nextEpisodeIndexValue$","_nextEpisode$","imageContent","_navigateNextEpisodeSubject","concatMap","nextEpisode","_navigateNextEpisode$","_nextEpisodeIndex$","_currentEpisodeIndex","__currentEpisodeIndexSubject","navigateByCarousel","leftMobile","regularDecreaseMobile","rightMobile","regularIncreaseMobile","leftClick","rightClick","EpisodeComponent","sanitizer","_userServiceProxy","_episodeUserService","_tenantService","_episodeGuardService","_episodeIdSubject","currentEpisodeId","_episodeId$","getEpisodeForView","episodeDto","switchMap","getCurrentEpisodeUser","repeat","countOrConfig","count","Infinity","EMPTY","operate","source","subscriber","sourceSub","soFar","resubscribe","notifier","innerFrom","notifierSubscriber","createOperatorSubscriber","subscribeToSource","syncUnsub","_userSubject","getCurrentUser","_currentEpisodeUser$","currentEpisodeUser","hasWatched","submittedForm","hasFeedback","_tenantSubject","_user$","getUTCFullYear","birthDate","year","gender","_episode$","_tenant$","_currentUserGender$","_currentUserAge$","age","googleFormUrl","bypassSecurityTrustResourceUrl","_feedBackRequiredForTenantSubject","isFeedBackRequiredForTenant","isFeedbackRequired","nextEpisodeLogic","feedbackRequired","_feedBackRequiredForTenant$","_forUrl$","_checkWatchedEpisode$","GamesData","imageUrl","showVideo","GamesComponent","games","LetsPlaySrc","ABC","Mobile","GamesHeader","goDownload","toggleVideo","currentGame","game","OvalComponent","EpisodeDto","label","description","LearnMoreComponent","_episodeOvalsServiceProxy","getAllDistinctEpisodeOvals","_tenantLanguageName$","firstEpisodeId","selectedEpisodeId","_episodeId","selectedEpisode","_initialize$","onDropdownChange","onDropdownClosed","isEpisodesDropdownOpened","onDropdownOpened","OvalContentLM1Component","_filesSubject","getEpisodeOvalFiles","episodeOvalId","_episodeOvalFiles$","ovalFiles","ovalName","episodeTitle","DifficultyLevel","OvalContentLM2Component","difficultyLevel","LM2_Sun","filesImagesLM2","LM2_E0","LM2_E1","LM2_E2","OvalContentLM3Component","TreeMobile","filesImagesLM3","LM3_E0","LM3_E1","LM3_E2","OvalContentLM4Component","imageName","OvalContentLM5Component","OvalContentLM6Component","LearnMoreHeader","OvalContentDefaultComponent","OvalContentComponent","determineTemplate","ovalTemplate","_determineTemplate$","_filesWithLevel$","selectedTemplate","AboutOurShowComponent","_aboutUsService","AboutUsSlider","AboutMediaComponent","DownloadPageComponent","_storageService","getAppUrls","AppRoutingModule","spinnerService","NavigationStart","RouterModule","component","canActivate","AppRouteGuard","canActivateChild","redirectTo","pathMatch","loadChildren","__webpack_require__","MainModule","preload","AdminModule","canLoad","EpisodeGuardService","routing","goingId","getCurrentEpisodeStatus","mustFinishEpisodeId","popUped","episodePopUp","Swal","icon","showCancelButton","confirmButtonColor","focusCancel","confirmButtonText","RouteService","viewPortScroller","scrollToPosition","SessionService","currentUserTokenValue","currentUserToken","setData","imports","CommonModule","FormsModule","HttpClientModule","HttpClientJsonpModule","ModalModule","TabsModule","BsDropdownModule","PopoverModule","BsDatepickerModule","AppCommonModule","FileUploadModule","UtilsModule","ServiceProxyModule","TableModule","PaginatorModule","ProgressBarModule","PerfectScrollbarModule","TextMaskModule","ImageCropperModule","AutoCompleteModule","NgxSpinnerModule","AppBsModalModule","AppSharedModule","ngModule","providers","AppAuthService","DateTimeService","AppLocalizationService","AppNavigationService","BsDatepickerConfig","useFactory","NgxBootstrapDatePickerConfigService","BsDaterangepickerConfig","BsLocaleService","ReactiveFormsModule","WordPlayCommonModule","CountoModule","customHeaders","tenantIdCookieName","getTenantIdCookie","Authorization","auth","getToken","XmlHttpRequestHelper","clearToken","clearRefreshToken","removeItem","_permissionChecker","_refreshTokenService","canActivateInternal","of","sessionObservable","tryAuthWithRefreshToken","autResult","isGranted","selectBestRoute","LocalizationService","ls","apply","sourcename","localizedText","localize","CommonLookupModalComponent","_merge","Error","refreshTable","getRecordsIfNeeds","loadOnStartup","isInitialized","getRecords","selectItem","boolOrPromise","canSelect","itemSelected","isFilterEnabled","pageSize","BreadcrumbItem","routerLink","navigationExtras","isLink","SubHeaderComponent","goToBreadcrumb","breadcrumb","SubheaderModule","_appLocalizationService","createDateRangePickerOptions","locale","applyLabel","cancelLabel","customRangeLabel","minDate","maxDate","opens","ranges","minusDays","startOf","minus","months","DateTime","setZone","timing","timeZoneInfo","iana","timeZoneId","getYear","getStartOfWeek","fromJSDate","getStartOfDayMinusDays","daysFromNow","newDate","getEndOfDayPlusDays","getEndOfDayMinusDays","dayCount","plus","seconds","formatISODateString","dateText","formatJSDate","jsDate","formatDate","createJSDate","month","day","createDate","toJSDate","createUtcDate","toUtcDate","getMonth","toUTC","getTimezoneOffset","ianaTimezoneId","hourAndMinuteOffset","zone","multiplier","hourParts","minuteOffset","changeTimeZone","utcDateString","toISOString","currentTimezoneString","dateStringWithoutTimezome","TimeZoneComboComponent","_timingService","UntypedFormControl","getTimezones","defaultTimezoneScope","timeZones","writeValue","selectedTimeZone","setValue","registerOnChange","valueChanges","registerOnTouched","onTouched","setDisabledState","ChatSignalrService","configureConnection","connection","chatHub","reconnectTime","tries","reject","catch","onclose","isChatConnected","debug","registerChatEvents","friendData","messageData","warn","invoke","runOutsideAngular","LinkedAccountService","SwitchToLinkedAccountInput","switchToLinkedAccount","switchAccountToken","AppMenu","AppMenuItem","permissionName","external","parameters","featureDependency","requiresAuthentication","hasFeatureDependency","featureDependencySatisfied","_permissionCheckerService","_appSessionService","checkChildMenuItemPermission","subMenuItem","hideMenuItem","ignoreFeatureCheckForHostUsers","getAllMenuItemsRecursive","UserNotificationHelper","http","notification","notificationName","properties","binaryObjectId","fileToken","fileType","getUiIconBySeverity","getIconFontClassBySeverity","truncateText","formatted","getFormattedMessageFromUserNotification","creationTime","getUserNotificationStateAsString","userNotificationState","UNREAD","iconFontClass","showUiNotifyForUserNotification","didOpen","toast","Push","onClick","withCredentials","URL","searchParams","GuidEntityDto","ChangeProfilePictureModalComponent","_tokenService","initializeModal","temporaryPictureUrl","useGravatarProfilePicture","canUseGravatar","initFileUploader","imageChangedEvent","uploader","clearQueue","fileChangeEvent","size","maxProfilPictureBytesUserFriendlyValue","uploadProfilePictureInputLabel","nativeElement","imageCroppedFile","addToQueue","base64ToFile","base64","FileUploader","_uploaderOptions","autoUpload","authToken","removeAfterUpload","onAfterAddingFile","guid","onBuildItemForm","fileItem","form","onSuccessItem","status","resp","updateProfilePicture","UpdateProfilePictureInput","values","updateProfilePictureToUseGravatar","s4","uploadAll","ChangeProfilePictureModalModule","AboutUsService","LanguageService","ThemeHelper","getTheme","NgxSpinnerTextService","getText","currentText","setText","NgxBootstrapLocaleMappingService","cultureMap","vi","ta","getModuleName","moduleNameMap","containerClass","localeService","use","supportedLocale","moduleLocaleName","_supportedLocales","module","defineLocale","invalidTimingValue","exp","ɵRuntimeError","ngDevMode","isBrowser","isNode","process","optimizeGroupPlayer","players","NoopAnimationPlayer","ɵAnimationGroupPlayer","normalizeKeyframes$1","driver","normalizer","keyframes","preStyles","postStyles","errors","normalizedKeyframes","previousOffset","previousKeyframe","kf","isSameOffset","normalizedKeyframe","normalizedProp","normalizedValue","normalizePropertyName","ɵPRE_STYLE","AUTO_STYLE","normalizeStyleValue","animationFailed","listenOnPlayer","player","onStart","copyAnimationEvent","onDone","onDestroy","phaseName","totalTime","makeAnimationEvent","triggerName","fromState","toState","disabled","_data","getOrSetDefaultValue","defaultValue","parseTimelineCommand","command","separatorPos","_contains","elm1","elm2","_query","_documentElement","getParentElement","_CACHED_BODY","_IS_WEBKIT","containsElement","invokeQuery","NoopAnimationDriver","validateStyleProperty","getBodyNode","containsVendorPrefix","charAt","matchesElement","_selector","computeStyle","easing","previousPlayers","scrubberAccessRequested","ɵfac","ɵprov","AnimationDriver","NOOP","ENTER_CLASSNAME","LEAVE_CLASSNAME","NG_TRIGGER_CLASSNAME","NG_TRIGGER_SELECTOR","NG_ANIMATING_CLASSNAME","NG_ANIMATING_SELECTOR","resolveTimingValue","_convertTimeValueToMS","unit","resolveTiming","timings","allowNegativeValues","parseTimeExpression","delayMatch","easingVal","containsErrors","startIndex","negativeStepValue","negativeDelayValue","splice","copyObj","destination","convertToMap","styleMap","copyStyles","backfill","getStyleAttributeString","writeStyleAttribute","styleAttrValue","camelCaseToDashCase","setStyles","formerStyles","camelProp","dashCaseToCamelCase","eraseStyles","_","normalizeAnimationEntry","steps","sequence","PARAM_REGEX","extractStyleParams","params","exec","lastIndex","interpolateParams","original","varName","localVal","invalidParamValue","iteratorToArray","iterator","arr","DASH_CASE_REGEXP","visitDslNode","visitor","context","visitTrigger","visitState","visitTransition","visitSequence","visitGroup","visitAnimate","visitKeyframes","visitStyle","visitReference","visitAnimateChild","visitAnimateRef","visitQuery","visitStagger","invalidNodeType","parseTransitionExpr","transitionValue","expressions","parseInnerTransitionStr","eventStr","parseAnimationAlias","alias","invalidTransitionAlias","invalidExpression","expr","separator","makeLambdaFromStates","TRUE_BOOLEAN_VALUES","FALSE_BOOLEAN_VALUES","lhs","rhs","LHS_MATCH_BOOLEAN","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","SELF_TOKEN_REGEX","buildAnimationAst","metadata","warnings","AnimationAstBuilderVisitor","build","_driver","AnimationAstBuilderContext","_resetContextStyleTimingState","currentQuerySelector","collectedStyles","queryCount","depCount","states","transitions","invalidTrigger","definitions","def","stateDef","transition","invalidDefinition","styleAst","astParams","containsDynamicStyles","missingSubs","invalidState","metadataName","matchers","normalizeAnimationOptions","furthestTime","step","innerAst","timingAst","constructTimingAst","makeTimingAst","strValue","ast","dynamic","currentAnimateTimings","styleMetadata","isEmpty","newStyleData","_styleAst","isEmptyStep","_makeStyleAst","_validateStyleAst","metadataStyles","styleTuple","collectedEasing","styleData","tuple","collectedEntry","updateCollectedStyle","invalidParallelAnimation","firstStart","firstEnd","secondStart","secondEnd","validateStyleParams","invalidStyleParams","invalidKeyframes","totalKeyframesWithOffsets","offsetsOutOfOrder","keyframesOutOfRange","offsetVal","consumeOffset","invalidOffset","keyframeOffsetsOutOfOrder","generatedOffset","keyframesMissingOffsets","limit","animateDuration","durationUpToThisFrame","currentQuery","includeSelf","normalizeSelector","hasAmpersand","optional","originalSelector","invalidStagger","currentTransition","unsupportedCSSPropertiesFound","normalizeParams","createTimelineInstruction","preStyleProps","postStyleProps","subTimeline","ElementInstructionMap","instructions","existingInstructions","ENTER_TOKEN_REGEX","LEAVE_TOKEN_REGEX","buildAnimationTimelines","rootElement","enterClassName","leaveClassName","startingStyles","finalStyles","subInstructions","AnimationTimelineBuilderVisitor","buildKeyframes","AnimationTimelineContext","currentTimeline","delayNextStep","timelines","timeline","containsAnimation","lastRootTimeline","allowOnlyTimelineStyles","elementInstructions","innerContext","createSubContext","_visitSubInstructions","transformIntoNewTimeline","previousNode","_applyAnimationRefDelays","animationsRefsOptions","animationRefOptions","animationDelay","animationDelayValue","instruction","instructionTimings","appendInstructionToTimeline","updateOptions","subContextCount","snapshotCurrentStyles","DEFAULT_NOOP_PREVIOUS_NODE","applyStylesToKeyframe","innerTimelines","mergeTimelineCollectedStyles","_visitTiming","incrementTime","hasCurrentStyleProperties","forwardFrame","applyEmptyStep","innerTimeline","forwardTime","elms","currentQueryTotal","sameElementTimeline","currentQueryIndex","parentContext","tl","maxTime","currentStaggerTime","startingTime","_enterClassName","_leaveClassName","initialTimeline","TimelineBuilder","skipIfExists","newOptions","optionsToUpdate","newParams","paramsToUpdate","_copyOptions","oldParams","newTime","fork","updatedTimings","builder","SubTimelineBuilder","stretchStartingKeyframe","results","invalidQuery","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_localTimelineStyles","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_globalTimelineStyles","_loadKeyframe","hasPreStyleStep","_updateStyle","flattenStyles","allStyles","allProperties","getFinalKeyframe","details1","details0","finalKeyframes","keyframe","finalKeyframe","preProps","postProps","kf0","kf1","_stretchStartingKeyframe","newKeyframes","startingGap","newFirstKeyframe","oldFirstKeyframe","roundOffset","oldOffset","decimalPoints","mult","pow","AnimationStyleNormalizer","DIMENSIONAL_PROP_SET","WebAnimationsStyleNormalizer","propertyName","userProvidedProperty","normalizedProperty","strVal","valAndSuffixMatch","invalidCssUnitValue","createTransitionInstruction","isRemovalTransition","fromStyles","toStyles","queriedElements","EMPTY_OBJECT","AnimationTransitionFactory","_triggerName","_stateStyles","currentState","nextState","oneOrMoreTransitionsMatch","matchFns","buildStyles","stateName","styler","currentOptions","nextOptions","skipAstBuild","transitionAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","animationOptions","applyParamDefaults","elm","queriedElementsList","userParams","defaults","AnimationStateStyles","defaultParams","combinedParams","AnimationTrigger","_normalizer","transitionFactories","balanceProperties","fallbackTransition","createFallbackTransition","containsQueries","matchTransition","matchStyles","stateMap","key1","key2","EMPTY_INSTRUCTION_MAP","TimelineAnimationEngine","bodyNode","_animations","_playersById","register","registerFailed","_buildPlayer","create","autoStylesMap","inst","missingOrDestroyedAnimation","createAnimationFailed","_getPlayer","missingPlayer","baseEvent","restart","finish","setPosition","QUEUED_CLASSNAME","DISABLED_CLASSNAME","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","namespaceId","setForRemoval","setForMove","hasAnimation","removedBeforeQueried","NULL_REMOVED_QUERIED_STATE","REMOVAL_FLAG","StateValue","isObj","normalizeTriggerValue","absorbOptions","VOID_VALUE","DEFAULT_STATE_VALUE","AnimationTransitionNamespace","hostElement","_engine","_triggers","_queue","_elementListeners","_hostClassName","addClass","missingTrigger","missingEvent","isTriggerEventValid","unsupportedTriggerEvent","listeners","triggersWithStates","statesByElement","afterFlush","_getTrigger","unregisteredTrigger","defaultToFallback","TransitionAnimationPlayer","objEquals","k1","k2","reportError","playersOnElement","playersByElement","queued","isFallbackTransition","totalQueuedPlayers","removeClass","deregister","entry","clearElementCache","elementPlayers","_signalRemovalForInnerTriggers","namespaces","fetchNamespacesByElement","ns","triggerLeaveAnimation","afterFlushAnimationsDone","destroyAfterComplete","triggerStates","previousTriggersValues","markElementAsRemoved","processLeaveNode","prepareLeaveAnimationListeners","elementStates","visitedTriggers","listener","removeNode","engine","childElementCount","containsPotentialParentTransition","totalAnimations","currentPlayers","playersByQueriedElement","removalFlag","destroyInnerAnimations","_onRemovalComplete","insertNode","drainQueuedTransitions","microtaskId","destroyed","markedForDestroy","d0","d1","elementContainsData","containsData","TransitionAnimationEngine","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","namespacesByHostElement","collectedEnterElements","collectedLeaveElements","onRemovalComplete","queuedPlayers","createNamespace","_balanceNamespaceList","collectEnterElement","namespaceList","found","ancestor","ancestorNs","registerTrigger","_fetchNamespace","stateValue","isElementNode","details","markElementAsDisabled","isHostElement","hostNS","_buildInstruction","subTimelines","skipBuildAst","containerElement","destroyActiveAnimationsForElement","finishActiveQueriedAnimationOnElement","whenRenderingDone","flush","cleanupFns","_flushAnimations","quietFns","triggerTransitionsFailed","skippedPlayers","skippedPlayersMap","queuedInstructions","allPreStyleElements","allPostStyleElements","disabledElementsSet","nodesThatAreDisabled","allTriggerElements","enterNodeMap","buildRootMap","enterNodeMapIds","nodes","allLeaveNodes","mergedLeaveNodes","leaveNodesWithoutAnimations","leaveNodeMapIds","leaveNodeMap","allPlayers","erroneousTransitions","previousValue","nodeIsOrphaned","stringMap","setVal","transitionFailed","allPreviousPlayersMap","animationElementMap","_beforeAnimationBuild","_getPreviousPlayers","prevPlayer","replaceNodes","replacePostStylesAsPre","postStylesMap","cloakAndComputeStyles","preStylesMap","_b","pre","rootPlayers","subPlayers","NO_PARENT_ANIMATION_ELEMENT_DETECTED","overrideTotalTime","parentWithAnimation","parentsToAdd","detectedParent","innerPlayer","_buildAnimation","setRealPlayer","parentPlayers","parentPlayer","playersForElement","syncPlayerEvents","queriedPlayerResults","queriedInnerElements","j","queriedPlayers","activePlayers","removeNodesAfterAnimationDone","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation","targetNameSpaceId","targetTriggerName","timelineInstruction","realPlayer","getRealPlayer","beforeDestroy","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","flattenGroupPlayers","finalPlayers","_flattenGroupPlayersRecur","wrappedPlayer","deleteOrUnsetInMap","currentValues","_player","_containsRealPlayer","_queuedCallbacks","callbacks","triggerCallback","_queueEvent","hasStarted","getPosition","cloakElement","oldValue","valuesMap","elementPropsMap","defaultStyle","cloakVals","failedElements","props","roots","rootMap","nodeSet","localRootMap","getRoot","postEntry","preEntry","AnimationEngine","_triggerCache","_transitionEngine","_timelineEngine","componentId","cacheKey","triggerBuildFailed","buildTrigger","onInsert","onRemove","disableAnimations","action","eventPhase","SpecialCasedStyles","_startStyles","_endStyles","_state","initialStylesByElement","_initialStyles","WeakMap","filterNonAnimatableStyles","isNonAnimatableStyle","WebAnimationsPlayer","_specialStyles","_onDoneFns","_onStartFns","_onDestroyFns","_initialized","_finished","_started","_destroyed","_originalOnDoneFns","_originalOnStartFns","currentSnapshot","_duration","_delay","_onFinish","_preparePlayerBeforeStart","domPlayer","_triggerWebAnimation","_finalKeyframe","_resetDomPlayerState","_convertKeyframesToObject","kfs","frame","fromEntries","cancel","methods","WebAnimationsDriver","validateAnimatableStyleProperty","playerOptions","fill","previousStyles","previousWebAnimationPlayers","allowPreviousPlayerStylesMerge","normalizeKeyframes","balancePreviousStylesIntoKeyframes","startingKeyframe","missingStyleProps","specialStyles","packageNonAnimatableStyles","startStyles","endStyles","BrowserAnimationBuilder","AnimationBuilder","rootRenderer","doc","_nextAnimationId","_renderer","createRenderer","encapsulation","ViewEncapsulation","issueAnimationCommand","BrowserAnimationFactory","AnimationFactory","_id","RendererAnimationPlayer","_command","_listen","DISABLE_ANIMATIONS_FLAG","AnimationRendererFactory","delegate","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","promise","BaseAnimationRenderer","animationTriggers","AnimationRenderer","begin","_scheduleCountTask","scheduleListenerCallback","i1","_onDestroy","destroyNode","namespace","createComment","createText","newChild","refChild","isMove","oldChild","selectRootElement","selectorOrNode","preserveContent","setStyle","flags","removeStyle","resolveElementFromTarget","parseTriggerCallbackName","dotIndex","SHARED_ANIMATION_PROVIDERS","useClass","ɵAnimationStyleNormalizer","instantiateDefaultStyleNormalizer","ɵWebAnimationsStyleNormalizer","ɵAnimationEngine","InjectableAnimationEngine","appRef","RendererFactory2","instantiateRendererFactory","deps","ɵDomRendererFactory2","NgZone","BROWSER_ANIMATIONS_PROVIDERS","ɵWebAnimationsDriver","ANIMATION_MODULE_TYPE","useValue","BROWSER_NOOP_ANIMATIONS_PROVIDERS","ɵNoopAnimationDriver","BrowserAnimationsModule","config","ɵmod","ɵinj","BrowserModule","DynamicResourcesHelper","all","loadStyles","isRtl","rtlDetect","cssPostfix","styleLoaderService","StyleLoaderService","styleUrls","getAdditionalThemeAssets","setBodyAttributes","loadArray","load","assetContributor","getAssetUrls","getBodyAttributes","AppPreBootstrap","appRootUrl","getApplicationConfig","loadAssetsForInstallPage","loadAssetsForDownloadPage","queryStringObj","redirect","forceNewRegistration","delegatedImpersonatedAuthenticate","getUserConfiguration","impersonatedAuthenticate","linkedAccountAuthenticate","moduleType","compilerOptions","__NgCli_bootstrap_1","bootstrapModule","subdomainTenancyNameFinder","SubdomainTenancyNameFinder","getCurrentTenancyNameOrNull","appBaseUrl","localeMappings","appStore","accountServiceProxy","AccountServiceProxy","IsTenantAvailableInput","isTenantAvailable","TenantAvailabilityState","setTenantIdCookie","urlHasTenancyNamePlaceholder","currentProviderName","unspecifiedClockProvider","utcClockProvider","localClockProvider","cookieLangValue","requestHeaders","getRequetHeadersWithDefaultValues","setToken","accessToken","setEncryptedTokenCookie","encryptedAccessToken","getCurrentClockProvider","configureLuxon","luxonLocale","LocaleMappingService","setLocale","Settings","toISO","encryptedToken","expireDate","mergeWith","createAssigner","object","srcIndex","customizer","baseMerge","exports","o","defineProperty","enumerable","lTk","kg","Bd$","xg","_im","cc","U_J","KJG","w","SAz","u","t1N","gs","MBC","dc","$6P","fg","cIv","In","ZlE","nc","slj","Ln","huW","hc","hi0","rv","RDp","cv","W3x","Cn","hnq","jn","_wT","qn","uyw","NKz","z","c07","wbJ","oQ7","Ql","FbX","Ul","oGm","Gl","bpX","Ol","Xae","Zl","YP5","$l","R3W","Yl","kc5","vc","QEg","gc","prf","pc","CaT","_l","VQQ","Jl","Ncd","Sn","Tl5","Kl","oUB","ag","bON","Xl","$ik","mc","zO6","Tn","yLM","wc","BBm","Pn","dsG","Ca","Hs9","Sa","BZV","Dn","$cm","uc","SdW","bc","WqF","Ie","DmU","Le","neX","je","yd1","eo","jIG","dv","__Q","qe","Nli","Vfi","Ce","pkE","ao","T73","zc","mbq","io","LgP","yc","oNx","ps","u_P","Ta","V7I","so","om6","lo","UPo","oo","WuY","Se","qI$","ro","BF5","Pa","e9R","Wn","T4Q","xc","TUN","vv","CVw","nv","ykd","Hv","zm5","hv","Y0L","co","qA0","kc","BuB","fc","lZ2","It","I9y","Te","Yt_","Pe","Kyr","De","r3W","Da","kQN","B","MWC","Ac","dmx","We","NHt","Hc","qWE","Ne","XXv","Re","iNc","no","uCe","ho","EJm","vo","w9U","Wa","GRX","Mc","IkF","ms","knC","go","Z7L","po","b8$","Vc","_W","Bc","r$P","pv","YRD","Ic","tfn","wo","TkW","mo","x7N","Nn","Vie","Rn","AlA","uo","aUE","bo","$Nv","Lc","bWL","qc","TEL","jc","YQA","Na","jNO","Ra","WX1","Ea","oY5","zo","aGw","Cc","NbW","ig","La4","yo","ul4","En","vL8","Ee","CPu","Fn","j6y","Pi","Fjr","Us","hzO","ws","lcl","Sc","Fcd","Fa","pnn","Ua","fS0","Ga","VNl","Fe","tHy","Un","oyk","us","x9B","xo","byu","Oa","uGh","ko","qv4","lg","FHd","sg","TPc","bs","oWe","Tc","VC8","mv","noN","wv","iI$","Uo","n0J","fo","Udi","Gn","_hH","Pc","H1E","Ao","h9L","Ue","_1l","Ge","srP","Oe","IoZ","Dc","gvV","Ho","nb5","uv","kZe","bv","KEc","zv","q37","yv","nKk","xv","bWO","og","EVT","Mo","lkr","_n","j8b","On","POC","Qn","jZX","Zn","dvO","$n","Rm7","Yn","XaR","Jn","tSN","Qa","Vle","Za","eCg","kv","jL$","Qe","mZq","Md","vCb","Wc","M20","Nc","Zkw","Rc","RlZ","zs","hrI","Uc","Vhm","Ec","B5G","Fc","wdp","Vo","irC","Ze","TPU","fv","CRu","rg","F8i","Kn","v0n","Bo","vF$","Xn","AxD","$a","RRz","Ya","xbD","mAK","Ja","K0_","Ka","Ft","Xa","oAc","ei","yst","eh","vPL","grx","nmN","Gc","zMd","$e","dj","ti","K2e","ai","Oo1","ii","b8L","si","zHf","Io","QjB","li","$27","oi","kGB","cg","iJb","Lo","UNd","Lh","dSs","th","t7l","Ye","XLs","ys","sSH","Oc","KYW","Qc","OrE","Zc","DFD","ah","EQD","ri","Tzs","$c","fI_","Yc","IV2","dg","Bzc","_c","ilv","Jc","Egz","ih","hWf","Av","Azp","jo","iLZ","ci","zd7","sh","S5w","lh","Uhp","oh","$FH","dh","tsm","rh","TpQ","ch","agg","nh","nDF","di","HsE","ni","KqL","hi","NJw","Dw5","gi","Quu","pi","QHr","Kc","vK1","qo","TJH","_e","cSL","hh","Pm4","vh","it7","Xc","fmF","Je","aWJ","xs","rJt","ks","xrm","Co","CVQ","gh","gec","So","$C9","ed","OQV","A","KBg","H","Wsk","ng","qcT","Ke","HhS","Xe","mMe","td","r9J","et","BA1","Mv","ojU","tt","e2R","ad","qIe","fs","qjt","To","pcC","ALK","mi","OPA","wi","AV9","Dv","LFl","Po","YRr","As","ofM","Vv","dCx","sd","o0k","ui","GHz","bi","TZ4","zi","JT3","yi","v1S","at","EBv","ld","OdB","hg","cjF","Bv","Dt4","Iv","emT","it","T0N","Hs","fut","Ms","FVL","od","bab","rd","bgi","yMF","cd","sbn","lt","a13","ph","aP6","ot","yJR","Do","Xgi","mh","kN4","rt","Ao5","Vs","oV1","Bs","vHN","ct","YEW","dt","t7G","Wo","axC","No","td_","xi","UQh","Lv","syb","nt","ACN","dd","vq6","wh","h0B","ht","bsC","uh","bc2","vg","dIb","nd","LFI","yg","$TZ","jv","Tt$","qv","QDF","vt","epd","gt","AWe","bh","svs","Cv","NAV","zh","_nk","yh","O$d","pt","fBX","ki","Nyw","fi","otD","Is","f10","xh","VGW","hd","CmW","mt","knS","Ro","C24","vd","AgG","kh","GLn","gd","iuE","Sv","Vul","wt","Cfd","ut","bdM","bt","P1S","pd","wLN","gg","Eiv","gv","BsZ","md","S7c","Ai","nRM","Hi","Ggf","Mi","xPI","Vi","POU","pg","Z2D","Ls","H1N","fh","LgZ","Bi","WEX","wd","Roi","Ti","xAR","bd","mY5","ud","c2U","Li","sR5","Ii","Tr9","Ah","A$7","zt","_CP","yt","NLz","xt","m3M","kt","$Dt","Hh","kmR","mg","Z8D","ji","wJO","M","lQ1","V","ZTw","js","iZ_","s5D","Cs","ZsF","Ss","_2J","Ts","THr","Ps","EzF","Ds","B_v","Ws","zOh","Ns","Ase","Mh","$W5","Tv","iKp","zd","OTU","yd","CuM","wg","h1n","Vh","VMF","fd","yYn","xd","kN$","kd","oln","Bh","G3k","Ad","Nsu","Rs","jmd","Ih","eGZ","ft","ZJ_","At","bRk","Ht","U3_","ug","Gpw","Hd","ONB","bg","$kt","Es","gYK","Fs","GtC","Eo","KK7","Mt","CBM","Vt","Ldn","Pv","UZF","Bt","tyl","qi","$Sj","Ci","Gf8","Fo","CvE","Si","ZB9","zg","r","h","g","categories","keywords","I","L","q","C","S","T","P","D","W","N","R","E","F","U","G","O","Q","Z","$","Y","J","K","X","ee","te","ae","ie","se","le","oe","re","ce","de","ne","he","ve","ge","pe","me","we","ue","be","ze","ye","xe","ke","fe","Ae","He","Me","Ve","Be","Lt","jt","qt","Ct","St","Tt","Pt","Dt","Wt","Nt","Rt","Et","Ut","Gt","Ot","Qt","Zt","$t","Yt","_t","Jt","Kt","Xt","ea","aa","ia","sa","la","oa","ra","ca","da","na","ha","va","ga","pa","ma","wa","ua","ba","za","ya","xa","ka","fa","Aa","Ha","Ma","Va","Ba","Ia","La","ja","qa","Di","Wi","Ni","Ri","Ei","Fi","Ui","Gi","Oi","Qi","Zi","$i","Yi","Ji","Ki","Xi","es","ts","as","is","ss","os","rs","cs","ds","hs","vs","Gs","Os","Qs","Zs","$s","Ys","_s","Js","Ks","Xs","al","il","sl","ll","ol","rl","cl","dl","nl","hl","vl","gl","pl","ml","wl","ul","bl","zl","yl","xl","kl","fl","Al","Hl","Ml","Vl","Bl","Il","Ll","jl","ql","Cl","Sl","Tl","Pl","Dl","Wl","Nl","Rl","El","Fl","Go","Oo","Qo","Zo","$o","Yo","_o","Jo","Ko","Xo","er","tr","ar","ir","sr","lr","or","rr","cr","nr","hr","vr","gr","pr","mr","wr","ur","br","zr","yr","xr","kr","fr","Ar","Hr","Mr","Vr","Br","Ir","Lr","jr","qr","Cr","Sr","Tr","Pr","Dr","Wr","Nr","Rr","Er","Fr","Ur","Gr","Or","Qr","Zr","$r","Yr","_r","Jr","Kr","Xr","ec","tc","ac","ic","sc","lc","oc","rc","Vd","Bd","Id","Ld","jd","qd","Cd","Sd","Td","Pd","Dd","Wd","Nd","Rd","Ed","Fd","Ud","Gd","Od","Qd","Zd","$d","Yd","_d","Jd","Kd","Xd","en","tn","an","sn","ln","rn","cn","dn","nn","hn","vn","gn","pn","mn","wn","un","bn","zn","yn","xn","kn","An","Hn","Mn","Vn","Bn","jh","qh","Ch","Sh","Th","Ph","Dh","Wh","Nh","Rh","Eh","Fh","Uh","Gh","Oh","Qh","Zh","$h","Yh","_h","Jh","Kh","Xh","ev","tv","av","iv","sv","lv","ov","Wv","Nv","Rv","Ev","Fv","Uv","Gv","Ov","Qv","Zv","$v","Yv","_v","Jv","Kv","Xv","eg","tg","construction","content","editor","election","finance","health","logos","programming","EaseIn","Quad","Cubic","Quart","Quint","Sine","Expo","Circ","Back","EaseOut","EaseInOut","base$3","opacity","baseRecipe$2","fadeIn","endOpacity","startOpacity","fadeOut","backfaceVisibility","transformStyle","baseParams$2","endAngle","endDistance","rotateX","rotateY","rotateZ","startAngle","startDistance","baseRecipe$1","flipTop","flipBottom","flipLeft","flipRight","flipHorFwd","flipHorBck","flipVerFwd","flipVerBck","transformOrigin","baseInParams$2","xPos","yPos","baseOutParams$2","baseRecipe","rotateInCenter","rotateOutCenter","rotateInTop","rotateOutTop","rotateInRight","rotateOutRight","rotateInBottom","rotateOutBottom","rotateInLeft","rotateOutLeft","rotateInTr","rotateOutTr","rotateInBr","rotateOutBr","rotateInBl","rotateOutBl","rotateInTl","rotateOutTl","rotateInDiagonal1","rotateOutDiagonal1","rotateInDiagonal2","rotateOutDiagonal2","rotateInHor","rotateOutHor","rotateInVer","rotateOutVer","baseParams$1","heartbeatBase","shakeHor","shakeVer","shakeTop","shakeBottom","shakeRight","shakeLeft","shakeCenter","shakeTr","shakeBr","shakeBl","shakeTl","animationTimingFunction","pulsateBase","pulsateParams","fromScale","toScale","blinkBase","base$2","pulsateFwd","pulsateBck","heartbeat","blink","midScale","baseInParams$1","baseOutParams$1","base$1","scaleInCenter","scaleInBl","scaleInVerCenter","scaleInTop","scaleInLeft","scaleInVerTop","scaleInTr","scaleInTl","scaleInVerBottom","scaleInRight","scaleInHorCenter","scaleInBr","scaleInHorLeft","scaleInBottom","scaleInHorRight","scaleOutCenter","scaleOutBl","scaleOutBr","scaleOutVerCenter","scaleOutVerTop","scaleOutVerBottom","scaleOutTop","scaleOutLeft","scaleOutTr","scaleOutTl","scaleOutRight","scaleOutBottom","scaleOutHorCenter","scaleOutHorLeft","scaleOutHorRight","baseInParams","fromPosition","toPosition","baseOutParams","swingBase","slideInTop","slideInLeft","slideInRight","slideInBottom","slideInTr","slideInTl","slideInBr","slideInBl","slideOutTop","slideOutRight","slideOutBottom","slideOutLeft","slideOutTr","slideOutBr","slideOutBl","slideOutTl","swingParams","swingOutParams","base","swingInTopFwd","swingInRightFwd","swingInBottomFwd","swingInLeftFwd","swingInTopBck","swingInRightBck","swingInBottomBck","swingInLeftBck","swingOutTopFwd","swingOutRightFwd","swingOutBottomFwd","swingOutLefttFwd","swingOutTopBck","swingOutRightBck","swingOutBottomBck","swingOutLeftBck","paddingBlock","baseParams","startHeight","endHeight","startPadding","endPadding","growVerIn","growVerOut","cloneValue","isDate","isObject","NAVIGATION_KEYS","ROW_ADD_KEYS","CurrencyPipe","InjectionToken","CurrentResourceStrings","GridResStrings","igx_grid_groupByArea_message","igx_grid_groupByArea_select_message","igx_grid_groupByArea_deselect_message","igx_grid_emptyFilteredGrid_message","igx_grid_emptyGrid_message","igx_grid_filter","igx_grid_filter_row_close","igx_grid_filter_row_reset","igx_grid_filter_row_placeholder","igx_grid_filter_row_boolean_placeholder","igx_grid_filter_row_date_placeholder","igx_grid_filter_row_time_placeholder","igx_grid_filter_operator_and","igx_grid_filter_operator_or","igx_grid_complex_filter","igx_grid_filter_contains","igx_grid_filter_doesNotContain","igx_grid_filter_startsWith","igx_grid_filter_endsWith","igx_grid_filter_equals","igx_grid_filter_doesNotEqual","igx_grid_filter_empty","igx_grid_filter_notEmpty","igx_grid_filter_null","igx_grid_filter_notNull","igx_grid_filter_before","igx_grid_filter_after","igx_grid_filter_at","igx_grid_filter_not_at","igx_grid_filter_at_before","igx_grid_filter_at_after","igx_grid_filter_today","igx_grid_filter_yesterday","igx_grid_filter_thisMonth","igx_grid_filter_lastMonth","igx_grid_filter_nextMonth","igx_grid_filter_thisYear","igx_grid_filter_lastYear","igx_grid_filter_nextYear","igx_grid_filter_greaterThan","igx_grid_filter_lessThan","igx_grid_filter_greaterThanOrEqualTo","igx_grid_filter_lessThanOrEqualTo","igx_grid_filter_true","igx_grid_filter_false","igx_grid_filter_all","igx_grid_filter_condition_placeholder","igx_grid_summary_count","igx_grid_summary_min","igx_grid_summary_max","igx_grid_summary_sum","igx_grid_summary_average","igx_grid_summary_earliest","igx_grid_summary_latest","igx_grid_excel_filter_moving_left","igx_grid_excel_filter_moving_left_short","igx_grid_excel_filter_moving_right","igx_grid_excel_filter_moving_right_short","igx_grid_excel_filter_moving_header","igx_grid_excel_filter_sorting_asc","igx_grid_excel_filter_sorting_asc_short","igx_grid_excel_filter_sorting_desc","igx_grid_excel_filter_sorting_desc_short","igx_grid_excel_filter_sorting_header","igx_grid_excel_filter_clear","igx_grid_excel_custom_dialog_add","igx_grid_excel_custom_dialog_clear","igx_grid_excel_custom_dialog_header","igx_grid_excel_cancel","igx_grid_excel_apply","igx_grid_excel_search_placeholder","igx_grid_excel_select_all","igx_grid_excel_select_all_search_results","igx_grid_excel_add_to_filter","igx_grid_excel_blanks","igx_grid_excel_hide","igx_grid_excel_show","igx_grid_excel_pin","igx_grid_excel_unpin","igx_grid_excel_select","igx_grid_excel_deselect","igx_grid_excel_text_filter","igx_grid_excel_number_filter","igx_grid_excel_date_filter","igx_grid_excel_boolean_filter","igx_grid_excel_currency_filter","igx_grid_excel_custom_filter","igx_grid_excel_no_matches","igx_grid_advanced_filter_title","igx_grid_advanced_filter_and_group","igx_grid_advanced_filter_or_group","igx_grid_advanced_filter_end_group","igx_grid_advanced_filter_create_and_group","igx_grid_advanced_filter_create_or_group","igx_grid_advanced_filter_and_label","igx_grid_advanced_filter_or_label","igx_grid_advanced_filter_add_condition","igx_grid_advanced_filter_ungroup","igx_grid_advanced_filter_delete","igx_grid_advanced_filter_delete_filters","igx_grid_advanced_filter_initial_text","igx_grid_advanced_filter_column_placeholder","igx_grid_advanced_filter_value_placeholder","igx_grid_pinned_row_indicator","igx_grid_hiding_check_all_label","igx_grid_hiding_uncheck_all_label","igx_grid_pinning_check_all_label","igx_grid_pinning_uncheck_all_label","igx_grid_row_edit_btn_done","igx_grid_row_edit_btn_cancel","igx_grid_toolbar_actions_filter_prompt","igx_grid_toolbar_pinning_button_tooltip","igx_grid_toolbar_hiding_button_tooltip","igx_grid_toolbar_pinning_title","igx_grid_toolbar_hiding_title","igx_grid_toolbar_advanced_filtering_button_tooltip","igx_grid_toolbar_advanced_filtering_button_label","igx_grid_toolbar_exporter_button_tooltip","igx_grid_toolbar_exporter_button_label","igx_grid_toolbar_exporter_excel_entry_text","igx_grid_toolbar_exporter_csv_entry_text","igx_grid_snackbar_addrow_label","igx_grid_snackbar_addrow_actiontext","igx_grid_actions_edit_label","igx_grid_actions_add_label","igx_grid_add_row_label","igx_grid_actions_add_child_label","igx_grid_actions_delete_label","igx_grid_actions_pin_label","igx_grid_actions_unpin_label","igx_grid_actions_jumpUp_label","igx_grid_actions_jumpDown_label","igx_grid_pivot_date_dimension_total","igx_grid_pivot_aggregate_count","igx_grid_pivot_aggregate_min","igx_grid_pivot_aggregate_max","igx_grid_pivot_aggregate_sum","igx_grid_pivot_aggregate_avg","igx_grid_pivot_aggregate_date_latest","igx_grid_pivot_aggregate_date_earliest","igx_grid_pivot_aggregate_time_latest","igx_grid_pivot_aggregate_time_earliest","igx_grid_pivot_empty_row_drop_area","igx_grid_pivot_empty_column_drop_area","igx_grid_pivot_empty_filter_drop_area","igx_grid_pivot_empty_value_drop_area","igx_grid_pivot_row_drop_chip","igx_grid_pivot_column_drop_chip","igx_grid_pivot_filter_drop_chip","igx_grid_pivot_value_drop_chip","igx_grid_pivot_empty_message","igx_grid_pivot_selector_filters","igx_grid_pivot_selector_rows","igx_grid_pivot_selector_columns","igx_grid_pivot_selector_values","igx_grid_pivot_selector_panel_empty","igx_grid_required_validation_error","igx_grid_min_validation_error","igx_grid_max_validation_error","igx_grid_min_length_validation_error","igx_grid_max_length_validation_error","igx_grid_email_validation_error","igx_grid_pattern_validation_error","igx_grid_pivot_no_aggregator","PaginatorResStrings","igx_paginator_label","igx_paginator_pager_text","igx_paginator_first_page_button_text","igx_paginator_previous_page_button_text","igx_paginator_last_page_button_text","igx_paginator_next_page_button_text","TimePickerResStrings","igx_time_picker_ok","igx_time_picker_cancel","igx_time_picker_change_time","igx_time_picker_choose_time","CalendarResStrings","igx_calendar_previous_month","igx_calendar_next_month","igx_calendar_select_month","igx_calendar_select_year","igx_calendar_range_start","igx_calendar_range_end","igx_calendar_selected_month_is","igx_calendar_first_picker_of","igx_calendar_multi_selection","igx_calendar_range_selection","igx_calendar_single_selection","igx_calendar_singular_multi_selection","igx_calendar_singular_range_selection","igx_calendar_singular_single_selection","ChipResStrings","igx_chip_remove","igx_chip_select","ComboResStrings","igx_combo_empty_message","DatePickerResourceStrings","igx_date_picker_change_date","igx_date_picker_choose_date","DateRangePickerResStrings","igx_date_range_picker_date_separator","igx_date_range_picker_done_button","CarouselResStrings","igx_carousel_of","igx_carousel_slide","igx_carousel_previous_slide","igx_carousel_next_slide","ListResStrings","igx_list_no_items","igx_list_loading","InputResStrings","igx_input_upload_button","igx_input_file_placeholder","TreeResStrings","igx_expand","igx_collapse","ActionStripResourceStrings","igx_action_strip_button_more_title","QueryBuilderResStrings","igx_query_builder_date_placeholder","igx_query_builder_time_placeholder","igx_query_builder_filter_operator_and","igx_query_builder_filter_operator_or","igx_query_builder_filter_contains","igx_query_builder_filter_doesNotContain","igx_query_builder_filter_startsWith","igx_query_builder_filter_endsWith","igx_query_builder_filter_equals","igx_query_builder_filter_doesNotEqual","igx_query_builder_filter_empty","igx_query_builder_filter_notEmpty","igx_query_builder_filter_null","igx_query_builder_filter_notNull","igx_query_builder_filter_before","igx_query_builder_filter_after","igx_query_builder_filter_at","igx_query_builder_filter_not_at","igx_query_builder_filter_at_before","igx_query_builder_filter_at_after","igx_query_builder_filter_today","igx_query_builder_filter_yesterday","igx_query_builder_filter_thisMonth","igx_query_builder_filter_lastMonth","igx_query_builder_filter_nextMonth","igx_query_builder_filter_thisYear","igx_query_builder_filter_lastYear","igx_query_builder_filter_nextYear","igx_query_builder_filter_greaterThan","igx_query_builder_filter_lessThan","igx_query_builder_filter_greaterThanOrEqualTo","igx_query_builder_filter_lessThanOrEqualTo","igx_query_builder_filter_true","igx_query_builder_filter_false","igx_query_builder_filter_all","igx_query_builder_title","igx_query_builder_and_group","igx_query_builder_or_group","igx_query_builder_end_group","igx_query_builder_and_label","igx_query_builder_or_label","igx_query_builder_add_condition","igx_query_builder_create_and_group","igx_query_builder_create_or_group","igx_query_builder_ungroup","igx_query_builder_delete","igx_query_builder_delete_filters","igx_query_builder_initial_text","igx_query_builder_column_placeholder","igx_query_builder_condition_placeholder","igx_query_builder_value_placeholder","BannerResourceStrings","igx_banner_button_dismiss","IgxIconModule","providedIn","DIR_DOCUMENT_FACTORY","inject","IgxTextHighlightDirective","_value","lastSearchInfo","_lastSearchInfo","groupName","_div","_observer","_nodeWasRemoved","_forceEvaluation","_activeElementIndex","_defaultCssClass","_defaultActiveCssClass","onActiveElementChanged","deactivate","activateIfNecessary","highlight","highlightGroupsMap","clearHighlight","disconnect","ngOnChanges","changes","firstChange","_valueChanged","row","column","page","searchedText","matchCount","caseSensitive","_container","firstElementChild","ngAfterViewChecked","caseSensitiveResolved","exactMatchResolved","searchNeedsEvaluation","clearChildElements","getHighlightedText","group","map1","map2","compareMaps","activate","observe","MutationObserver","mutationList","mutation","removedNodes","addedNodes","childList","spans","elementToActivate","activeCssClass","elementToDeactivate","originalContentHidden","searchText","appendDiv","stringValue","contentStringResolved","searchTextResolved","appendSpan","appendText","foundIndex","previousMatchEnd","textElement","outerHTML","span","ɵdir","IgxPivotAggregate","resourceStrings","_resourceStrings","aggregator","members","IgxCarouselModule","IgxSliderModule","NgImageSliderService","isBase64","base64FileExtension","orderArray","orderType","ob1","ob2","NgImageSliderModule","DEFAULT_PERFECT_SCROLLBAR_CONFIG","AppModule","MessageService","PERFECT_SCROLLBAR_CONFIG","APP_INITIALIZER","appInitializerFactory","VgCoreModule","TooltipModule","PrimeNgFileUploadModule","VgControlsModule","VgOverlayPlayModule","VgBufferingModule","routes","AccountModule","DownloadModule","RootRoutingModule","toggleBodyCssClass","setAppModuleBodyClassInternal","setAccountModuleBodyClassInternal","currentBodyClass","classesToRemember","getAppModuleBodyClass","getAccountModuleBodyClass","getSetting","RootComponent","_ngxSpinnerText","ngxSpinnerText","getSpinnerText","platformLocation","NgxSpinnerService","getBaseHref","getBaseHrefFromDOM","getDocumentOrigin","origin","protocol","hostname","port","initializeLocalForage","localForage","storeName","handleLogoutRequest","authService","currentUrl","doConfigurationForInstallPage","doConfigurationForDownloadPage","AppSessionService","initializeAppCssClasses","initializeTenantResources","appSessionService","customCssId","metaImage","logoId","AppUiCustomizationService","initializeCookieConsent","CookieConsentService","registerLocales","shouldLoadLocale","angularLocale","convertAbpLocaleToAngularLocale","registerLocaleData","default","getDefaultThemeForInstallPage","UiCustomizationSettingsDto","ThemeSettingsDto","ThemeMenuSettingsDto","header","ThemeHeaderSettingsDto","subHeader","ThemeSubHeaderSettingsDto","ThemeLayoutSettingsDto","layoutType","footer","ThemeFooterSettingsDto","setApplicationInfoForInstallPage","dateTimeService","ApplicationInfoDto","appUiCustomizationService","getAppModuleBodyStyle","getAccountModuleBodyStyle","getRemoteServiceBaseUrl","getCurrentLanguage","getCurrencyCode","currency","RootModule","bootstrap","API_BASE_URL","Injector","PlatformLocation","LOCALE_ID","DEFAULT_CURRENCY_CODE","hookConsole","addLog","hook","methodName","_original","_arguments","filename","lineno","colno","environment","enableProdMode","defaultAdminUserName","defaultLocalizationSourceName","encrptedAuthTokenName","defaultPageSize","slideFromBottom","accountModuleAnimation","slideFromUp","PermissionCheckerService","NotifyService","SettingService","appUrlService","AppUrlService","PrimengTableHelper","ngxSpinnerTextService","unSubscribeAllEvents","flattenDeep","localizationSourceName","isGrantedAny","permissions","showMainSpinner","hideMainSpinner","eventSubscriptions","off","AppBsModalDirective","ModalDirective","showElement","setZIndexes","newZIndex","setAndGetModalZIndex","setBackDropZIndex","zIndex","modalBackdrops","baseUrl","ensureEndsWith","removeFromStart","tenancyNamePlaceHolder","removeFromEnd","substr","LocalizePipe","PermissionPipe","_application","_user","_tenant","impersonatorUser","_impersonatorUser","impersonatorTenant","_impersonatorTenant","impersonatorTenancyName","_theme","toPromise","changeTenantIfNeeded","isCurrentTenant","cookieconsent","initialise","showLink","getSelectEditionBodyClass","getLeftAsideClass","hoverableAside","submenuToggle","fixedAside","getLeftAsideSubMenuStyles","isSubmenuToggleDropdown","getTopBarMenuContainerClass","menuCssClass","getIsMenuScrollable","allowMenuScroll","getSideBarMenuItemClass","isMenuActive","checkPeriod","elementCount","checkExist","foundElementCount","idSelector","classSelector","getElementsByClassName","tag","els","getElementsByTagName","ExtractionResult","isMatch","Matches","FormatStringTokenType","FormatStringToken","Text","Type","FormatStringTokenizer","Tokenize","includeBracketsForDynamicValues","tokens","inDynamicValue","ConstantText","dynamicValue","DynamicValue","formatTokens","currentToken","previousToken","matchIndex","lastToken","isLoading","table","sorting","sortMode","multiSortMeta","field","sortField","sortOrder","rows","first","adjustScroll","rootAddress","currentRootAddress","DefaultThemeAssetContributor","getSubheaderStyle","Theme2ThemeAssetContributor","Theme3ThemeAssetContributor","Theme4ThemeAssetContributor","Theme5ThemeAssetContributor","Theme6ThemeAssetContributor","Theme7ThemeAssetContributor","Theme8ThemeAssetContributor","Theme9ThemeAssetContributor","Theme10ThemeAssetContributor","Theme11ThemeAssetContributor","Theme12ThemeAssetContributor","Theme13ThemeAssetContributor","getQueryParametersUsingParameters","bind","questionMarkIndex","initialUrl","getInitialUrlParameters","XMLHttpRequest","onreadystatechange","DONE","responseText","alert","setRequestHeader","send","mappingSource","url_","options_","responseType","headers","HttpHeaders","Accept","_observableMergeMap","response_","processRegister","_observableCatch","HttpResponseBase","_observableThrow","responseBlob","HttpResponse","Blob","_headers","blobToText","_responseText","result200","resultData200","jsonParseReviver","RegisterOutput","fromJS","_observableOf","throwException","easyRegister","processEasyRegister","EasyRegisterOutput","processIsTenantAvailable","IsTenantAvailableOutput","resolveTenantId","processResolveTenantId","sendPasswordResetCode","processSendPasswordResetCode","resetPassword","processResetPassword","ResetPasswordOutput","sendEmailActivationLink","processSendEmailActivationLink","activateEmail","processActivateEmail","processImpersonateUser","ImpersonateOutput","processImpersonateTenant","processDelegatedImpersonate","processBackToImpersonator","processSwitchToLinkedAccount","SwitchToLinkedAccountOutput","HttpClient","AuditLogServiceProxy","getAuditLogs","startDate","endDate","serviceName","browserInfo","hasException","minExecutionDuration","maxExecutionDuration","processGetAuditLogs","AuditLogListDtoPagedResultDto","getAuditLogsToExcel","processGetAuditLogsToExcel","FileDto","getEntityHistoryObjectTypes","processGetEntityHistoryObjectTypes","NameValueDto","getEntityChanges","entityTypeFullName","processGetEntityChanges","EntityChangeListDtoPagedResultDto","getEntityTypeChanges","entityId","processGetEntityTypeChanges","getEntityChangesToExcel","processGetEntityChangesToExcel","getEntityPropertyChanges","entityChangeId","processGetEntityPropertyChanges","EntityPropertyChangeDto","CachingServiceProxy","getAllCaches","processGetAllCaches","CacheDtoListResultDto","clearCache","processClearCache","clearAllCaches","processClearAllCaches","ChatServiceProxy","getRegionName","processGetRegionName","RegionEndpoint","processGetUserChatFriendsWithSettings","GetUserChatFriendsWithSettingsOutput","processGetUserChatMessages","ChatMessageDtoListResultDto","processMarkAllUnreadMessagesOfUserAsRead","CommonLookupServiceProxy","getEditionsForCombobox","onlyFreeItems","processGetEditionsForCombobox","SubscribableEditionComboboxItemDtoListResultDto","processFindUsers","NameValueDtoPagedResultDto","getDefaultEditionName","processGetDefaultEditionName","GetDefaultEditionNameOutput","CustomAudioForEpisodesServiceProxy","getCustomAudioForSchool","processGetCustomAudioForSchool","CustomAudioForEpisodeForSchoolOutputDto","getAll","episodeNameFilter","tenantTitleFilter","processGetAll","GetCustomAudioForEpisodeForViewDtoPagedResultDto","getCustomAudioForEpisodeForView","processGetCustomAudioForEpisodeForView","GetCustomAudioForEpisodeForViewDto","getCustomAudioForEpisodeForEdit","processGetCustomAudioForEpisodeForEdit","GetCustomAudioForEpisodeForEditOutput","createOrEdit","processCreateOrEdit","processDelete","getCustomAudioForEpisodesToExcel","processGetCustomAudioForEpisodesToExcel","getAllEpisodeForTableDropdown","processGetAllEpisodeForTableDropdown","CustomAudioForEpisodeEpisodeLookupTableDto","getAllTenantForTableDropdown","processGetAllTenantForTableDropdown","CustomAudioForEpisodeTenantLookupTableDto","removeCustomAudioContentFile","processRemoveCustomAudioContentFile","DashboardCustomizationServiceProxy","getUserDashboard","dashboardName","processGetUserDashboard","Dashboard","savePage","processSavePage","renamePage","processRenamePage","addNewPage","processAddNewPage","AddNewPageOutput","deletePage","processDeletePage","addWidget","processAddWidget","Widget","getDashboardDefinition","processGetDashboardDefinition","DashboardOutput","getAllWidgetDefinitions","processGetAllWidgetDefinitions","WidgetOutput","getAllAvailableWidgetDefinitionsForPage","pageId","processGetAllAvailableWidgetDefinitionsForPage","getSettingName","processGetSettingName","DemoUiComponentsServiceProxy","sendAndGetDate","processSendAndGetDate","DateFieldOutput","sendAndGetDateTime","processSendAndGetDateTime","sendAndGetDateRange","processSendAndGetDateRange","DateRangeFieldOutput","sendAndGetDateWithText","processSendAndGetDateWithText","DateWithTextFieldOutput","getCountries","searchTerm","processGetCountries","StringNameValue","sendAndGetSelectedCountries","processSendAndGetSelectedCountries","sendAndGetValue","processSendAndGetValue","StringOutput","DifficultyLevelsServiceProxy","nameFilter","colorFilter","GetDifficultyLevelForViewDtoPagedResultDto","getDifficultyLevelForView","processGetDifficultyLevelForView","GetDifficultyLevelForViewDto","getDifficultyLevelForEdit","processGetDifficultyLevelForEdit","GetDifficultyLevelForEditOutput","getDifficultyLevelsToExcel","processGetDifficultyLevelsToExcel","DynamicEntityPropertyServiceProxy","processGet","DynamicEntityPropertyDto","getAllPropertiesOfAnEntity","entityFullName","processGetAllPropertiesOfAnEntity","DynamicEntityPropertyDtoListResultDto","processAdd","processUpdate","getAllEntitiesHasDynamicProperty","processGetAllEntitiesHasDynamicProperty","GetAllEntitiesHasDynamicPropertyOutputListResultDto","DynamicEntityPropertyDefinitionServiceProxy","getAllAllowedInputTypeNames","processGetAllAllowedInputTypeNames","getAllEntities","processGetAllEntities","DynamicEntityPropertyValueServiceProxy","DynamicEntityPropertyValueDto","propertyId","DynamicEntityPropertyValueDtoListResultDto","getAllDynamicEntityPropertyValues","processGetAllDynamicEntityPropertyValues","GetAllDynamicEntityPropertyValuesOutput","insertOrUpdateAllValues","processInsertOrUpdateAllValues","cleanValues","processCleanValues","DynamicPropertyServiceProxy","DynamicPropertyDto","DynamicPropertyDtoListResultDto","findAllowedInputType","processFindAllowedInputType","IInputType","DynamicPropertyValueServiceProxy","DynamicPropertyValueDto","getAllValuesOfDynamicProperty","processGetAllValuesOfDynamicProperty","DynamicPropertyValueDtoListResultDto","EditionServiceProxy","getEditions","processGetEditions","EditionListDtoListResultDto","getEditionForEdit","processGetEditionForEdit","GetEditionEditOutput","createEdition","processCreateEdition","updateEdition","processUpdateEdition","deleteEdition","processDeleteEdition","moveTenantsToAnotherEdition","processMoveTenantsToAnotherEdition","getEditionComboboxItems","selectedEditionId","addAllItem","processGetEditionComboboxItems","SubscribableEditionComboboxItemDto","getTenantCount","editionId","processGetTenantCount","EpisodeOvalsServiceProxy","deleteEpisodeOlvalsOfEpisode","processDeleteEpisodeOlvalsOfEpisode","createOrEditForMultiple","processCreateOrEditForMultiple","processGetEpisodeOvalFiles","OvalFilesDto","getAllForEpisodeOval","processGetAllForEpisodeOval","EpisodeOvalDto","processGetAllDistinctEpisodeOvals","LearnMoreOvalsDto","ovalTitleFilter","GetEpisodeOvalForViewDtoPagedResultDto","getEpisodeOvalForView","processGetEpisodeOvalForView","GetEpisodeOvalForViewDto","getEpisodeOvalForEdit","processGetEpisodeOvalForEdit","GetEpisodeOvalForEditOutput","getEpisodeOvalsToExcel","processGetEpisodeOvalsToExcel","getAllOvalForTableDropdown","processGetAllOvalForTableDropdown","EpisodeOvalOvalLookupTableDto","EpisodeOvalEpisodeLookupTableDto","getBinaryFileName","fileId","processGetBinaryFileName","removeFileFile","processRemoveFileFile","EpisodesServiceProxy","getAllEpisodeVideoForTableDropdown","processGetAllEpisodeVideoForTableDropdown","EpisodeVideoLookupTableDto","processGetCurrentEpisodeStatus","EpisodeStatusDto","processGetAllEpisodes","descriptionFilter","titleFilter","googleFormUrlFilter","applicationLanguageNameFilter","GetEpisodeForViewDtoPagedResultDto","processGetEpisodeForView","GetEpisodeForViewDto","getEpisodeForEdit","processGetEpisodeForEdit","GetEpisodeForEditOutput","createEpisode","processCreateEpisode","CreateEpisodeOutputDto","editEpisode","processEditEpisode","getEpisodesToExcel","googleFormUrlter","processGetEpisodesToExcel","getAllApplicationLanguageForTableDropdown","processGetAllApplicationLanguageForTableDropdown","EpisodeApplicationLanguageLookupTableDto","removeImageContentFile","processRemoveImageContentFile","removeScriptContentFile","processRemoveScriptContentFile","removeVocabularyContentFile","processRemoveVocabularyContentFile","removeAudioContentFile","processRemoveAudioContentFile","EpisodeUsersServiceProxy","deleteEpisodeUsersOfEpisode","processDeleteEpisodeUsersOfEpisode","processGetCurrentEpisodeUser","EpisodeUserDto","getAllEpisodeUsers","processGetAllEpisodeUsers","hasFeedbackFilter","hasWatchedFilter","GetEpisodeUserForViewDtoPagedResultDto","getEpisodeUserForView","processGetEpisodeUserForView","GetEpisodeUserForViewDto","getEpisodeUserForEdit","processGetEpisodeUserForEdit","GetEpisodeUserForEditOutput","userSubmitedFeedback","processUserSubmitedFeedback","processUserWatchedVideo","getEpisodeUsersToExcel","processGetEpisodeUsersToExcel","getAllUserForTableDropdown","processGetAllUserForTableDropdown","EpisodeUserUserLookupTableDto","EpisodeUserEpisodeLookupTableDto","EpisodeVideosServiceProxy","GetEpisodeVideoForViewDtoPagedResultDto","getEpisodeVideoForView","processGetEpisodeVideoForView","GetEpisodeVideoForViewDto","getEpisodeVideoForEdit","processGetEpisodeVideoForEdit","GetEpisodeVideoForEditOutput","createOrEditName","processCreateOrEditName","getEpisodeVideosToExcel","processGetEpisodeVideosToExcel","removeVideoContentFile","processRemoveVideoContentFile","FriendshipServiceProxy","processCreateFriendshipRequest","processCreateFriendshipRequestByUserName","processBlockUser","processUnblockUser","acceptFriendshipRequest","processAcceptFriendshipRequest","processRemoveFriend","HostDashboardServiceProxy","getTopStatsData","processGetTopStatsData","TopStatsData","getRecentTenantsData","processGetRecentTenantsData","GetRecentTenantsOutput","getSubscriptionExpiringTenantsData","processGetSubscriptionExpiringTenantsData","GetExpiringTenantsOutput","getIncomeStatistics","incomeStatisticsDateInterval","processGetIncomeStatistics","GetIncomeStatisticsDataOutput","getEditionTenantStatistics","processGetEditionTenantStatistics","GetEditionTenantStatisticsOutput","HostSettingsServiceProxy","getAllSettings","processGetAllSettings","HostSettingsEditDto","updateAllSettings","processUpdateAllSettings","sendTestEmail","processSendTestEmail","getEnabledSocialLoginSettings","processGetEnabledSocialLoginSettings","ExternalLoginSettingsDto","InstallServiceProxy","setup","processSetup","getAppSettingsJson","processGetAppSettingsJson","AppSettingsJsonDto","checkDatabase","processCheckDatabase","CheckDatabaseOutput","InvoiceServiceProxy","getInvoiceInfo","processGetInvoiceInfo","InvoiceDto","createInvoice","processCreateInvoice","LanguageServiceProxy","getLanguages","processGetLanguages","GetLanguagesOutput","getLanguageForEdit","processGetLanguageForEdit","GetLanguageForEditOutput","createOrUpdateLanguage","processCreateOrUpdateLanguage","deleteLanguage","processDeleteLanguage","setDefaultLanguage","processSetDefaultLanguage","getLanguageTexts","sourceName","baseLanguageName","targetLanguageName","targetValueFilter","processGetLanguageTexts","LanguageTextListDtoPagedResultDto","updateLanguageText","processUpdateLanguageText","NotificationServiceProxy","processGetUserNotifications","GetNotificationsOutput","processShouldUserUpdateApp","setAllAvailableVersionNotificationAsRead","processSetAllAvailableVersionNotificationAsRead","SetNotificationAsReadOutput","processSetAllNotificationsAsRead","processSetNotificationAsRead","processGetNotificationSettings","GetNotificationSettingsOutput","processUpdateNotificationSettings","processDeleteNotification","processDeleteAllUserNotifications","getAllUserForLookupTable","processGetAllUserForLookupTable","MassNotificationUserLookupTableDtoPagedResultDto","getAllOrganizationUnitForLookupTable","processGetAllOrganizationUnitForLookupTable","MassNotificationOrganizationUnitLookupTableDtoPagedResultDto","createMassNotification","processCreateMassNotification","createNewVersionReleasedNotification","processCreateNewVersionReleasedNotification","getAllNotifiers","processGetAllNotifiers","getNotificationsPublishedByUser","processGetNotificationsPublishedByUser","GetPublishedNotificationsOutput","OrganizationUnitServiceProxy","getOrganizationUnits","processGetOrganizationUnits","OrganizationUnitDtoListResultDto","getOrganizationUnitUsers","processGetOrganizationUnitUsers","OrganizationUnitUserListDtoPagedResultDto","getOrganizationUnitRoles","processGetOrganizationUnitRoles","OrganizationUnitRoleListDtoPagedResultDto","createOrganizationUnit","processCreateOrganizationUnit","OrganizationUnitDto","updateOrganizationUnit","processUpdateOrganizationUnit","moveOrganizationUnit","processMoveOrganizationUnit","deleteOrganizationUnit","processDeleteOrganizationUnit","removeUserFromOrganizationUnit","organizationUnitId","processRemoveUserFromOrganizationUnit","removeRoleFromOrganizationUnit","roleId","processRemoveRoleFromOrganizationUnit","addUsersToOrganizationUnit","processAddUsersToOrganizationUnit","addRolesToOrganizationUnit","processAddRolesToOrganizationUnit","findRoles","processFindRoles","OvalsServiceProxy","hasOvalFile","processHasOvalFile","OvalHasFileDto","updateOrder","processUpdateOrder","textColorFilter","backgroundColorFilter","borderColorFilter","GetOvalForViewDtoPagedResultDto","getOvalForView","processGetOvalForView","GetOvalForViewDto","getOvalForEdit","processGetOvalForEdit","GetOvalForEditOutput","getOvalsToExcel","processGetOvalsToExcel","PaymentServiceProxy","getPaymentInfo","upgradeEditionId","processGetPaymentInfo","PaymentInfoDto","createPayment","processCreatePayment","cancelPayment","processCancelPayment","getPaymentHistory","processGetPaymentHistory","SubscriptionPaymentListDtoPagedResultDto","getActiveGateways","recurringPaymentsEnabled","processGetActiveGateways","PaymentGatewayModel","getPayment","paymentId","processGetPayment","SubscriptionPaymentDto","getLastCompletedPayment","processGetLastCompletedPayment","buyNowSucceed","processBuyNowSucceed","newRegistrationSucceed","processNewRegistrationSucceed","upgradeSucceed","processUpgradeSucceed","extendSucceed","processExtendSucceed","paymentFailed","processPaymentFailed","switchBetweenFreeEditions","processSwitchBetweenFreeEditions","upgradeSubscriptionCostsLessThenMinAmount","processUpgradeSubscriptionCostsLessThenMinAmount","hasAnyPayment","processHasAnyPayment","PayPalPaymentServiceProxy","confirmPayment","paypalOrderId","processConfirmPayment","getConfiguration","processGetConfiguration","PayPalConfigurationDto","PermissionServiceProxy","getAllPermissions","processGetAllPermissions","FlatPermissionWithDifficultyLevelDtoListResultDto","ProfileServiceProxy","processGetCurrentUserProfileForEdit","CurrentUserProfileEditDto","processDisableGoogleAuthenticator","processUpdateGoogleAuthenticatorKey","UpdateGoogleAuthenticatorKeyOutput","processSendVerificationSms","processVerifySmsCode","processPrepareCollectedData","processUpdateCurrentUserProfile","processChangePassword","processUpdateProfilePicture","processGetPasswordComplexitySetting","GetPasswordComplexitySettingOutput","processGetProfilePicture","GetProfilePictureOutput","getProfilePictureByUserName","processGetProfilePictureByUserName","processGetFriendProfilePicture","getProfilePictureByUser","processGetProfilePictureByUser","processChangeLanguage","RoleServiceProxy","getRoles","processGetRoles","RoleListDtoListResultDto","getRoleForEdit","processGetRoleForEdit","GetRoleForEditOutput","createOrUpdateRole","processCreateOrUpdateRole","deleteRole","processDeleteRole","updateExistingPermissionsOfAdmins","processUpdateExistingPermissionsOfAdmins","SessionServiceProxy","processGetCurrentLoginInformations","GetCurrentLoginInformationsOutput","updateUserSignInToken","processUpdateUserSignInToken","UpdateUserSignInTokenOutput","StorageServiceServiceProxy","migrateFilesToAmazon","processMigrateFilesToAmazon","migrateFileToAmazon","processMigrateFileToAmazon","StorageFileOutputDto","getFileUrl","processGetFileUrl","updateFilesMetadata","processUpdateFilesMetadata","truncateBinaryObjects","processTruncateBinaryObjects","cleanupBinaryObjects","processCleanupBinaryObjects","processGetAppUrls","AppUrlForLanguageDto","StripePaymentServiceProxy","StripeConfigurationDto","stripeSessionId","createPaymentSession","processCreatePaymentSession","getPaymentResult","processGetPaymentResult","StripePaymentResultOutput","SubscriptionServiceProxy","disableRecurringPayments","processDisableRecurringPayments","enableRecurringPayments","processEnableRecurringPayments","TenantServiceProxy","getTenants","subscriptionEndDateStart","subscriptionEndDateEnd","creationDateStart","creationDateEnd","editionIdSpecified","processGetTenants","TenantListDtoPagedResultDto","getAllTenants","processGetAllTenants","TenantsNameListDto","createTenant","processCreateTenant","getTenantForEdit","processGetTenantForEdit","TenantEditDto","TenantApplicationLanguageLookupTableDto","updateTenant","processUpdateTenant","deleteTenant","processDeleteTenant","getTenantFeaturesForEdit","processGetTenantFeaturesForEdit","GetTenantFeaturesEditOutput","processIsFeedBackRequiredForTenant","IsFeedbackRequiredOutput","updateTenantFeatures","processUpdateTenantFeatures","resetTenantSpecificFeatures","processResetTenantSpecificFeatures","unlockTenantAdmin","processUnlockTenantAdmin","TenantDashboardServiceProxy","getMemberActivity","processGetMemberActivity","GetMemberActivityOutput","getDashboardData","salesSummaryDatePeriod","processGetDashboardData","GetDashboardDataOutput","getTopStats","processGetTopStats","GetTopStatsOutput","getProfitShare","processGetProfitShare","GetProfitShareOutput","getDailySales","processGetDailySales","GetDailySalesOutput","getSalesSummary","processGetSalesSummary","GetSalesSummaryOutput","getRegionalStats","processGetRegionalStats","GetRegionalStatsOutput","getGeneralStats","processGetGeneralStats","GetGeneralStatsOutput","TenantRegistrationServiceProxy","registerTenant","processRegisterTenant","RegisterTenantOutput","getEditionsForSelect","processGetEditionsForSelect","EditionsSelectOutput","getEdition","processGetEdition","EditionSelectDto","TenantSettingsServiceProxy","TenantSettingsEditDto","clearLogo","processClearLogo","clearCustomCss","processClearCustomCss","TimingServiceProxy","processGetTimezones","NameValueDtoListResultDto","getTimezoneComboboxItems","selectedTimezoneId","processGetTimezoneComboboxItems","ComboboxItemDto","TokenAuthServiceProxy","authenticate","processAuthenticate","AuthenticateResultModel","easyAuthenticate","processEasyAuthenticate","refreshToken","processRefreshToken","RefreshTokenResult","logOut","processLogOut","sendTwoFactorAuthCode","processSendTwoFactorAuthCode","processImpersonatedAuthenticate","ImpersonatedAuthenticateResultModel","processDelegatedImpersonatedAuthenticate","processLinkedAccountAuthenticate","SwitchedAccountAuthenticateResultModel","getExternalAuthenticationProviders","processGetExternalAuthenticationProviders","ExternalLoginProviderInfoModel","externalAuthenticate","processExternalAuthenticate","ExternalAuthenticateResultModel","testNotification","processTestNotification","TwitterServiceProxy","getRequestToken","processGetRequestToken","TwitterGetRequestTokenResponse","getAccessToken","verifier","processGetAccessToken","TwitterGetAccessTokenResponse","UiCustomizationSettingsServiceProxy","getUiManagementSettings","processGetUiManagementSettings","processChangeThemeWithDefaultValues","updateUiManagementSettings","processUpdateUiManagementSettings","updateDefaultUiManagementSettings","processUpdateDefaultUiManagementSettings","useSystemDefaultSettings","processUseSystemDefaultSettings","processChangeDarkModeOfCurrentTheme","UserServiceProxy","processGetCurrentUser","UserListDto","loginInputCaseSensetivity","processLoginInputCaseSensetivity","UserLoginOutputDto","getUsers","processGetUsers","UserListDtoPagedResultDto","getUsersToExcel","role","onlyLockedUsers","processGetUsersToExcel","getUserForEdit","processGetUserForEdit","GetUserForEditOutput","getUserPermissionsForEdit","processGetUserPermissionsForEdit","GetUserPermissionsForEditOutput","resetUserSpecificPermissions","processResetUserSpecificPermissions","updateUserPermissions","processUpdateUserPermissions","createOrUpdateUser","processCreateOrUpdateUser","deleteUser","processDeleteUser","unlockUser","processUnlockUser","UserDelegationServiceProxy","processGetDelegatedUsers","UserDelegationDtoPagedResultDto","processDelegateNewUser","processRemoveDelegation","processGetActiveUserDelegations","UserDelegationDto","UserLinkServiceProxy","processLinkToUser","processGetLinkedUsers","LinkedUserDtoPagedResultDto","processGetRecentlyUsedLinkedUsers","LinkedUserDtoListResultDto","processUnlinkUser","UserLoginServiceProxy","getUserLoginAttempts","processGetUserLoginAttempts","UserLoginAttemptDtoPagedResultDto","WebhookEventServiceProxy","WebhookEvent","WebhookSendAttemptServiceProxy","getAllSendAttempts","subscriptionId","processGetAllSendAttempts","GetAllSendAttemptsOutputPagedResultDto","getAllSendAttemptsOfWebhookEvent","processGetAllSendAttemptsOfWebhookEvent","GetAllSendAttemptsOfWebhookEventOutputListResultDto","resend","sendAttemptId","processResend","WebhookSubscriptionServiceProxy","publishTestWebhook","processPublishTestWebhook","getAllSubscriptions","processGetAllSubscriptions","GetAllSubscriptionsOutputListResultDto","getSubscription","processGetSubscription","WebhookSubscription","addSubscription","processAddSubscription","updateSubscription","processUpdateSubscription","activateWebhookSubscription","processActivateWebhookSubscription","webhookName","processIsSubscribed","getAllSubscriptionsIfFeaturesGranted","processGetAllSubscriptionsIfFeaturesGranted","getAllAvailableWebhooks","processGetAllAvailableWebhooks","GetAllAvailableWebhooksOutputListResultDto","WebLogServiceProxy","getLatestWebLogs","processGetLatestWebLogs","GetLatestWebLogsOutput","downloadWebLogs","processDownloadWebLogs","AbpLoginResultType","ActivateEmailInput","confirmationCode","ActivateWebhookSubscriptionInput","isActive","AddNewPageInput","AddWidgetInput","widgetId","webSiteUrl","serverSiteUrl","NameValue","currencySign","allowTenantsToChangeEmailSettings","userDelegationIsEnabled","twoFactorCodeExpireSeconds","features","ApplicationLanguageEditDto","ApplicationLanguageListDto","isDeleted","deleterUserId","deletionTime","lastModificationTime","lastModifierUserId","creatorUserId","AuditLogListDto","executionTime","executionDuration","clientIpAddress","clientName","exception","customData","AuthenticateModel","userNameOrEmailAddress","twoFactorVerificationCode","rememberClient","twoFactorRememberClientToken","singleSignIn","captchaResponse","expireInSeconds","shouldResetPassword","passwordResetCode","requiresTwoFactorVerification","twoFactorAuthProviders","refreshTokenExpireInSeconds","CacheDto","ChartDateInterval","ChatMessageDto","sharedMessageId","isDatabaseExist","CleanValuesInput","dynamicEntityPropertyId","displayText","isSelected","CreateEditionDto","EditionCreateDto","featureValues","CreateInvoiceDto","subscriptionPaymentId","CreateMassNotificationInput","userIds","organizationUnitIds","targetNotifiers","CreateOrEditCustomAudioForEpisodeDto","customAudioContent","customAudioContentToken","schoolId","CreateOrEditDifficultyLevelDto","CreateOrEditEpisodeDto","imageContentToken","scriptContentToken","vocabularyContentToken","audioContentToken","applicationLanguageId","episodeVideoId","CreateOrEditEpisodeOvalDto","ovalId","CreateOrEditEpisodeUserDto","CreateOrEditEpisodeVideoDto","videoContent","videoContentToken","CreateOrEditForMultipleDto","CreateOrEditOvalDto","textColor","backgroundColor","borderColor","templateName","CreateOrUpdateLanguageInput","CreateOrUpdateRoleInput","RoleEditDto","grantedPermissionNames","CreateOrUpdateUserInput","UserEditDto","assignedRoleNames","sendActivationEmail","setRandomPassword","organizationUnits","CreateOrganizationUnitInput","parentId","CreatePaymentDto","paymentPeriodType","subscriptionPaymentGatewayType","recurringPaymentEnabled","successUrl","errorUrl","CreateTenantInput","adminEmailAddress","adminName","adminSurname","adminPassword","connectionString","shouldChangePasswordOnNextLogin","tenantLanguageId","CustomAudioForEpisodeDto","customAudioContentFileName","languageId","pages","Page","widgets","DifficultyLevelDto","dynamicPropertyName","dynamicPropertyId","inputType","EasyAuthenticateModel","tenantName","EasyRegisterInput","canLogin","dailyPrice","weeklyPrice","monthlyPrice","annualPrice","trialDayCount","waitingDayAfterExpire","expiringEditionId","EditionEditDto","EditionInfoDto","isHighestEdition","isFree","EditionListDto","expiringEditionDisplayName","EditionWithFeaturesDto","allFeatures","FlatFeatureSelectDto","editionsWithFeatures","EmailSettingsEditDto","defaultFromAddress","defaultFromDisplayName","smtpHost","smtpPort","smtpUserName","smtpPassword","smtpDomain","smtpEnableSsl","smtpUseDefaultCredentials","EntityChangeListDto","changeTime","changeType","changeTypeName","entityChangeSetId","originalValue","propertyTypeFullName","imageContentFileName","scriptContentFileName","vocabularyContentFileName","audioContentFileName","episodeVideoName","fileFileName","difficultyLevelId","oval","OvalDto","EpisodeVideoDto","videoContentFileName","ExpiringTenant","remainingDayCount","ExternalAuthenticateModel","authProvider","providerKey","providerAccessCode","waitingForActivation","clientId","additionalParams","ExternalLoginProviderSettingsEditDto","facebook_IsDeactivated","facebook","FacebookExternalLoginProviderSettings","google_IsDeactivated","google","GoogleExternalLoginProviderSettings","twitter_IsDeactivated","twitter","TwitterExternalLoginProviderSettings","microsoft_IsDeactivated","microsoft","MicrosoftExternalLoginProviderSettings","openIdConnect_IsDeactivated","openIdConnect","OpenIdConnectExternalLoginProviderSettings","openIdConnectClaimsMapping","JsonClaimMapDto","wsFederation_IsDeactivated","wsFederation","WsFederationExternalLoginProviderSettings","wsFederationClaimsMapping","enabledSocialLoginSettings","appId","appSecret","FeatureInputTypeDto","validator","IValueValidator","itemSource","LocalizableComboboxItemSourceDto","FindOrganizationUnitRolesInput","FindOrganizationUnitUsersInput","FlatFeatureDto","parentName","textHtmlColor","FlatPermissionDto","isGrantedByDefault","FlatPermissionWithDifficultyLevelDto","friendProfilePictureId","GeneralSettingsEditDto","timezoneForComparison","GetAllAvailableWebhooksOutput","GetAllDynamicEntityPropertyValuesOutputItem","selectedValues","allValuesInputTypeHas","GetAllEntitiesHasDynamicPropertyOutput","GetAllSendAttemptsOfWebhookEventOutput","webhookUri","webhookSubscriptionId","responseStatusCode","GetAllSendAttemptsOutput","webhookEventId","GetAllSubscriptionsOutput","webhooks","UserLoginInfoDto","customAudioForEpisode","episodeName","tenantTitle","dailySales","totalProfit","newFeedbacks","newOrders","newUsers","salesSummary","SalesSummaryData","totalSales","revenue","expenses","growth","transactionPercent","newVisitPercent","bouncePercent","profitShares","editionStatistics","TenantEdition","episodeVideoContentFileName","episodeOval","ovalTitle","episodeUser","episodeVideo","expiringTenants","subscriptionEndAlertDayCount","maxExpiringTenantsShownCount","incomeStatistics","IncomeStastistic","languageNames","defaultLanguageName","latestWebLogLines","memberActivities","MemberActivity","NotificationSubscriptionWithDisplayNameDto","GetNotificationsCreatedByUserOutput","dataTypeName","isPublished","UserNotification","recentTenantsDayCount","maxRecentTenantsShownCount","tenantCreationStartDate","recentTenants","RecentTenant","stats","RegionalStatCountry","GetRolesInput","roles","UserRoleDto","allOrganizationUnits","memberedOrganizationUnits","allowedUserNameCharacters","isSMTPSettingsProvided","GetUsersInput","clientSecret","userInfoEndpoint","HostBillingSettingsEditDto","legalName","address","general","userManagement","HostUserManagementSettingsEditDto","email","tenantManagement","TenantManagementSettingsEditDto","security","SecuritySettingsEditDto","billing","otherSettings","OtherSettingsEditDto","externalLoginProviderSettings","isEmailConfirmationRequiredForLogin","smsVerificationEnabled","isCookieConsentEnabled","isQuickThemeSelectEnabled","useCaptchaOnLogin","allowUsingGravatarProfilePicture","sessionTimeOutSettings","SessionTimeOutSettingsEditDto","userPasswordSettings","UserPasswordSettingsEditDto","amount","InsertOrUpdateAllValuesInput","InsertOrUpdateAllValuesInputItem","InstallDto","serverUrl","defaultLanguage","smtpSettings","billInfo","Int64EntityDto","editionDisplayName","invoiceNo","invoiceDate","tenantLegalName","tenantAddress","tenantTaxNo","hostLegalName","hostAddress","serverRootAddress","claim","LanguageTextListDto","baseValue","targetValue","LdapSettingsEditDto","isModuleEnabled","domain","ovalContent","usernameOrEmailAddress","LinkedUserDto","LocalizableComboboxItemDto","MassNotificationOrganizationUnitLookupTableDto","MassNotificationUserLookupTableDto","earnings","cases","closed","rate","profilePictureName","MoveOrganizationUnitInput","newParentId","MoveTenantsToAnotherEditionDto","sourceEditionId","targetEditionId","NotificationData","NotificationSeverity","authority","loginUrl","validateIssuer","code","memberCount","roleCount","OrganizationUnitRoleListDto","addedTime","OrganizationUnitUserListDto","OvalFileDifficultyLevelDto","OvalFileDto","OvalFileEntityDto","isNextFileHasDifferentDifficulty","nameWithoutExtention","hasFile","allowedMinimumLength","requireDigit","requireLowercase","requireNonAlphanumeric","requireUppercase","requiredLength","demoUsername","demoPassword","disabledFundings","gatewayType","supportsRecurringPayments","additionalPrice","PaymentPeriodType","systemName","originalSystemName","partitionName","partitionDnsSuffix","countryName","sales","averagePrice","totalPrice","RegisterInput","RegisterTenantInput","subscriptionStartType","isTenantActive","isEmailConfirmationRequired","RenamePageInput","ResetPasswordInput","resetCode","ResolveTenantIdInput","isDefault","RoleListDto","isStatic","RolesToOrganizationUnitInput","roleIds","period","profit","SalesSummaryDatePeriod","SavePageInput","allowOneConcurrentLoginPerUser","useDefaultPasswordComplexitySettings","passwordComplexity","defaultPasswordComplexity","userLockOut","UserLockOutSettingsEditDto","twoFactorLogin","TwoFactorLoginSettingsEditDto","SendAndGetDateWithTextInput","SendEmailActivationLinkInput","SendPasswordResetCodeInput","SendTestEmailInput","SendTwoFactorAuthCodeModel","showTimeOutNotificationSecond","showLockScreenWhenTimedOut","SetDefaultLanguageInput","StringEntityDto","output","publishableKey","StripeCreatePaymentSessionInput","cancelUrl","paymentDone","gateway","payerId","isRecurring","externalPaymentId","SubscriptionPaymentGatewayType","SubscriptionPaymentListDto","TemplateName","TenantBillingSettingsEditDto","taxVatNo","TenantEmailSettingsEditDto","useHostDefaultEmailSettings","TenantListDto","logoFileType","subscriptionDateString","creationTimeString","allowSelfRegistration","isNewRegisteredTenantActiveByDefault","useCaptchaOnRegistration","defaultEditionId","TenantNotification","entityType","entityTypeName","TenantOtherSettingsEditDto","TenantUserManagementSettingsEditDto","ldap","isNewRegisteredUserActiveByDefault","fixedFooter","desktopFixedHeader","mobileFixedHeader","minimizeDesktopHeaderType","allowAsideMinimizing","enableSecondary","fixedSubHeader","subheaderStyle","subheaderSize","titleStyle","containerStyle","subContainerStyle","newTenantsCount","newSubscriptionAmount","dashboardPlaceholder1","dashboardPlaceholder2","consumerKey","consumerSecret","accessTokenSecret","secret","confirmed","redirectUrl","isEnabledForApplication","isEmailProviderEnabled","isSmsProviderEnabled","isRememberBrowserEnabled","isLeftMenuUsed","isTopMenuUsed","isTabMenuUsed","UpdateEditionDto","UpdateLanguageTextInput","UpdateOrganizationUnitInput","UpdateOvalsOrderDto","dropIndex","UpdateTenantFeaturesInput","UpdateUserPermissionsInput","signInToken","encodedUserId","encodedTenantId","isTwoFactorEnabled","isLockoutEnabled","lockoutEndDateUtc","isEmailConfirmed","UserListRoleDto","roleName","maxFailedAccessAttemptsBeforeLockout","defaultAccountLockoutSeconds","UserLoginAttemptDto","userNameOrEmail","targetNotifiersList","enableCheckingLastXPasswordWhenPasswordChange","checkingLastXPasswordCount","enablePasswordExpiration","passwordExpirationDayCount","passwordResetCodeExpirationHours","roleDisplayName","isAssigned","inheritedFromOrganizationUnit","UsersToOrganizationUnitInput","positionX","positionY","WidgetFilterOutput","filters","metaDataAddress","wtrealm","ApiException","isApiException","blob","Observable","observer","reader","FileReader","readAsText","ZeroRefreshTokenService","_tokenAuthService","refreshTokenObservable","getRefreshToken","tokenResult","tokenExpireDate","ZeroTemplateHttpConfigurationService","AbpHttpConfigurationService","messageService","logService","_route","handleUnAuthorizedRequest","messagePromise","shouldIgnoreUnAuthorizedRequest","handleTargetUrl","_ignoreUnAuthorizedUrls","ApiServiceProxies","RefreshTokenService","HTTP_INTERCEPTORS","AbpHttpInterceptor","ArrayToTreeConverterService","createTree","parentIdProperty","idProperty","parentIdValue","childrenProperty","fieldMappings","tree","newNode","mapFields","fieldMapping","targetFunction","AutoFocusDirective","BusyIfDirective","_viewContainer","_componentFactoryResolver","_injector","ngxSpinnerService","loadComponent","refreshState","isBusy","spinnerName","componentFactory","resolveComponentFactory","NgxSpinnerComponent","componentRef","createComponent","fullScreen","busyIf","currentValue","ButtonBusyDirective","buttonBusy","_button","_originalButtonInnerHtml","innerHTML","busyText","DatePickerLuxonModifierDirective","bsDatepicker","bsValueChange","lastDate","withTimepicker","setHours","setMinutes","setSeconds","setMilliseconds","isUtc","dateChange","bsValue","DateRangePickerLuxonModifierDirective","bsDateRangepicker","dates","lastDates","FileDownloadService","downloadTempFile","GuidGeneratorService","LuxonFormatPipe","ScriptLoaderService","scripts","promises","loadScript","onerror","loadStyle","rel","TreeDataHelperService","findNode","foundNode","findParent","nodeSelector","findChildren","traverseChildren","names","ValidationMessagesComponent","appLocalizationService","errorProperty","errorDefsInternal","arrayPush","copyArray","baseFlatten","_concat","standarts","standartErrorDefs","_find","_errorDefs","edC","errorDefs","getErrorDefinitionIsInValid","errorDef","formCtrl","getErrorDefinitionMessage","errorRequirement","EqualValidator","validateEqual","isReverse","validate","pairControl","pairValue","deleteErrors","setErrors","NG_VALIDATORS","PasswordComplexityValidator","givenPassword","validationResult","counto_directive_1","require","CountoDirective","counto_module_1","core_1","ɵngcc0","countoChange","countoEnd","configurable","countTo","_countTo","countFrom","_countFrom","_step","_this","_timer","intermediate","increment","ctorParameters","propDecorators","Output","Input","ɵɵdefineDirective","inputs","outputs","ɵɵdefineNgModule","ɵɵdefineInjector","forms_1","platform_browser_1","textMaskCore_1","MaskedInputDirective","_elementRef","_compositionMode","textMaskConfig","mask","guide","placeholderChar","keepCharPositions","onChange","_composing","_isAndroid","ɵgetDOM","getUserAgent","_setupMask","textMaskInputElement","inputElement","_handleInput","createTextMaskInputElement","_compositionStart","_compositionEnd","Renderer2","ElementRef","decorators","Optional","Inject","COMPOSITION_BUFFER_MODE","ɵɵdirectiveInject","hostBindings","rf","ɵɵlistener","exportAs","ɵɵProvidersFeature","ɵɵNgOnChangesFeature","conformToMask","_typeof","Symbol","_defineProperties","descriptor","writable","_possibleConstructorReturn","_assertThisInitialized","ReferenceError","_wrapNativeSuper","Class","_cache","_isNativeFunction","TypeError","Wrapper","_construct","_getPrototypeOf","_setPrototypeOf","Parent","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","setPrototypeOf","__proto__","getPrototypeOf","TrialWatermark","customElements","_HTMLElement","_inherits","subClass","superClass","_super","_createSuper","Derived","hasNativeReflectConstruct","Super","NewTarget","_classCallCheck","Constructor","shadow","attachShadow","__anchor","img","textContent","__themes","_createClass","protoProps","staticProps","anchorImg","define","_dereq_","global","scheduleDrain","Mutation","WebKitMutationObserver","called","nextTick","createTextNode","characterData","setImmediate","MessageChannel","scriptEl","channel","port1","onmessage","port2","postMessage","draining","queue","oldQueue","immediate","task","INTERNAL","REJECTED","FULFILLED","PENDING","resolver","outcome","safelyResolveThenable","QueueItem","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","getThen","thenable","onError","onSuccess","tryCatch","tryToUnwrap","out","reason","iterable","resolved","allResolver","resolveFromAll","outValue","race","idb","getIDB","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","createBlob","parts","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","getBlob","Promise$1","executeCallback","executeTwoCallbacks","errorCallback","normalizeKey","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","bin","buf","ArrayBuffer","Uint8Array","charCodeAt","_checkBlobSupport","_checkBlobSupportWithoutCaching","txn","transaction","objectStore","put","onabort","oncomplete","matchedChrome","matchedEdge","_deferReadiness","dbInfo","dbContext","deferredOperation","deferredOperations","dbReady","_advanceReadiness","pop","_rejectReadiness","_getConnection","upgradeNeeded","forages","db","dbArgs","openreq","onupgradeneeded","createObjectStore","oldVersion","ex","newVersion","onsuccess","onversionchange","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","isUpgrade","incVersion","_decodeBlob","encodedBlob","atob","_isEncodedBlob","__local_forage_encoded_blob","_fullyReady","_initReady","_dbInfo","createTransaction","retries","tx","_tryReconnect","forage","asyncStorage","_initStorage","ready","initPromises","ignoreErrors","_defaultConfig","_support","isIndexedDBValid","isSafari","openDatabase","platform","hasFetch","fetch","IDBKeyRange","iterate","req","openCursor","iterationNumber","cursor","continue","blobSupport","_encodeBlob","onloadend","btoa","readAsBinaryString","advanced","openKeyCursor","advance","dropInstance","currentConfig","dbPromise","deleteObjectStore","_forage2","deleteDatabase","onblocked","BASE_CHARS","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","bytes","bufferToString","base64String","localforageSerializer","serialize","valueType","marker","fileReader","readAsArrayBuffer","deserialize","blobType","matcher","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","createDbTable","executeSql","tryExecuteSql","sqlStatement","SYNTAX_ERR","_setItem","retriesLeft","serializer","sqlError","QUOTA_ERR","getAllStoreNames","storeNames","webSQLStorage","_initStorage$1","dbInfoPromise","isWebSQLValid","iterate$1","getItem$1","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","dropInstance$1","operationInfo","dropTable","operations","_getKeyPrefix","defaultConfig","keyPrefix","_isLocalStorageUsable","checkIfLocalStorageThrows","localStorageTestKey","localStorageWrapper","_initStorage$2","isLocalStorageValid","iterate$2","keyPrefixLength","getItem$2","setItem$2","removeItem$2","clear$2","length$2","key$2","keys$2","itemKey","dropInstance$2","sameValue","searchElement","arg","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","callWhenReady","localForageInstance","libraryMethod","_args","extend","LocalForage","driverTypeKey","driverName","defineDriver","_config","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","driverObject","complianceError","driverMethods","driverMethodName","methodNotImplementedFactory","optionalDriverMethod","configureMissingMethods","setDriverSupport","support","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","supportedDrivers","_getSupportedDrivers","setDriverToConfig","extendSelfWithDriver","_extend","oldDriverSetDone","initDriver","currentDriverIndex","driverPromiseLoop","supports","libraryMethodsAndProperties","createInstance","localforage_js","FileLikeObject","fileOrInput","rawFile","fakePathOrObject","_createFromFakePath","lastModifiedDate","lastIndexOf","_createFromObject","FileItem","isReady","isUploading","isUploaded","isSuccess","isCancel","isError","_file","method","itemAlias","uploadItem","_onCompleteItem","_onErrorItem","cancelItem","removeFromQueue","onBeforeUpload","onBuildForm","onCancel","onComplete","_onBeforeUpload","_onBuildForm","_onProgress","_onSuccess","_onError","_onCancel","_onComplete","_prepareToUploading","_nextIndex","FileType","mimeClass","mime_psd","mime_compress","mime_doc","mime_xsl","mime_ppt","fileTypeDetection","inputFilename","types","jpg","jpeg","tif","psd","bmp","png","nef","tiff","cr2","dwg","cdr","indd","pin","cdp","skp","stp","mp3","wav","wma","mod","m4a","compress","zip","rar","lz","z01","bz2","gz","pdf","xls","xlsx","ods","mp4","avi","wmv","mpg","mts","flv","vob","m4v","mpeg","m2ts","mov","docx","eps","txt","odt","rtf","ppt","pptx","pps","ppsx","odp","chunks","extension","isHTML5","disableMultipart","formatDataFunction","formatDataFunctionIsAsync","authTokenHeader","_queueLimitFilter","maxFileSize","_fileSizeFilter","allowedFileType","_fileTypeFilter","allowedMimeType","_mimeTypeFilter","arrayOfFilters","_getFilters","addedFileItems","temp","_isValidFile","_onAfterAddingFile","_onWhenAddingFileFailed","_failFilterIndex","_onAfterAddingAll","_getTotalProgress","_render","getIndexOfItem","transport","_xhr","_form","getNotUploadedItems","cancelAll","isFile","File","isFileLikeObject","getReadyItems","item1","item2","onAfterAddingAll","fileItems","onWhenAddingFileFailed","onBeforeUploadItem","onProgressItem","onProgressAll","onErrorItem","onCancelItem","onCompleteItem","onCompleteAll","getMimeClass","nextItem","_headersGetter","parsedHeaders","_xhrTransport","sendable","that","_onBeforeUploadItem","_onBuildItemForm","appendFile","parametersBeforeFiles","additionalParameter","paramVal","onprogress","_onProgressItem","_parseHeaders","getAllResponseHeaders","_transformResponse","_isSuccessCode","_onCancelItem","notUploaded","ratio","queueLimit","parsed","line","_onSuccessItem","FileSelectDirective","onFileSelected","getOptions","getFilters","isEmptyAfterSelection","multiple","div","elMatches","mozMatchesSelector","msMatchesSelector","queryChildren","cls","scrollingClassTimeout","addScrollingClass","removeScrollingClass","isAlive","scrollingThreshold","EventElement","prototypeAccessors","unbind","this$1","unbindAll","defineProperties","EventManager","eventElements","createEvent","CustomEvent","evt","initCustomEvent","processScrollDiff","useScrollingClass","forceFireReachEvent","fields","processScrollDiff$1","ref","contentHeight","containerHeight","up","down","reach","setScrollingClassInstantly","toInt","eventElement","once","onceHandler","env","isWebKit","supportsTouch","maxTouchPoints","DocumentTouch","supportsIePointer","msMaxTouchPoints","isChrome","updateGeometry","roundedScrollTop","containerWidth","ceil","contentWidth","scrollbarXRail","scrollbarYRail","suppressScrollX","scrollXMarginOffset","scrollbarXActive","railXWidth","railXMarginWidth","railXRatio","scrollbarXWidth","getThumbSize","scrollbarXLeft","negativeScrollAdjustment","suppressScrollY","scrollYMarginOffset","scrollbarYActive","railYHeight","railYMarginHeight","railYRatio","scrollbarYHeight","scrollbarYTop","updateCss","xRailOffset","isScrollbarXUsingBottom","scrollbarXBottom","scrollbarXTop","yRailOffset","isScrollbarYUsingRight","scrollbarYRight","scrollbarYOuterWidth","scrollbarYLeft","scrollbarX","railBorderXWidth","scrollbarY","railBorderYWidth","thumbSize","minScrollbarLength","maxScrollbarLength","bindMouseScrollHandler","pageY","startingScrollTop","startingMousePageY","scrollBy","mouseMoveHandler","touches","mouseUpHandler","bindMoves","touchMode","clickRail","positionTop","positionLeft","pageX","dragThumb","keyboard","isDefaultPrevented","defaultPrevented","activeElement","contentDocument","shadowRoot","isEditable","deltaX","deltaY","which","metaKey","altKey","shiftKey","shouldPreventDefault","wheelPropagation","wheel","mousewheelHandler","getDeltaFromEvent","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","shouldBeConsumedByChild","maxScrollTop","maxScrollLeft","shouldPrevent","useBothWheelAxes","wheelSpeed","isTop","isBottom","isLeft","isRight","ctrlKey","onwheel","onmousewheel","touch","startOffset","easingLoop","touchStart","touchMove","touchEnd","PointerEvent","MSPointerEvent","applyTouchMove","differenceX","differenceY","getTouch","targetTouches","shouldHandle","pointerType","buttons","MSPOINTER_TYPE_MOUSE","currentOffset","timeGap","magnitudeX","magnitudeY","scrollY","swipeEasing","PerfectScrollbar","userSettings","originalScrollLeft","blur","isNegativeScroll","railXStyle","borderLeftWidth","borderRightWidth","marginLeft","marginRight","railYStyle","outerWidth","paddingLeft","paddingRight","borderTopWidth","borderBottomWidth","marginTop","marginBottom","handlerName","lastScrollLeft","onScroll","removePsClasses","MapShim","getIndex","class_1","__entries__","global$1","requestAnimationFrame$1","transitionKeys","mutationObserverSupported","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","refresh","leadingCall","trailingCall","lastCallTime","resolvePending","proxy","timeoutCallback","timeStamp","addObserver","connect_","removeObserver","observers","disconnect_","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","subtree","instance_","defineConfigurable","getWindowOf","emptyRect","createRectInit","toFloat","getBordersSize","positions","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getBBox","getContentRect","getSVGContentRect","bbox","getHTMLElementContentRect","paddings","getPaddings","positions_1","horizPad","vertPad","boxSizing","isDocumentElement","vertScrollbar","horizScrollbar","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","broadcastRect","ResizeObserverEntry","rectInit","contentRect","createReadOnlyRect","Constr","DOMRectReadOnly","ResizeObserverSPI","controller","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","observations","unobserve","clearActive","observation","ResizeObserver","PerfectScrollbarComponent_div_3_Template","ctx_r0","indicatorY","interaction","indicatorX","_c0","Geometry","Position","PerfectScrollbarEvents","PerfectScrollbarConfig","PerfectScrollbarDirective","differs","elementRef","platformId","configDiff","ngDestroy","psScrollY","psScrollX","psScrollUp","psScrollDown","psScrollLeft","psScrollRight","psYReachEnd","psYReachStart","psXReachEnd","psXReachStart","isPlatformBrowser","eventType","auditTime","ngDoCheck","isFirstChange","geometry","absolute","scrollable","animateScrolling","scrollToX","scrollToY","scrollToTop","scrollToLeft","scrollToRight","scrollToElement","elementPos","scrollerPos","cancelAnimationFrame","scrollCount","oldTimestamp","cosParameter","newTimestamp","PI","cos","PLATFORM_ID","PerfectScrollbarComponent","cdRef","scrollPositionX","scrollPositionY","scrollDirectionX","scrollDirectionY","usePropagationX","usePropagationY","allowPropagationX","allowPropagationY","stateTimeout","stateUpdate","usePSClass","autoPropagation","scrollIndicators","markForCheck","directiveRef","checkPropagation","clientX","clientY","mapTo","ɵcmp","viewQuery","hostVars","ngContentSelectors","decls","vars","consts","template","ɵngcc1","__WEBPACK_AMD_DEFINE_FACTORY__","toStr","getKey","intKey","hasShallowProperty","getShallowPropertySafely","getShallowProperty","doNotReplace","currentPath","includeInheritedProps","ensureExists","insert","empty","isBoolean","coalesce","paths","nextObj","del","withInheritedProps","incompatible","invalid_plugin","invalid_title","permission_denied","sw_notification_error","sw_registration_error","unknown_interface","_win","GRANTED","DEFAULT","DENIED","_permissions","_requestWithCallback","_requestAsPromise","Notification","webkitNotifications","checkPermission","requestPermission","mozNotification","msIsSiteMode","objectMerge","isString","isUndefined","isNull","x32","requireInteraction","serviceWorker","isFunction","getFunctionBody","onClose","showNotification","vibrate","silent","createNotification","msSiteModeClearIconOverlay","msSiteModeSetIconOverlay","x16","msSiteModeActivate","_notifications","Permission","_agents","desktop","chrome","firefox","webkit","_configuration","fallback","_removeNotification","isSupported","_closeNotification","_addNotification","isInteger","_prepareNotification","_serviceWorkerCallback","onShow","_createCallback","plugin","isRtlLang","getLangDir","RtlDetectLib","_regexEscape","_regexParseLocale","_escapeRegExpPattern","_toLowerCase","reserveReturnValue","_toUpperCase","_trim","delimiter","regexp","patterns","addPatterns","pattern","patternDelimiter","_parseLocale","strLocale","countryCode","lang","objLocale","_BIDI_RTL_LANGS","getValue","_subscribe","hasError","thrownError","_throwIfClosed","lift","operator","observable","observerOrNext","isSubscriber","Subscriber","isObserver","isSubscription","SafeSubscriber","errorContext","_trySubscribe","sink","promiseCtor","getPromiseCtor","Symbol_observable","pipeFromArray","ObjectUnsubscribedError","createErrorClass","currentObservers","isStopped","subject","AnonymousSubject","shift","observed","_checkFinalizedStatuses","_innerSubscribe","EMPTY_SUBSCRIPTION","Subscription","arrRemove","COMPLETE_NOTIFICATION","kind","EMPTY_OBSERVER","handleStoppedNotification","nextNotification","_next","errorNotification","_error","_complete","_bind","thisArg","ConsumerObserver","partialObserver","handleUnhandledError","captureError","reportUnhandledError","onStoppedNotification","timeoutProvider","noop","defaultErrorHandler","UnsubscriptionError","initialTeardown","_parentage","_finalizers","initialFinalizer","finalizer","execFinalizer","teardown","_hasParent","_addParent","_removeParent","onUnhandledError","useDeprecatedSynchronousErrorHandling","useDeprecatedNextContext","scheduler","popScheduler","resultSelector","popResultSelector","observables","argsArgArrayOrObject","combineLatestInit","valueTransform","maybeSchedule","remainingFirstValues","hasFirstValue","createObject","mapOneOrManyArgs","execute","executeSchedule","concatAll","mergeAll","defer","observableFactory","forkJoin","sources","remainingCompletions","remainingEmissions","sourceIndex","hasValue","subscribeOn","schedule","scheduleAsyncIterable","asyncIterator","scheduled","isInteropObservable","scheduleObservable","observeOn","isArrayLike","scheduleArray","isPromise","schedulePromise","isAsyncIterable","isIterable","scheduleIterable","Symbol_iterator","return","isReadableStreamLike","scheduleReadableStreamLike","readableStreamLikeToAsyncGenerator","createInvalidObservableTypeError","nodeEventEmitterMethods","eventTargetMethods","jqueryMethods","isEventTarget","isNodeStyleEventEmitter","addListener","removeListener","toCommonHandlerRegistry","isJQueryStyleEventEmitter","subTarget","fromInteropObservable","obs","fromArrayLike","fromPromise","fromAsyncIterable","fromIterable","fromReadableStreamLike","readableStream","asyncIterable","asyncIterable_1","asyncIterable_1_1","e_1","__awaiter","__asyncValues","e_1_1","concurrent","popNumber","throwError","errorOrErrorFactory","errorFactory","dueTime","intervalOrScheduler","asyncScheduler","intervalDuration","isScheduler","due","isValidDate","onNext","onFinalize","OperatorSubscriber","shouldUnsubscribe","audit","durationSelector","lastValue","durationSubscriber","isComplete","endDuration","cleanupDuration","catchError","handledResult","innerSub","project","activeTask","lastTime","emitWhenIdle","targetTime","defaultIfEmpty","keySelector","defaultCompare","previousKey","currentKey","predicate","hasDefaultValue","throwIfEmpty","EmptyError","mergeInternals","onBeforeNext","innerSubScheduler","additionalFinalizer","checkComplete","outerNext","doInnerSub","innerComplete","innerValue","bufferedValue","scanInternals","seed","hasSeed","emitOnNext","emitBeforeComplete","hasState","scan","share","connector","resetOnError","resetOnComplete","resetOnRefCountZero","wrapperSource","resetConnection","refCount","hasCompleted","hasErrored","cancelReset","resetAndUnsubscribe","conn","dest","handleReset","onSubscriber","ReplaySubject","_bufferSize","_windowTime","_timestampProvider","dateTimestampProvider","_buffer","_infiniteTimeWindow","_trimBuffer","copy","adjustedBufferSize","last","configOrBufferSize","windowTime","bufferSize","startWith","innerSubscriber","innerIndex","outerIndex","seen","tapObserver","isUnsub","defaultErrorFactory","Action","work","intervalProvider","handle","AsyncAction","recycleAsyncId","requestAsyncId","_scheduler","_execute","errorValue","errored","actions","Scheduler","schedulerActionCtor","AsyncScheduler","SchedulerAction","_active","animationFrameProvider","animationFrameScheduler","AnimationFrameScheduler","flushId","_scheduled","AnimationFrameAction","async","getSymbolIterator","objectProto","getKeys","isPOJO","createImpl","ctorFunc","stack","cb","isRoot","errorThrown","parentSubscription","scheduleSubscription","__asyncGenerator","getReader","__await","read","releaseLock","hasLift","liftedSource","callOrApply","fns","prev","privateProps","awaitingPromise","innerParams","domCache","swalClasses","iconTypes","consolePrefix","capitalizeFirstLetter","previousWarnOnceMessages","warnAboutDeprecation","deprecatedParam","useInstead","warnOnce","callIfFunction","hasToPromiseFn","asPromise","getContainer","container","elementBySelector","selectorString","elementByClass","getPopup","popup","getIcon","getTitle","getHtmlContainer","getImage","getProgressSteps","getValidationMessage","getConfirmButton","getCancelButton","getDenyButton","deny","getLoader","loader","getActions","getFooter","getTimerProgressBar","getCloseButton","getFocusableElements","focusableElementsWithTabindex","tabindexA","tabindexB","otherFocusableElements","uniqueArray","isVisible$1","isModal","hasClass","isToast","previousBodyPadding","setInnerHtml","DOMParser","parseFromString","HTMLVideoElement","HTMLAudioElement","cloneNode","applyCustomClass","showClass","removeCustomClasses","getInput$1","inputClass","checkbox","radio","range","focusInput","toggleClass","condition","Boolean","getDirectChildByClass","applyNumericalStyle","isScrollable","hasCssAnimation","animDuration","transDuration","animateTimerProgressBar","timerProgressBar","globalState","restoreActiveElement","returnFocus","scrollX","restoreFocusTimeout","previousActiveElement","isNodeEnv","sweetHTML","textarea","resetValidationMessage$1","currentInstance","resetValidationMessage","oldContainerExisted","oldContainer","resetOldContainer","getTarget","setupAccessibility","rtl","setupRTL","rangeOutput","oninput","onchange","addInputChangeListeners","parseHtmlToContainer","param","handleObject","jquery","handleJqueryElem","animationEndEvent","testEl","transEndEventNames","WebkitAnimation","renderActions","showConfirmButton","showDenyButton","renderButtons","confirmButton","denyButton","cancelButton","renderButton","handleButtonsStyling","buttonsStyling","styled","denyButtonColor","cancelButtonColor","reverseButtons","loaderHtml","button","buttonType","renderContainer","handleBackdropParam","backdrop","background","handlePositionParam","handleGrowParam","grow","growClass","inputClasses","showInput","renderInputType","inputContainer","getInputContainer","inputAutoFocus","setAttributes","inputAttributes","removeAttributes","attrName","setCustomClass","setInputPlaceholder","placeholder","inputPlaceholder","setInputLabel","prependTo","inputLabel","labelClass","insertAdjacentElement","checkAndSetInputValue","inputValue","number","tel","rangeInput","checkboxContainer","checked","initialPopupWidth","textareaWidth","getMargin","attributeFilter","renderContent","htmlContainer","rerender","renderInput","iconType","setColor","adjustSuccessIconBackgroundColor","popupBackgroundColor","successIconParts","setContent","newContent","oldContent","iconHtml","iconContent","question","warning","iconColor","sel","addClasses$1","createStepElement","stepEl","createLineElement","lineEl","progressStepsDistance","renderPopup","progressStepsContainer","progressSteps","currentProgressStep","renderProgressSteps","renderIcon","imageAlt","imageWidth","imageHeight","renderImage","titleText","renderTitle","closeButton","closeButtonHtml","showCloseButton","closeButtonAriaLabel","renderCloseButton","renderFooter","didRender","hideLoading","showRelatedButton","loading","buttonToReplace","clickConfirm","DismissReason","freeze","esc","removeKeydownHandler","keydownTarget","keydownHandlerAdded","keydownHandler","capture","keydownListenerCapture","setFocus","focusableElements","arrowKeysNextButton","arrowKeysPreviousButton","dismissWith","isComposing","keyCode","stopKeydownPropagation","handleEnter","handleTab","handleArrows","handleEsc","allowEnterKey","getInput","btnIndex","sibling","buttonToFocus","HTMLButtonElement","allowEscapeKey","privateMethods","swalPromiseResolve","swalPromiseReject","unsetAriaHidden","addBottomPaddingForTallPopups","iOS","bottomPanelHeight","lockBodyScroll","preventTouchMove","ontouchstart","shouldPreventTouchMove","ontouchmove","isStylus","isZoom","touchType","fixScrollbar","scrollDiv","scrollbarWidth","measureScrollbar","removePopupAndResetState","didClose","triggerDidCloseAndDispose","iosfix","undoIOSfix","removeBodyClasses","resolveValue","prepareResolveValue","triggerClosePopup","isAwaitingPromise","isDismissed","handleAwaitingPromise","hideClass","handlePopupAnimation","_destroy","isDenied","animationIsSupported","willClose","animatePopup","swalCloseEventFinishedCallback","setButtonsDisabled","setInputDisabled","radios","heightAuto","allowOutsideClick","preConfirm","preDeny","confirmButtonAriaLabel","denyButtonText","denyButtonAriaLabel","cancelButtonText","cancelButtonAriaLabel","focusConfirm","focusDeny","showLoaderOnConfirm","showLoaderOnDeny","inputOptions","inputAutoTrim","inputValidator","returnInputValueOnDeny","validationMessage","willOpen","didDestroy","scrollbarPadding","updatableParams","deprecatedParams","toastIncompatibleParams","isValidParameter","paramName","isUpdatableParameter","isDeprecatedParameter","checkIfParamIsValid","checkIfToastParamIsValid","checkIfParamIsDeprecated","filterValidParams","validUpdatableParams","disposeSwal","disposeWeakMaps","unsetWeakMaps","instanceMethods","closeModal","closePopup","closeToast","disableButtons","disableInput","disableLoading","enableButtons","enableInput","rejectPromise","inputerror","showValidationMessage","updatedParams","showLoading","replaceButton","getCheckboxValue","getRadioValue","getFileValue","handleInputOptions","processInputOptions","populateInputOptions","formatInputOptions","handleInputValue","renderOption","optionLabel","inputOption","optgroup","radioValue","radioLabel","radioInput","radioLabelElement","valueFormatted","handleConfirmOrDenyWithInput","getInputValue","handleInputValidator","checkValidity","preDenyValue","rejectWith","succeedWith","preConfirmValue","handleToastClick","isAnyButtonShown","ignoreOutsideClick","handleModalMousedown","onmousedown","onmouseup","handleContainerMousedown","handleModalClick","isJqueryElement","stopTimer","stopTimerProgressBar","timerProgressBarWidth","timerProgressBarFullWidth","timerProgressBarPercent","resumeTimer","remaining","bodyClickListenerAdded","clickHandlers","bodyClickListener","fire","staticMethods","argsToParams","bindClickHandler","clickCancel","clickDeny","enableLoading","getIconContent","getInputLabel","getTimerLeft","increaseTimer","increase","isTimerRunning","isRunning","isVisible","mixin","mixinParams","MixinSwal","_main","priorityMixinParams","toggleTimer","running","Timer","started","swalStringParams","getSwalParams","templateContent","swalParams","showWarningsForAttributes","getSwalFunctionParams","swalFunctions","getSwalButtons","swalButtons","getSwalImage","getSwalIcon","getSwalInput","getSwalStringParams","paramNames","showWarningsForElements","allowedElements","allowedAttributes","openPopup","initialBodyOverflow","addClasses","setScrollingVisibility","fixScrollContainer","swalOpenAnimationFinished","MSStream","iOSfix","defaultInputValidators","string","setParameters","setDefaultInputValidators","validateCustomTargetElement","SweetAlert","outerParams","showWarningsForParams","prepareParams","populateDomCache","swalPromise","finally","onFinally","handleConfirmButtonClick","handleDenyButtonClick","handleCancelButtonClick","handlePopupClick","addKeydownHandler","handleInputOptionsAndValue","setupTimer","initFocus","templateParams","getTemplateParams","blurActiveElement","focusButton","initiationDate","pointerEvents","ukrainianAnthem","Sweetalert2","styleSheet","__esModule","strFunction","previousConformedValue","previousPlaceholder","currentCaretPosition","conformedValue","rawValue","indexesOfPipedChars","caretTrapIndexes","processCaretTraps","maskWithoutCaretTraps","convertMaskToPlaceholder","char","isNew","someCharsRejected","isNumber","isNil","indexes","setSelectionRange","showMask","selectionEnd","rejected","mark","performanceMeasure","measure","symbolPrefix","__Zone_symbol_prefix","__symbol__","checkDuplicate","Zone","zoneSpec","_parent","_name","_properties","_zoneDelegate","_ZoneDelegate","patches","ZoneAwarePromise","_currentZoneFrame","currentTask","_currentTask","ignoreDuplicate","perfName","_api","getZoneWith","wrap","_callback","intercept","runGuarded","applyThis","applyArgs","handleError","runTask","NO_ZONE","notScheduled","eventTask","macroTask","reEntryGuard","_transitionTo","runCount","previousTask","isPeriodic","cancelFn","invokeTask","unknown","_updateTaskCount","scheduleTask","newZone","scheduling","zoneDelegates","_zoneDelegates","scheduleMicroTask","customSchedule","ZoneTask","microTask","scheduleMacroTask","customCancel","scheduleEventTask","cancelTask","canceling","DELEGATE_ZS","onHasTask","hasTaskState","hasTask","onScheduleTask","onInvokeTask","onCancelTask","parentDelegate","_taskCounts","_parentDelegate","_forkZS","onFork","_forkDlgt","_forkCurrZone","_interceptZS","onIntercept","_interceptDlgt","_interceptCurrZone","_invokeZS","onInvoke","_invokeDlgt","_invokeCurrZone","_handleErrorZS","onHandleError","_handleErrorDlgt","_handleErrorCurrZone","_scheduleTaskZS","_scheduleTaskDlgt","_scheduleTaskCurrZone","_invokeTaskZS","_invokeTaskDlgt","_invokeTaskCurrZone","_cancelTaskZS","_cancelTaskDlgt","_cancelTaskCurrZone","_hasTaskZS","_hasTaskDlgt","_hasTaskDlgtOwner","_hasTaskCurrZone","zoneSpecHasTask","targetZone","returnTask","scheduleFn","counts","useG","_numberOfNestedTaskFrames","drainMicroTaskQueue","cancelScheduleRequest","fromState1","fromState2","handleId","symbolSetTimeout","symbolPromise","symbolThen","nativeMicroTaskQueuePromise","_microTaskQueue","_isDrainingMicrotaskQueue","nativeScheduleMicroTask","nativeThen","microtaskDrainDone","symbol","currentZoneFrame","showUncaughtError","patchEventTarget","patchOnProperties","patchMethod","bindArguments","patchThen","patchMacroTask","patchEventPrototype","isIEOrEdge","getGlobalObjects","ObjectDefineProperty","ObjectGetOwnPropertyDescriptor","ObjectCreate","ArraySlice","patchClass","wrapWithCurrentZone","filterProperties","attachOriginToPatched","_redefineProperty","patchCallbacks","getOwnPropertyDescriptor","ObjectGetPrototypeOf","ADD_EVENT_LISTENER_STR","REMOVE_EVENT_LISTENER_STR","ZONE_SYMBOL_ADD_EVENT_LISTENER","ZONE_SYMBOL_REMOVE_EVENT_LISTENER","TRUE_STR","FALSE_STR","ZONE_SYMBOL_PREFIX","scheduleMacroTaskWithCurrentZone","zoneSymbol","isWindowExists","internalWindow","_global","isPropertyWritable","propertyDesc","isWebWorker","WorkerGlobalScope","isMix","zoneSymbolEventNames$1","wrapFn","eventNameSymbol","errorEvent","patchProperty","desc","onPropPatchedSymbol","originalDescGet","originalDescSet","REMOVE_ATTRIBUTE","onProperties","originalInstanceKey","OriginalClass","patchFn","proto","delegateName","patchDelegate","funcName","metaCreator","setNative","cbIdx","patched","isDetectedIEOrEdge","ieOrEdge","__load_patch","api","_uncaughtPromiseErrors","isDisableWrappingUncaughtPromiseRejection","rejection","uncaughtPromiseError","throwOriginal","handleUnhandledRejection","UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL","isThenable","forwardResolution","forwardRejection","symbolState","symbolValue","symbolFinally","symbolParentPromiseValue","symbolParentPromiseState","UNRESOLVED","makeResolver","resolvePromise","wasCalled","wrappedFunction","CURRENT_TASK_TRACE_SYMBOL","onceWrapper","clearRejectedNoCatch","trace","creationTrace","scheduleResolveOrReject","readableObjectToString","REJECTION_HANDLED_HANDLER","chainPromise","promiseState","parentPromiseValue","isFinallyPromise","AggregateError","finished","res","rej","onResolve","onReject","allWithCallback","thenCallback","unresolvedCount","valueIndex","resolvedValues","curValueIndex","thenErr","executor","toStringTag","species","NativePromise","symbolThenPatched","Ctor","originalThen","zoneify","resultPromise","ctor","originalFunctionToString","ORIGINAL_DELEGATE_SYMBOL","PROMISE_SYMBOL","ERROR_SYMBOL","newFunctionToString","originalDelegate","nativePromise","nativeError","originalObjectToString","passiveSupported","OPTIMIZED_ZONE_EVENT_TASK_DATA","zoneSymbolEventNames","globalSources","EVENT_NAME_SYMBOL_REGX","IMMEDIATE_PROPAGATION_SYMBOL","prepareEventNames","eventNameToString","falseEventName","trueEventName","symbolCapture","apis","patchOptions","ADD_EVENT_LISTENER","REMOVE_EVENT_LISTENER","rm","LISTENERS_EVENT_LISTENER","REMOVE_ALL_LISTENERS_EVENT_LISTENER","rmAll","zoneSymbolAddEventListener","ADD_EVENT_LISTENER_SOURCE","isRemoved","handleEvent","globalCallback","isCapture","tasks","copyTasks","globalZoneAwareCallback","globalZoneAwareCaptureCallback","patchEventTargetMethods","useGlobalCallback","validateHandler","chkDup","returnTarget","taskData","nativeAddEventListener","nativeRemoveEventListener","nativeListeners","nativeRemoveAllListeners","nativePrependEventListener","buildEventListenerOptions","isExisting","symbolEventNames","symbolEventName","existingTasks","allRemoved","typeOfDelegate","unpatchedEvents","passiveEvents","makeAddListener","nativeListener","addSource","customScheduleFn","customCancelFn","transferEventName","isHandleEvent","constructorName","targetSource","PREPEND_EVENT_LISTENER","existingTask","findEventTasks","captureTasks","removeTasks","evtName","foundTasks","captureFalseTasks","captureTrueTasks","targetName","nativeDelegate","opts","ignoreProperties","tip","ip","targetIgnoreProperties","op","patchFilteredProperties","getOnEventNames","getOwnPropertyNames","eventNames","SYMBOL_BLACK_LISTED_EVENTS","SYMBOL_UNPATCHED_EVENTS","taskSymbol","patchTimer","setName","cancelName","nameSuffix","clearNative","tasksByHandleId","clearTask","unref","legacyPatch","blockingMethods","patchEvent","eventTargetPatch","EVENT_TARGET","EventTarget","XMLHttpRequestEventTarget","propertyDescriptorPatch","__Zone_ignore_on_properties","patchTargets","ignoreErrorProperties","isIE","patchCustomElements","patchXHR","XMLHttpRequestPrototype","oriAddListener","oriRemoveListener","XMLHttpRequestEventTargetPrototype","READY_STATE_CHANGE","SCHEDULED","XHR_SCHEDULED","XHR_ERROR_BEFORE_SCHEDULED","XHR_LISTENER","newListener","aborted","loadTasks","oriInvoke","XHR_TASK","sendNative","placeholderCallback","abortNative","openNative","XHR_SYNC","XHR_URL","fetchTaskAborting","fetchTaskScheduling","findPendingTask","geolocation","patchPrototype","fnNames","findPromiseRejectionHandler","PromiseRejectionEvent","webpackAsyncContext","tryToString","$TypeError","$String","UNSCOPABLES","ArrayPrototype","toAbsoluteIndex","lengthOfArrayLike","deletePropertyOrThrow","inc","argumentsLength","endPos","STRICT_METHOD","arrayMethodIsStrict","toObject","callWithSafeIterationClosing","isArrayIteratorMethod","isConstructor","createProperty","getIterator","getIteratorMethod","$Array","IS_CONSTRUCTOR","mapfn","mapping","iteratorMethod","createMethod","IndexedObject","boundFunction","findLast","findLastIndex","uncurryThis","arraySpeciesCreate","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","TYPE","filterReject","toIndexedObject","toIntegerOrInfinity","$lastIndexOf","NEGATIVE_ZERO","wellKnownSymbol","V8_VERSION","SPECIES","foo","aCallable","IS_RIGHT","SILENT_ON_NON_WRITABLE_LENGTH_SET","fin","mergeSort","middle","comparefn","insertionSort","llength","rlength","lindex","rindex","$RangeError","relativeIndex","actualIndex","iteratorClose","ITERATOR","SAFE_CLOSING","iteratorWithReturn","stringSlice","isCallable","classofRaw","TO_STRING_TAG","$Object","CORRECT_ARGUMENTS","tryGet","defineBuiltInAccessor","defineBuiltIns","anInstance","isNullOrUndefined","defineIterator","createIterResultObject","setSpecies","DESCRIPTORS","fastKey","InternalStateModule","setInternalState","internalStateGetterFor","getConstructor","Prototype","getInternalState","previous","removed","getEntry","setStrong","getInternalCollectionState","getInternalIteratorState","IS_MAP","isForced","defineBuiltIn","InternalMetadataModule","fails","checkCorrectnessOfIteration","setToStringTag","inheritIfRequired","IS_WEAK","ADDER","NativeConstructor","NativePrototype","exported","fixMethod","CONSTRUCTOR_NAME","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","ownKeys","getOwnPropertyDescriptorModule","definePropertyModule","hasOwn","MATCH","error1","error2","requireObjectCoercible","quot","p1","createPropertyDescriptor","propertyKey","padStart","$isFinite","DatePrototype","nativeDateToISOString","thisTimeValue","getUTCHours","getUTCMilliseconds","getUTCMinutes","getUTCMonth","getUTCSeconds","milliseconds","sign","ordinaryToPrimitive","anObject","getter","setter","makeBuiltIn","defineGlobalProperty","simple","IS_HTMLDDA","EXISTS","Deno","versions","v8","createNonEnumerableProperty","copyConstructorProperties","TARGET","GLOBAL","STATIC","sourceProperty","targetProperty","regexpExec","RegExpPrototype","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","FORCED","$exec","SHAM","doesNotExceedSafeInteger","flattenIntoArray","targetIndex","mapFn","elementLen","FunctionPrototype","NATIVE_BIND","arraySlice","$Function","factories","partArgs","getDescriptor","PROPER","CONFIGURABLE","uncurryThisWithBind","aFunction","getMethod","Iterators","classof","rawLength","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","symbols","namedCaptures","NewTargetPrototype","$this","functionToString","hiddenKeys","getOwnPropertyNamesModule","getOwnPropertyNamesExternalModule","isExtensible","uid","FREEZING","REQUIRED","METADATA","setMetadata","objectID","weakData","getWeakData","onFreeze","NATIVE_WEAK_MAP","shared","sharedKey","OBJECT_ALREADY_INITIALIZED","enforce","getterFor","documentAll","getBuiltIn","inspectSource","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","isConstructorLegacy","replacement","detection","normalize","NATIVE","POLYFILL","$documentAll","isPrototypeOf","USE_SYMBOL_AS_UID","Result","ResultPrototype","AS_ENTRIES","IS_RECORD","IS_ITERATOR","INTERRUPTED","callFn","iterFn","innerResult","innerError","returnThis","IteratorConstructor","IS_PURE","FunctionName","createIteratorConstructor","IteratorsCore","PROPER_FUNCTION_NAME","CONFIGURABLE_FUNCTION_NAME","IteratorPrototype","BUGGY_SAFARI_ITERATORS","VALUES","ENTRIES","CurrentIteratorPrototype","getIterationMethod","INCORRECT_VALUES_NAME","IterablePrototype","nativeIterator","defaultIterator","anyNativeIterator","arrayIterator","PrototypeOfArrayIteratorPrototype","enforceInternalState","CONFIGURABLE_LENGTH","TEMPLATE","$expm1","EPSILON","EPSILON32","MAX32","MIN32","$abs","$sign","LOG10E","globalIsFinite","isFinite","whitespaces","$parseFloat","$parseInt","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","$assign","alphabet","getOwnPropertySymbols","propertyIsEnumerable","activeXDocument","definePropertiesModule","enumBugKeys","documentCreateElement","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","NullProtoObjectViaActiveX","NullProtoObject","iframeDocument","iframe","NullProtoObjectViaIFrame","V8_PROTOTYPE_DEFINE_BUG","IE8_DOM_DEFINE","toPropertyKey","$defineProperty","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","$getOwnPropertyNames","windowNames","getWindowNames","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","ARRAY_BUFFER_NON_EXTENSIBLE","$isExtensible","FAILS_ON_PRIMITIVES","NASHORN_BUG","$propertyIsEnumerable","WEBKIT","__defineSetter__","aPossiblePrototype","CORRECT_SETTER","Source","re1","re2","regexpFlags","stickyHelpers","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","nativeReplace","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","UNSUPPORTED_Y","NPCG_INCLUDED","raw","charsAdded","strCopy","reCopy","regExpFlags","$RegExp","MISSED_STICKY","BROKEN_CARET","SHARED","copyright","license","aConstructor","second","CONVERT_TO_STRING","codeAt","toLength","$repeat","fillLen","intMaxLength","stringLength","fillStr","stringFiller","IS_END","forcedStringTrimMethod","METHOD_NAME","ltrim","rtrim","SymbolPrototype","valueOf","TO_PRIMITIVE","arity","exoticToPrim","postfix","wrappedWellKnownSymbolModule","NATIVE_SYMBOL","WellKnownSymbolsStore","createWellKnownSymbol","addToUnscopables","arrayMethodHasSpeciesSupport","IS_CONCAT_SPREADABLE","IS_CONCAT_SPREADABLE_SUPPORT","isConcatSpreadable","copyWithin","$every","$filter","$findIndex","FIND_INDEX","SKIPS_HOLES","$findLastIndex","$findLast","$find","FIND","flatMap","sourceLen","flat","$includes","$indexOf","nativeIndexOf","ARRAY_ITERATOR","nativeJoin","$map","setArrayLength","properErrorOnNonWritableLength","argCount","$reduceRight","CHROME_VERSION","reduceRight","$reduce","nativeReverse","nativeSlice","HAS_SPECIES_SUPPORT","$some","internalSort","FF","IE_OR_EDGE","V8","nativeSort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","chr","itemsLength","arrayLength","getSortCompare","insertCount","actualStart","actualDeleteCount","arrayToReversed","toReversed","arrayFromConstructorAndList","getVirtual","toSorted","toSpliced","newLen","arrayWith","with","$Date","setFullYear","setYear","toGMTString","toPrimitive","dateToPrimitive","INVALID_DATE","TO_STRING","nativeDateToString","HAS_INSTANCE","FUNCTION_NAME_EXISTS","nameRE","regExpExec","getReplacerFunction","$stringify","numberToString","tester","low","WRONG_SYMBOLS_CONVERSION","ILL_FORMED_UNICODE","stringifyWithSymbolsFix","$replacer","fixIllFormed","log1p","$acosh","sqrt","LN2","acosh","$asinh","asinh","$atanh","atanh","cbrt","LOG2E","clz32","expm1","$cosh","cosh","fround","$hypot","hypot","sum","aLen","larg","$imul","imul","log10","log2","sinh","tanh","trunc","thisNumberValue","NUMBER","NativeNumber","PureNumberNamespace","NumberPrototype","toNumeric","toNumber","third","maxCode","digits","calledWithNew","NumberWrapper","isIntegralNumber","isSafeInteger","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","nativeToExponential","ROUNDS_PROPERLY","toExponential","nativeToFixed","c2","divide","dataToString","toFixed","fractDigits","x2","nativeToPrecision","toPrecision","__defineGetter__","$entries","$freeze","nativeGetOwnPropertyDescriptor","getOwnPropertyDescriptors","nativeGetPrototypeOf","$isFrozen","isFrozen","$isSealed","isSealed","nativeKeys","__lookupGetter__","__lookupSetter__","$preventExtensions","preventExtensions","PROTO","$seal","seal","TO_STRING_TAG_SUPPORT","unsafe","$values","functionApply","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","deleteProperty","objectGetPrototypeOf","isDataDescriptor","receiver","objectSetPrototypeOf","existingDescriptor","ownDescriptor","isRegExp","getRegExpFlags","proxyAccessor","NativeRegExp","SyntaxError","stringIndexOf","IS_NCG","CORRECT_NEW","RegExpWrapper","rawFlags","thisIsRegExp","patternIsRegExp","flagsAreUndefined","groups","rawPattern","dotAll","handled","named","brackets","ncg","groupid","groupname","handleNCG","handleDotAll","INDICES_SUPPORT","calls","expected","addGetter","pairs","ignoreCase","multiline","nativeTest","$toString","nativeToString","createHTML","forcedStringHTMLMethod","anchor","big","bold","codePointAt","notARegExp","correctIsRegExpLogic","nativeEndsWith","CORRECT_IS_REGEXP_LOGIC","endsWith","fixed","fontcolor","fontsize","fromCharCode","$fromCodePoint","fromCodePoint","italics","STRING_ITERATOR","point","speciesConstructor","advanceStringIndex","MATCH_ALL","REGEXP_STRING","REGEXP_STRING_ITERATOR","nativeMatchAll","WORKS_WITH_NON_GLOBAL_REGEX","$RegExpStringIterator","unicode","$matchAll","$global","fullUnicode","matchAll","rx","fixRegExpWellKnownSymbolLogic","$padEnd","padEnd","$padStart","literalSegments","getSubstitution","REPLACE","replaceAll","IS_REG_EXP","endOfLastMatch","replacer","searchString","functionalReplace","replaceValue","advanceBy","searchLength","maybeToString","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","accumulatedResult","nextSourcePosition","captures","searcher","small","callRegExpExec","MAX_UINT32","$push","internalSplit","lim","lastLastIndex","separatorCopy","lastLength","nativeSplit","splitter","unicodeMatching","originalExec","nativeStartsWith","strike","intLength","intStart","intEnd","sup","trimEnd","trimStart","trimLeft","trimRight","$trim","defineWellKnownSymbol","nativeObjectCreate","getOwnPropertyNamesExternal","defineSymbolToPrimitive","$forEach","HIDDEN","SYMBOL","$Symbol","QObject","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","USE_SETTER","setSymbolDescriptor","ObjectPrototypeDescriptor","$defineProperties","$getOwnPropertySymbols","useSetter","useSimple","NativeSymbol","SymbolWrapper","thisSymbolValue","symbolDescriptiveString","NATIVE_SYMBOL_REGISTRY","StringToSymbolRegistry","SymbolToStringRegistry","for","keyFor","adopt","verb","settle","resume","__values","stateChangeExpr","animateChild","useAnimation","_position","_onStart","triggerMicrotask","AnimationGroupPlayer","_players","doneCount","destroyCount","startCount","timeAtPosition","longestPlayer","longestSoFar","_DOM","getDOM","setRootDomAdapter","adapter","DomAdapter","historyGo","relativePosition","useBrowserPlatformLocation","ɵɵinject","BrowserPlatformLocation","LOCATION_INITIALIZED","_doc","_init","_history","history","onPopState","getGlobalEventTarget","onHashChange","newPath","pushState","supportsState","replaceState","forward","back","getState","createBrowserPlatformLocation","joinWithSlash","slashes","stripTrailingSlash","pathEndIdx","normalizeQueryParams","LocationStrategy","PathLocationStrategy","APP_BASE_HREF","_platformLocation","_removeListenerFns","_baseHref","prepareExternalUrl","internal","includeHash","queryParams","externalUrl","HashLocationStrategy","Location","locationStrategy","_subject","_urlChangeListeners","_urlChangeSubscription","_locationStrategy","browserBaseHref","_stripIndexHtml","isCurrentPathEqualTo","_stripBaseHref","baseHref","_notifyUrlChangeListeners","onUrlChange","fnIndex","onThrow","onReturn","createLocation","CURRENCIES_EN","ADP","AFN","ALL","AMD","AOA","ARS","AUD","AZN","BAM","BBD","BDT","BHD","BIF","BMD","BND","BOB","BRL","BSD","BWP","BYN","BYR","BZD","CAD","CHF","CLF","CLP","CNY","COP","CRC","CUC","CUP","CZK","DJF","DKK","DOP","EGP","ESP","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GNF","GTQ","GYD","HKD","HNL","HRK","HUF","IDR","ILS","INR","IQD","IRR","ISK","ITL","JMD","JOD","JPY","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LTL","LUF","LVL","LYD","MGA","MGF","MMK","MNT","MRO","MUR","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PHP","PKR","PLN","PYG","RON","RSD","RUB","RWF","SBD","SEK","SGD","SHP","SLE","SLL","SOS","SRD","SSP","STD","STN","SYP","THB","TMM","TND","TOP","TRL","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYI","UYU","UYW","UZS","VEF","VND","VUV","XAF","XCD","XOF","XPF","XXX","YER","ZAR","ZMK","ZMW","ZWD","NumberFormatStyle","Decimal","Percent","Currency","Scientific","FormStyle","Format","Standalone","TranslationWidth","Narrow","Abbreviated","Wide","Short","FormatWidth","Medium","Long","Full","NumberSymbol","Group","List","PercentSign","PlusSign","MinusSign","Exponential","SuperscriptingExponent","PerMille","NaN","TimeSeparator","CurrencyDecimal","CurrencyGroup","getLocaleDateFormat","getLastDefinedValue","ɵfindLocaleData","ɵLocaleDataIndex","getLocaleTimeFormat","getLocaleDateTimeFormat","dateTimeFormatData","getLocaleNumberSymbol","getLocaleNumberFormat","checkFullData","extractTime","hours","minutes","ISO8601_DATE_REGEX","NAMED_FORMATS","DATE_FORMATS_SPLIT","ZoneWidth","ShortGMT","Extended","DateType","FullYear","Month","Hours","Minutes","Seconds","FractionalSeconds","Day","TranslationType","DayPeriods","Days","Months","Eras","toDate","parsedNb","isoStringToDate","tzHour","tzMin","dateSetter","setUTCFullYear","timeSetter","setUTCHours","getNamedFormat","part","dateTimezoneOffset","timezoneToOffset","convertTimezoneToLocal","reverseValue","addDateMinutes","getMinutes","dateFormatter","getDateFormatter","DATE_FORMATS","formatter","dateStrGetter","dateGetter","weekNumberingYearGetter","weekGetter","timeZoneGetter","localeId","getLocaleId","formatValue","shortTime","shortDate","formatDateTime","mediumTime","mediumDate","longTime","longDate","fullTime","fullDate","opt_values","padNumber","num","minusSign","negWrap","neg","strNum","getDatePart","getHours","getSeconds","getMilliseconds","getDay","formatFractionalSeconds","localeMinus","extended","getDateTranslation","getLocaleMonthNames","formStyle","getLocaleDayNames","currentHours","currentMinutes","rules","getLocaleExtraDayPeriodRules","rule","dayPeriods","getLocaleExtraDayPeriods","afterFrom","beforeTo","getLocaleDayPeriods","amPm","getLocaleEraNames","erasData","getThursdayThisWeek","datetime","monthBased","nbDaysBefore1stDayOfMonth","thisThurs","firstThurs","getFirstThursdayOfYear","firstDayOfYear","THURSDAY","requestedTimezoneOffset","NUMBER_FORMAT_REGEXP","formatNumberToLocaleString","groupSymbol","decimalSymbol","digitsInfo","isPercent","formattedText","isZero","parsedNumber","parseNumber","integerLen","zeros","numStr","exponent","MAX_DIGITS","toPercent","fractionLen","minInt","minFraction","minFrac","maxFraction","maxFrac","minIntPart","minFractionPart","maxFractionPart","parseIntAutoRadix","roundNumber","fractionSize","roundAt","digit","dropTrailingZeros","carry","decimals","lgSize","gSize","negPre","negSuf","posPre","posSuf","parseNumberFormat","patternParts","positive","negative","positiveParts","integer","fraction","trunkLen","extraData","ɵregisterLocaleData","parseCookieValue","cookieStr","eqIndex","cookieName","cookieValue","NgClass","_iterableDiffers","_keyValueDiffers","_ngEl","_iterableDiffer","_keyValueDiffer","_initialClasses","_rawClass","klass","_removeClasses","_applyClasses","ngClass","ɵisListLikeIterable","iterableChanges","_applyIterableChanges","keyValueChanges","_applyKeyValueChanges","forEachAddedItem","_toggleClass","forEachChangedItem","forEachRemovedItem","ɵstringify","rawClassVal","NgComponentOutlet","_viewContainerRef","ngComponentOutlet","viewContainerRef","ngComponentOutletNgModule","ngComponentOutletNgModuleFactory","ngModuleFactory","_componentRef","ngComponentOutletInjector","parentInjector","_moduleRef","createNgModule","getParentInjector","ngModuleRef","projectableNodes","ngComponentOutletContent","NgModuleRef","NgForOfContext","$implicit","ngForOf","even","odd","NgForOf","_template","_differs","_ngForOf","_ngForOfDirty","_differ","ngForTrackBy","_trackByFn","ngForTemplate","_applyChanges","viewContainer","forEachOperation","adjustedPreviousIndex","previousIndex","createEmbeddedView","view","move","applyViewChange","ilen","forEachIdentityChange","NgIf","templateRef","_context","NgIfContext","_thenTemplateRef","_elseTemplateRef","_thenViewRef","_elseViewRef","ngIf","_updateView","ngIfThen","assertTemplate","ngIfElse","SwitchView","_templateRef","_created","enforceState","created","NgSwitch","_defaultUsed","_caseCount","_lastCaseCheckIndex","_lastCasesMatched","ngSwitch","_ngSwitch","_updateDefaultCases","_addCase","_addDefault","_defaultViews","_matchCase","useDefault","NgSwitchCase","_view","ngSwitchCase","NgStyle","_ngStyle","ngStyle","_setStyle","nameAndUnit","RendererStyleFlags2","NgTemplateOutlet","_viewRef","ngTemplateOutletContext","ngTemplateOutlet","ngTemplateOutletInjector","invalidPipeArgumentError","SubscribableStrategy","createSubscription","updateLatestValue","dispose","PromiseStrategy","_promiseStrategy","_subscribableStrategy","AsyncPipe","_latestValue","_subscription","_obj","_strategy","_dispose","_selectStrategy","_updateLatestValue","ɵisPromise","ɵisSubscribable","ɵpipe","DATE_PIPE_DEFAULT_TIMEZONE","DatePipe","defaultTimezone","JsonPipe","DecimalPipe","_locale","isValue","formatNumber","strToNumber","_defaultCurrencyCode","currencyCode","getCurrencySymbol","getLocaleCurrencies","symbolNarrow","formatCurrency","getNumberOfCurrencyDigits","PLATFORM_BROWSER_ID","isPlatformServer","ViewportScroller","ɵɵdefineInjectable","BrowserViewportScroller","setOffset","getScrollPosition","supportsScrolling","scrollToAnchor","elSelected","findAnchorFromDocument","documentResult","getElementsByName","createTreeWalker","createShadowRoot","treeWalker","NodeFilter","SHOW_ELEMENT","nextNode","setHistoryScrollRestoration","scrollRestoration","supportScrollRestoration","scrollRestorationDescriptor","getScrollRestorationProperty","XhrFactory","HttpHandler","HttpBackend","normalizedNames","lazyUpdate","lazyInit","maybeSetNormalizedName","clone","lcName","copyFrom","applyUpdate","toDelete","HttpUrlEncodingCodec","encodeKey","standardEncoding","encodeValue","decodeKey","decodeValue","STANDARD_ENCODING_REGEX","STANDARD_ENCODING_REPLACEMENTS","valueToString","HttpParams","updates","cloneFrom","encoder","fromString","fromObject","paramParser","rawParams","codec","eqIdx","appendAll","eKey","idx","HttpContext","isArrayBuffer","isBlob","isFormData","HttpRequest","fourth","reportProgress","mightHaveBody","urlWithParams","qIdx","serializeBody","isUrlSearchParams","URLSearchParams","detectContentTypeHeader","setHeaders","setParams","HttpEventType","Sent","UploadProgress","ResponseHeader","DownloadProgress","Response","User","defaultStatus","defaultStatusText","statusText","ok","HttpHeaderResponse","HttpErrorResponse","addBody","events$","res$","jsonp","callbackParam","patch","HttpInterceptorHandler","interceptor","foreignDocument","NoopInterceptor","nextRequestId","JsonpCallbackContext","JsonpClientBackend","callbackMap","resolvedPromise","nextCallback","cleanup","removeListeners","implementation","createHTMLDocument","adoptNode","JsonpInterceptor","XSSI_PREFIX","HttpXhrBackend","xhrFactory","detectedType","reqBody","headerResponse","partialFromXhr","getResponseUrl","responseURL","getResponseHeader","onLoad","originalBody","sentHeaders","onDownProgress","progressEvent","partialText","onUpProgress","XSRF_COOKIE_NAME","XSRF_HEADER_NAME","HttpXsrfTokenExtractor","HttpXsrfCookieExtractor","lastCookieString","parseCount","cookieString","ɵparseCookieValue","HttpXsrfInterceptor","tokenService","headerName","lcUrl","HttpInterceptingHandler","backend","chain","interceptors","jsonpCallbackContext","HttpClientXsrfModule","withOptions","XhrFactory$1","getClosureSafeProperty","objWithPropertyToExtract","fillProperties","overriddenName","newLineIndex","concatStringsWithSpace","before","after","__forward_ref__","forwardRefFn","resolveForwardRef","isForwardRef","RuntimeError","formatRuntimeError","renderStringify","stringifyForError","throwProviderNotFoundError","injectorName","msg","actual","comparison","defineInjectable","getInjectableDef","getOwnDefinition","NG_PROV_DEF","NG_INJECTABLE_DEF","isInjectable","getInjectorDef","NG_INJ_DEF","NG_INJECTOR_DEF","ngInjectableDef","ngInjectorDef","InjectFlags","Default","Host","Self","SkipSelf","_injectImplementation","setInjectImplementation","impl","injectRootLimpMode","notFoundValue","injectableDef","noSideEffects","ChangeDetectionStrategy","OnPush","ChangeDetectorStatus","CheckOnce","Checked","CheckAlways","Detached","Errored","Destroyed","isDefaultChangeDetectionStrategy","changeDetectionStrategy","ViewEncapsulation$1","Emulated","None","ShadowDom","globalThis","EMPTY_OBJ","EMPTY_ARRAY","NG_COMP_DEF","NG_DIR_DEF","NG_PIPE_DEF","NG_MOD_DEF","NG_FACTORY_DEF","NG_ELEMENT_ID","__NG_ELEMENT_ID__","componentDefCount","ɵɵdefineComponent","componentDefinition","standalone","declaredInputs","providersResolver","hostAttrs","contentQueries","onPush","changeDetection","directiveDefs","pipeDefs","getStandaloneInjector","setInput","schemas","tView","invertObject","extractDirectiveDef","nonNull","getPipeDef$1","ɵɵsetComponentScope","directives","pipes","getComponentDef","getDirectiveDef","declarations","transitiveCompileScopes","ɵɵsetNgModuleScope","scope","ngModuleDef","getNgModuleDef","secondary","newLookup","minifiedKey","publicName","declaredName","ɵɵdefinePipe","pipeDef","isStandalone","throwNotFound","isLView","isLContainer","isContentQueryHost","tNode","isComponentHost","isDirectiveHost","isComponentDef","isRootView","getFactoryDef","SimpleChange","NgOnChangesFeatureImpl","definition","ngOnChangesSetInput","rememberChangeHistoryAndInvokeOnChangesHook","simpleChangesStore","getSimpleChangesStore","privateName","setSimpleChangesStore","SIMPLE_CHANGES_STORE","previousChange","ngInherit","profilerCallback","setProfiler","profiler","hookOrListener","unwrapRNode","getNativeByIndex","lView","getNativeByTNode","getTNode","getComponentLViewByIndex","nodeIndex","hostView","slotValue","viewAttachedToChangeDetector","getConstant","resetPreOrderHookFlags","updateTransplantedViewCount","lContainer","viewOrContainer","instructionState","lFrame","createLFrame","bindingsEnabled","getBindingsEnabled","ɵɵenableBindings","ɵɵdisableBindings","getLView","getTView","ɵɵrestoreView","viewToRestore","contextLView","ɵɵresetView","getCurrentTNode","currentTNode","getCurrentTNodePlaceholderOk","getCurrentParentTNode","isParent","setCurrentTNode","isCurrentTNodeParent","setCurrentTNodeAsNotParent","getBindingRoot","bindingRootIndex","bindingStartIndex","getBindingIndex","bindingIndex","setBindingIndex","nextBindingIndex","incrementBindingIndex","setInI18nBlock","isInI18nBlock","inI18n","setBindingRootForHostBindings","currentDirectiveIndex","setCurrentDirectiveIndex","getCurrentDirectiveDef","tData","getCurrentQueryIndex","setCurrentQueryIndex","getDeclarationTNode","declTNode","enterDI","parentTNode","parentLView","allocLFrame","enterView","newView","newLFrame","firstChild","currentLFrame","childLFrame","selectedIndex","elementDepthCount","currentNamespace","leaveViewLight","oldLFrame","leaveDI","leaveView","getSelectedIndex","setSelectedIndex","getSelectedTNode","ɵɵnamespaceSVG","ɵɵnamespaceMathML","ɵɵnamespaceHTML","namespaceHTMLInternal","registerPostOrderHooks","directiveStart","directiveEnd","lifecycleHooks","ngAfterContentInit","ngAfterContentChecked","contentHooks","contentCheckHooks","viewHooks","viewCheckHooks","destroyHooks","executeCheckHooks","hooks","callHooks","executeInitAndCheckHooks","initPhase","incrementInitPhaseFlags","currentView","currentNodeIndex","nodeIndexLimit","lastNodeIndexFound","callHook","isInitHook","directive","NodeInjectorFactory","isViewProvider","injectImplementation","resolving","canSeeViewProviders","injectImpl","setUpAttributes","native","attrs","namespaceURI","attrVal","isAnimationProp","isNameOnlyAttributeMarker","mergeHostAttrs","dst","srcMarker","mergeHostAttribute","markerInsertPosition","dstValue","hasParentInjector","parentLocation","getParentInjectorIndex","getParentInjectorView","startView","viewOffset","getParentInjectorViewOffset","parentView","includeViewProviders","setIncludeViewProviders","nextNgElementId","NOT_FOUND","getOrCreateNodeInjectorForNode","existingInjectorIndex","getInjectorIndex","firstCreatePass","injectorIndex","insertBloom","blueprint","parentLoc","getParentInjectorLocation","parentIndex","parentData","declarationViewOffset","lViewCursor","getTNodeFromLView","diPublicInInjector","bloomAdd","bloomHash","notFoundValueOrThrow","lookupTokenUsingModuleInjector","moduleInjector","previousInjectImplementation","getOrCreateInjectable","embeddedInjectorValue","lookupTokenUsingEmbeddedInjector","currentLView","nodeInjectorValue","lookupTokenUsingNodeInjector","embeddedViewInjector","embeddedViewInjectorValue","bloomHashBitOrFactory","tokenId","createNodeInjector","previousTView","hostTElementNode","shouldSearchParent","bloomHasToken","searchTokensOnInjector","currentTView","injectableIdx","locateDirectiveOrProvider","getNodeInjectable","canAccessViewProviders","isHostSpecialCase","nodeProviderIndexes","providerIndexes","tInjectables","injectablesStart","directivesStart","cptViewProvidersCount","endIndex","providerTokenOrDef","dirDef","isFactory","throwCyclicDependencyError","depPath","previousIncludeViewProviders","registerPreOrderHooks","directiveIndex","directiveDef","wrappedOnChanges","preOrderHooks","preOrderCheckHooks","injectorView","isFirstHostTNode","NodeInjector","_tNode","_lView","ɵɵgetInheritedFactory","ownConstructor","ownFactory","getFactoryOf","objectPrototype","tViewType","ɵɵinjectAttribute","attrNameToInject","injectAttributeImpl","attrsLength","ANNOTATIONS","PARAMETERS","PROP_METADATA","makeDecorator","parentClass","additionalProcessing","typeFn","metaCtor","makeMetadataCtor","DecoratorFactory","annotationInstance","ngMetadataName","annotationCls","propName","makeParamDecorator","ParamDecoratorFactory","ParamDecorator","annotation","unusedKey","makePropDecorator","PropDecoratorFactory","decoratorInstance","PropDecorator","Attribute","_desc","ANALYZE_FOR_ENTRY_COMPONENTS","Query","ContentChildren","isViewQuery","descendants","emitDistinctChangesOnly","ContentChild","ViewChildren","ViewChild","FactoryTarget","Directive","Component","Injectable","Pipe","NgModule","getCompilerFacade","globalNg","ɵcompilerFacade","isType","flatten","deepForEach","addToArray","removeFromArray","newArray","keyValueArraySet","keyValueArray","keyValueArrayIndexOf","arrayInsert2","value1","value2","keyValueArrayGet","_arrayIndexOfSorted","ES5_DELEGATE_CTOR","ES2015_INHERITED_CLASS","ES2015_INHERITED_CLASS_WITH_CTOR","ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR","ReflectionCapabilities","reflect","_reflect","_zipTypesAndAnnotations","paramTypes","paramAnnotations","_ownParameters","parentCtor","isDelegateCtor","typeStr","tsickleCtorParams","ctorParam","convertTsickleDecoratorIntoMetadata","getOwnMetadata","getParentCtor","_ownAnnotations","typeOrFunc","annotations","ownAnnotations","_ownPropMetadata","propMetadata","parentPropMetadata","ownPropMetadata","hasLifecycleHook","lcProperty","decoratorInvocations","decoratorInvocation","parentProto","THROW_IF_NOT_FOUND","DI_DECORATOR_FLAG","NG_TEMP_TOKEN_PATH","NEW_LINE","SOURCE","_currentInjector","setCurrentInjector","former","injectInjectorOnly","getInjectImplementation","ɵɵinvalidFactoryDep","skipSelf","injectArgs","getInjectFlag","attachInjectFlag","decorator","getReflect","reflectDependencies","convertDependencies","reflectDependency","resolveComponentResources","resourceResolver","componentResolved","urlMap","cachedResourceResolve","unwrapResponse","componentResourceResolutionQueue","templateUrl","styleOffset","styleUrl","fullyResolved","componentDefResolved","componentDefPendingResolution","clearResolutionOfComponentResourcesQueue","componentNeedsResolution","old","modules","checkForDuplicateNgModules","registerNgModuleType","ngModuleType","assertSameOrNotExisting","incoming","getRegisteredNgModuleType","setAllowDuplicateNgModuleIdsForTest","allowDuplicates","CUSTOM_ELEMENTS_SCHEMA","NO_ERRORS_SCHEMA","shouldThrowErrorOnUnknownElement","ɵsetUnknownElementStrictMode","shouldThrow","ɵgetUnknownElementStrictMode","shouldThrowErrorOnUnknownProperty","ɵsetUnknownPropertyStrictMode","ɵgetUnknownPropertyStrictMode","Important","DashCase","COMMENT_DISALLOWED","COMMENT_DELIMITER","TRACKED_LVIEWS","uniqueIdCounter","getLViewById","LContext","lViewId","getLContext","mpValue","readPatchedData","isComponentInstance","findViaComponent","isDirectiveInstance","findViaDirective","directiveInstance","directiveIndexEnd","traverseNextElement","getDirectivesAtNodeIndex","findViaNativeElement","existingCtx","createLContext","attachPatchData","rElement","getComponentViewByInstance","componentInstance","patchedData","MONKEY_PATCH_KEY_NAME","registerLView","readPatchedLView","componentIndices","components","elementComponentIndex","includeComponents","directiveStartIndex","_icuContainerIterate","icuContainerIterate","tIcuContainerNode","getLViewParent","getRootContext","viewOrComponent","getRootView","componentOrLView","getFirstLContainer","getNearestLContainer","getNextLContainer","applyToElementOrContainer","lNodeToHandle","beforeNode","isComponent","rNode","nativeAppendChild","nativeInsertBefore","nativeRemoveNode","applyContainer","parentRElement","applyView","updateTextNode","createCommentNode","escapeCommentText","createElementNode","detachMovedView","declarationContainer","movedViews","declarationViewIndex","insertionLContainer","detachView","removeIndex","indexInContainer","viewToDetach","declarationLContainer","removedLView","removeViewFromContainer","lQueries","destroyLView","destroyViewTree","rootView","lViewOrLContainer","cleanUpView","firstView","executeOnDestroys","toCall","callContext","processCleanups","tCleanup","lCleanup","lastLCleanupIndex","idxOrTargetGetter","useCaptureOrSubIdx","instanceCleanupFn","unregisterLView","getParentRElement","getClosestRElement","nativeAppendOrInsertBefore","nativeParentNode","getInsertInFrontOfRNode","_getInsertInFrontOfRNodeWithI18n","getInsertInFrontOfRNodeWithNoI18n","_processI18nInsertBefore","policy$1","policy","setI18nHandling","getInsertInFrontOfRNodeWithI18n","processI18nInsertBefore","childRNode","childTNode","parentRNode","anchorNode","getFirstNativeNode","tNodeType","getBeforeNodeForView","elIcuContainerChild","rNodeOrLContainer","projectionNodes","getProjectionNodes","projection","viewIndexInContainer","nextViewIndex","firstTNodeOfView","nativeParent","nativeRemoveChild","applyNodes","isProjection","rawSlotValue","nextRNode","applyProjectionRecursive","projectionNext","tProjectionNode","componentLView","nodeToProjectOrRNodes","writeDirectStyle","writeDirectClass","getPolicy$1","trustedTypes","createPolicy","createScript","createScriptURL","trustedHTMLFromString","ɵɵvalidateIframeAttribute","srcdoc","setDocument","getDocument","getPolicy","trustedHTMLFromStringBypass","trustedScriptFromStringBypass","trustedScriptURLFromStringBypass","SafeValueImpl","changingThisBreaksApplicationSecurity","SafeHtmlImpl","getTypeName","SafeStyleImpl","SafeScriptImpl","SafeUrlImpl","SafeResourceUrlImpl","unwrapSafeValue","allowSanitizationBypassAndThrow","actualType","getSanitizationBypassType","bypassSanitizationTrustHtml","trustedHtml","bypassSanitizationTrustStyle","trustedStyle","bypassSanitizationTrustScript","trustedScript","bypassSanitizationTrustUrl","trustedUrl","bypassSanitizationTrustResourceUrl","trustedResourceUrl","getInertBodyHelper","defaultDoc","inertDocumentHelper","InertDocumentHelper","isDOMParserAvailable","DOMParserHelper","getInertBodyElement","inertDocument","inertHtml","inertBodyElement","templateEl","inertBody","documentMode","stripCustomNsAttrs","elAttrs","childNode","Node","ELEMENT_NODE","SAFE_URL_PATTERN","_sanitizeUrl","tagSet","tags","sets","VOID_ELEMENTS","OPTIONAL_END_TAG_BLOCK_ELEMENTS","OPTIONAL_END_TAG_INLINE_ELEMENTS","VALID_ELEMENTS","URI_ATTRS","VALID_ATTRS","SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS","SanitizingHtmlSerializer","sanitizedSomething","sanitizeChildren","traverseContent","startElement","TEXT_NODE","chars","nodeValue","endElement","checkClobberedElement","elAttr","lower","encodeEntities","compareDocumentPosition","DOCUMENT_POSITION_CONTAINED_BY","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","inertBodyHelper","_sanitizeHtml","unsafeHtmlInput","unsafeHtml","mXSSAttempts","parsedHtml","getTemplateContent","isTemplateElement","SecurityContext","NONE","HTML","STYLE","RESOURCE_URL","ɵɵsanitizeHtml","getSanitizer","sanitize","ɵɵsanitizeStyle","unsafeStyle","ɵɵsanitizeUrl","unsafeUrl","ɵɵsanitizeResourceUrl","unsafeResourceUrl","ɵɵsanitizeScript","unsafeScript","ɵɵtrustConstantHtml","ɵɵtrustConstantResourceUrl","trustedScriptURLFromString","ɵɵsanitizeUrlOrResourceUrl","getUrlSanitizer","ENVIRONMENT_INITIALIZER","INJECTOR","INJECTOR_DEF_TYPES","NullInjector","importProvidersFrom","ɵproviders","internalImportProvidersFrom","checkForStandaloneCmp","providersOut","dedup","injectorTypesWithProviders","internalSource","walkProviderTree","processInjectorTypesWithProviders","typesWithProviders","defType","injDef","cmpDef","isDuplicate","importTypesWithProviders","imported","defProviders","USE_VALUE$1","isValueProvider","isTypeProvider","INJECTOR_SCOPE","NOT_YET","CIRCULAR","NULL_INJECTOR$1","getNullInjector","EnvironmentInjector","R3Injector","scopes","_ngOnDestroyHooks","_onDestroyHooks","forEachSingleProvider","processProvider","makeRecord","injectorDefTypes","assertNotDestroyed","service","runInContext","previousInjector","couldBeInjectableType","injectableDefInScope","injectableDefOrInjectorDefFactory","hydrate","catchInjectorError","injectorErrorName","tokenPath","formatError","NG_TOKEN_PATH","resolveInjectorInitializers","initializers","initializer","providerToRecord","providerToFactory","multiRecord","hasOnDestroy","getUndecoratedInjectableFactory","paramLength","inheritedInjectableDef","getInheritedInjectableDef","typeName","unwrappedProvider","isFactoryProvider","isExistingProvider","classRef","hasDeps","isImportedNgModuleProviders","ComponentRef$1","ComponentFactory$1","_NullComponentFactoryResolver","noComponentFactoryError","ERROR_COMPONENT","ComponentFactoryResolver$1","NULL","injectElementRef","createElementRef","unwrapElementRef","injectRenderer2","nodeAtIndex","Sanitizer","Version","full","major","minor","VERSION","NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR","ERROR_ORIGINAL_ERROR","getOriginalError","ErrorHandler","_console","originalError","_findOriginalError","ɵɵresolveWindow","ɵɵresolveDocument","ɵɵresolveBody","maybeUnwrapFn","classIndexOf","classToSearch","startingIndex","NG_TEMPLATE_SELECTOR","isCssClassMatching","cssClassToMatch","isProjectionMode","isInlineTemplate","hasTagAndTypeMatch","currentSelector","isNodeMatchingSelector","nodeAttrs","nameOnlyMarkerIdx","getNameOnlyMarkerIndex","skipToNextSelector","isPositive","selectorAttrValue","attrIndexInNode","findAttrIndexInNode","nodeAttrValue","compareAgainstClassName","bindingsMode","maybeAttrName","matchTemplateAttribute","isNodeMatchingSelectorList","isSelectorInSelectorList","selectorListLoop","currentSelectorInList","maybeWrapInNotSelector","isNegativeMode","chunk","stringifyCSSSelector","currentChunk","valueOrMarker","NO_CHANGE","ɵɵadvance","delta","selectIndexInternal","checkNoChangesMode","angularCoreDiEnv","USE_VALUE","isUseClassProvider","isUseFactoryProvider","compileInjectable","ngFactoryDef","getInjectableMetadata","srcMeta","compilerMeta","typeArgumentCount","isUseValueProvider","isUseExistingProvider","compiler","compileFactory","createInjector","additionalProviders","createInjectorWithoutInjectorInstances","constructResolvingPath","findFirstClosedCycle","injectionError","constructResolvingMessage","errMsg","wrappedError","addKey","injectors","noAnnotationError","signature","parameter","mixingMultiProvidersWithRegularProvidersError","provider1","provider2","ReflectiveKey","_globalKeyRegistry","numberOfKeys","KeyRegistry","_allKeys","newKey","ReflectiveDependency","visibility","_EMPTY_LIST","ResolvedReflectiveProvider_","resolvedFactories","multiProvider","resolvedFactory","ResolvedReflectiveFactory","resolveReflectiveFactory","factoryFn","resolvedDeps","_dependenciesFor","aliasInstance","fromKey","constructDependencies","_extractToken","resolveReflectiveProvider","resolveReflectiveProviders","resolvedProviderMap","mergeResolvedReflectiveProviders","normalizedProvidersMap","resolvedProvider","_normalizeProviders","invalidProviderError","_createDependency","paramMetadata","UNDEFINED","ReflectiveInjector","ResolvedReflectiveProviders","fromResolvedProviders","ReflectiveInjector_","_providers","_constructionCounter","keyIds","objs","_getByKey","resolveAndCreateChild","createChildFromResolved","inj","resolveAndInstantiate","instantiateResolved","_instantiateProvider","getProviderAtIndex","outOfBoundsError","_new","_getMaxNumberOfObjects","cyclicDependencyError","_instantiate","_getByReflectiveDependency","instantiationError","originalException","originalStack","INJECTOR_KEY","_getByKeySelf","_getByKeyDefault","_getObjByKeyId","keyId","_throwOrNull","noProviderError","inj_","_mapProviders","ɵɵinvalidFactory","toTStylingRange","getTStylingRangePrev","tStylingRange","setTStylingRangePrevDuplicate","getTStylingRangeNext","setTStylingRangeNext","setTStylingRangeNextDuplicate","refreshContentQueries","queryStartIdx","directiveDefIdx","createLView","tHostNode","rendererFactory","getUniqueLViewId","getOrCreateTNode","createTNodeAtIndex","createTNode","tParent","insertBeforeIndex","directiveStylingLast","propertyBindings","mergedAttrs","localNames","initialInputs","tViews","stylesWithoutHost","residualStyles","classesWithoutHost","residualClasses","classBindings","styleBindings","allocExpando","numSlotsToAlloc","initialValue","allocIdx","renderView","executeViewQueryFn","templateFn","executeTemplate","staticContentQueries","staticViewQueries","renderChildComponents","hostLView","renderComponent","incompleteFirstPass","refreshView","hooksInitPhaseCompleted","markTransplantedViewsForRefresh","movedLView","refreshEmbeddedViews","embeddedLView","embeddedTView","processHostBindingOpCodes","hostBindingOpCodes","opCode","directiveIdx","bindingRootIndx","hostBindingFn","refreshChildComponents","refreshComponent","firstUpdatePass","prevSelectedIndex","isUpdatePhase","executeContentQueries","createDirectivesInstances","instantiateAllDirectives","addComponentLogic","setInputsFromAttrs","invokeDirectivesHostBindings","elementIndex","getCurrentDirectiveIndex","dirIndex","invokeHostBindingsInCreationMode","saveResolvedLocalsInData","viewData","localRefExtractor","localIndex","getOrCreateComponentTView","createTView","constsOrFactory","initialViewLength","createViewBlueprint","expandoStartIndex","directiveRegistry","pipeRegistry","storeCleanupWithContext","getOrCreateLViewCleanup","getOrCreateTViewCleanup","generatePropertyAliases","inputAliasMap","propStore","internalName","initializeInputAndOutputAliases","tViewData","tNodeAttrs","inputsFromAttrs","inputsStore","outputsStore","directiveInputs","generateInitialInputs","elementPropertyInternal","nativeOnly","dataValue","inputData","setInputsForProperty","markDirtyIfOnPush","mapPropName","viewIndex","childComponentLView","resolveDirectives","localRefs","hasDirectives","findDirectiveDefMatches","registry","markAsComponentHost","exportsMap","initTNodeFlags","preOrderHooksFound","preOrderCheckHooksFound","configureViewWithDirective","saveNameToExportMap","lifeCycleHooks","cacheMatchingLocalNames","registerHostBindingOpCodes","directiveVarsIdx","elementIndx","lastSelectedElementIdx","hostTNode","numberOfDirectives","directiveFactory","nodeInjectorFactory","componentView","addToViewTree","elementAttributeInternal","setElementAttribute","initialInputData","inputsToStore","createLContainer","hostNative","componentHostIdx","refreshContainsDirtyView","componentTView","syncViewWithBlueprint","markViewDirty","detectChangesInternal","notifyErrorHandler","viewQueryFn","loadComponentRenderer","currentDef","unwrapLView","errorHandler","textBindingInternal","computeStaticStyling","writeToHost","collectNativeNodes","lNode","lViewInAContainer","lViewFirstChildTNode","nodesInSlot","ViewRef$1","_cdRefInjectingView","_appRef","_attachedToViewContainer","rootNodes","viewRefs","detach","reattach","checkNoChanges","attachToViewContainerRef","detachFromAppRef","renderDetachView","attachToAppRef","RootViewRef","ComponentFactoryResolver","componentDef","ComponentFactory","toRefArray","nonMinified","ChainedInjector","componentType","stringifyCSSSelectorList","selectorList","isBoundToModule","rootSelectorOrNode","environmentInjector","realEnvironmentInjector","rootViewInjector","hostRenderer","elementName","hostRNode","locateHostElement","elementOrSelector","getNamespace","rootFlags","rootTView","rootLView","tElementNode","createRootComponentView","viewRenderer","extractAttrsAndClassesFromSelector","nodesforSlot","createRootComponent","hostFeatures","instantiateRootComponent","rootTNode","LifecycleHooksFeature","ComponentRef","_rootLView","getSuperType","ɵɵInheritDefinitionFeature","superType","shouldInheritFields","inheritanceChain","superDef","writeableDef","maybeUnwrapEmpty","superHostBindings","inheritHostBindings","superViewQuery","superContentQueries","inheritViewQuery","inheritContentQueries","defData","mergeHostAttrsAcrossInheritance","prevViewQuery","prevContentQueries","prevHostBindings","COPY_DIRECTIVE_FIELDS","COPY_COMPONENT_FIELDS","ɵɵCopyDefinitionFeature","defAny","_symbolIterator","isListLikeIterable","isJsObject","devModeEqual","isListLikeIterableA","isListLikeIterableB","areIterablesEqual","iterator1","iterator2","updateBinding","getBinding","bindingUpdated","bindingUpdated2","exp1","exp2","different","bindingUpdated3","exp3","bindingUpdated4","exp4","ɵɵattribute","interpolationV","isBindingUpdated","interpolation1","v0","suffix","interpolation2","v1","interpolation3","v2","interpolation4","i2","v3","interpolation5","i3","v4","interpolation6","i4","v5","interpolation7","i5","v6","interpolation8","i6","v7","ɵɵattributeInterpolate1","interpolatedValue","ɵɵattributeInterpolate2","ɵɵattributeInterpolate3","ɵɵattributeInterpolate4","ɵɵattributeInterpolate5","ɵɵattributeInterpolate6","ɵɵattributeInterpolate7","ɵɵattributeInterpolate8","ɵɵattributeInterpolateV","interpolated","ɵɵtemplate","attrsIndex","localRefsIndex","adjustedIndex","templateFirstCreatePass","tViewConsts","comment","ɵɵreference","getContextLView","ɵɵproperty","setDirectiveInputsWhichShadowsStyling","isClassBased","ɵɵelementStart","getNamespace$1","elementStartFirstCreatePass","elementStart","getElementDepthCount","increaseElementDepthCount","ɵɵelementEnd","decreaseElementDepthCount","elementEnd","hasClassInput","hasStyleInput","ɵɵelement","ɵɵelementContainerStart","elementContainerStartFirstCreatePass","ɵɵelementContainerEnd","ɵɵelementContainer","ɵɵgetCurrentView","isSubscribable","isObservable","listenerFn","useCapture","eventTargetResolver","listenerInternal","ɵɵsyntheticHostListener","isTNodeDirectiveHost","processOutputs","lCleanupIndex","existingListener","findExistingListener","tNodeIdx","cleanupEventName","listenerIdxInLCleanup","__ngLastListenerFn__","__ngNextListenerFn__","wrapListener","propsLength","executeListenerWithErrorHandling","wrapWithPreventDefault","wrapListenerIn_markDirtyAndPreventDefault","nextListenerFn","ɵɵnextContext","level","nextContextImpl","walkUpViews","nestingLevel","matchingProjectionSlotIndex","projectionSlots","wildcardNgContentIndex","ngProjectAsAttrVal","getProjectAsAttrValue","ngProjectAsAttrIdx","ɵɵprojectionDef","componentNode","projectionHeads","tails","componentChild","slotIndex","ɵɵprojection","selectorIndex","applyProjection","ɵɵpropertyInterpolate","ɵɵpropertyInterpolate1","ɵɵpropertyInterpolate2","ɵɵpropertyInterpolate3","ɵɵpropertyInterpolate4","ɵɵpropertyInterpolate5","ɵɵpropertyInterpolate6","ɵɵpropertyInterpolate7","ɵɵpropertyInterpolate8","ɵɵpropertyInterpolateV","markDuplicates","tStylingKey","isPrevDir","isClassBinding","tStylingAtIndex","isMap","foundDuplicate","tStyleRangeAtCursor","isStylingMatch","tStylingKeyCursor","parserState","textEnd","keyEnd","valueEnd","getLastParsedKey","getLastParsedValue","parseClassNameNext","consumeClassToken","consumeWhitespace","parseStyleNext","consumeStyleKey","consumeSeparator","consumeStyleValue","ch1","ch2","ch3","lastChIndex","consumeQuotedText","resetParserState","quoteCharCode","ɵɵstyleProp","checkStylingProperty","ɵɵclassProp","ɵɵstyleMap","checkStylingMap","styleKeyValueArraySet","styleStringParser","parseStyle","ɵɵclassMap","classStringParser","parseClassName","stylingFirstUpdatePass","updateStyling","normalizeSuffix","stringParser","hasStylingInputShadow","isInHostBindings","staticPrefix","updateStylingMap","oldKeyValueArray","newKeyValueArray","oldIndex","newIndex","oldKey","setKey","toStylingKeyValueArray","styleKeyValueArray","unwrappedValue","isHostBindings","wrapInStaticStylingKey","stylingKey","hostDirectiveDef","residual","collectStylingFromTAttrs","collectStylingFromDirectives","templateStylingKey","getTemplateHeadTStylingKey","bindings","setTemplateHeadTStylingKey","collectResidual","insertTStylingBinding","tStylingKeyWithStatic","isHostBinding","tBindings","tmplHead","tmplTail","isKeyDuplicateOfStatic","staticKeyValueArray","setTStylingRangePrev","markDuplicateOfResidualStyling","currentDirective","desiredMarker","currentMarker","tRange","isStylingValuePresent","getTStylingRangeNextDuplicate","findStylingValue","getTStylingRangePrevDuplicate","applyStyling","isPrevDirection","rawKey","containsStatics","isStylingMap","valueAtLViewIndex","ɵɵtext","textNative","ɵɵtextInterpolate","ɵɵtextInterpolate1","ɵɵtextInterpolate2","ɵɵtextInterpolate3","ɵɵtextInterpolate4","ɵɵtextInterpolate5","ɵɵtextInterpolate6","ɵɵtextInterpolate7","ɵɵtextInterpolate8","ɵɵtextInterpolateV","ɵɵclassMapInterpolate1","ɵɵclassMapInterpolate2","ɵɵclassMapInterpolate3","ɵɵclassMapInterpolate4","ɵɵclassMapInterpolate5","ɵɵclassMapInterpolate6","ɵɵclassMapInterpolate7","ɵɵclassMapInterpolate8","ɵɵclassMapInterpolateV","ɵɵstyleMapInterpolate1","ɵɵstyleMapInterpolate2","ɵɵstyleMapInterpolate3","ɵɵstyleMapInterpolate4","ɵɵstyleMapInterpolate5","ɵɵstyleMapInterpolate6","ɵɵstyleMapInterpolate7","ɵɵstyleMapInterpolate8","ɵɵstyleMapInterpolateV","ɵɵstylePropInterpolate1","valueSuffix","ɵɵstylePropInterpolate2","ɵɵstylePropInterpolate3","ɵɵstylePropInterpolate4","ɵɵstylePropInterpolate5","ɵɵstylePropInterpolate6","ɵɵstylePropInterpolate7","ɵɵstylePropInterpolate8","ɵɵstylePropInterpolateV","ɵɵhostProperty","ɵɵsyntheticHostProperty","localeEn","plural","LOCALE_DATA","LocaleDataIndex","LocaleId","ExtraData","findLocaleData","normalizedLocale","normalizeLocale","getLocaleData","parentLocale","getLocaleCurrencyCode","CurrencyCode","getLocalePluralCase","PluralCase","common","locales","unregisterAllLocaleData","DayPeriodsFormat","DayPeriodsStandalone","DaysFormat","DaysStandalone","MonthsFormat","MonthsStandalone","FirstDayOfWeek","WeekendRange","DateFormat","TimeFormat","DateTimeFormat","NumberSymbols","NumberFormats","CurrencySymbol","CurrencyName","Currencies","Directionality","pluralMapping","DEFAULT_LOCALE_ID","ELEMENT_MARKER","ICU_MARKER","I18nCreateOpCode","SHIFT","APPEND_EAGERLY","COMMENT","LOCALE_ID$1","setLocaleId","assertDefined","tNodeInsertBeforeIndex","i18nParent","anchorRNode","addTNodeAndUpdateInsertBeforeIndex","previousTNodes","newTNode","existingTNode","isI18nText","isNewTNodeCreatedBefore","getInsertBeforeIndex","setInsertBeforeIndex","getTIcu","createTNodePlaceholder","getCurrentICUCaseIndex","tIcu","currentCase","currentCaseLViewIndex","getParentFromIcuCreateOpCode","mergedCode","getRefFromIcuCreateOpCode","changeMask","changeMaskCounter","applyMutableOpCodes","mutableOpCodes","rootRNode","rootIdx","textNodeIndex","parentIdx","insertInFrontOf","refIdx","caseIndex","anchorIdx","commentValue","commentNodeIndex","elementNodeIndex","applyUpdateOpCodes","updateOpCodes","bindingsStartIndex","checkBit","skipCodes","sanitizeFn","tNodeOrTagName","rText","applyIcuSwitchCase","applyIcuUpdateCase","activeCaseIndex","getCaseIndex","icuExpression","bindingValue","resolvedCase","getPluralCase","applyIcuSwitchCaseRemove","removeCodes","nodeOrIcuIndex","loadIcuContainerVisitor","_stack","_removes","_index","enterIcu","icuContainerIteratorNext","removeOpCode","icuContainerIteratorStart","BINDING_REGEXP","ICU_REGEXP","NESTED_ICU","ICU_BLOCK_REGEXP","SUBTEMPLATE_REGEXP","PH_REGEXP","NGSP_UNICODE_REGEXP","createTNodeAndAddOpCode","existingTNodes","createOpCodes","isICU","i18nNodeIdx","ensureIcuContainerVisitorLoaded","setTNodeInsertBeforeIndex","assertEqual","i18nStartFirstCreatePassProcessTextNode","hasBinding","generateBindingUpdateOpCodes","destinationNode","bindingStart","maskIndex","sizeIndex","textParts","textValue","toMaskBit","countBindings","opCodes","removeInnerTemplateTranslation","tagMatched","inTemplate","icuStart","bindingMask","addUpdateIcuSwitch","mainBinding","setTIcu","valueArr","nestedIcus","icuIndex","parseIcuCase","addUpdateIcuUpdate","parseICUBlock","icuType","i18nParseTextIntoPartsAndICU","binding","blocks","prevPos","braceStack","braces","caseName","unsafeCaseHtml","inertRootNode","walkIcuTree","sharedUpdateOpCodes","addCreateNodeAndAppend","lowerAttrName","addCreateAttribute","addRemoveNode","COMMENT_NODE","isNestedIcu","addRemoveNestedIcu","appendToParentIdx","createAtIdx","icuCreateOpCode","PP_MULTI_VALUE_PLACEHOLDERS_REGEXP","PP_PLACEHOLDERS_REGEXP","PP_ICU_VARS_REGEXP","PP_ICU_PLACEHOLDERS_REGEXP","PP_ICUS_REGEXP","PP_CLOSE_TEMPLATE_REGEXP","PP_TEMPLATE_ID_REGEXP","ɵɵi18nStart","messageIndex","subTemplateIndex","i18nStartFirstCreatePass","parentTNodeIndex","existingTNodeStack","getTranslationForTemplate","isRootTemplateMessage","msgParts","replaceNgsp","isClosing","tI18n","applyCreateOpCodes","isComment","appendNow","ɵɵi18nEnd","ɵɵi18n","ɵɵi18nAttributes","i18nAttributesFirstPass","previousElementIndex","ɵɵi18nExp","setMaskBit","hasChange","ɵɵi18nApply","applyI18n","ɵɵi18nPostprocess","replacements","i18nPostprocess","templateIdsStack","phs","tmpl","placeholders","templateId","isCloseTemplateTag","currentTemplateId","_type","_idx","resolveProvider","lInjectablesBlueprint","providerFactory","beginIndex","existingFactoryIndex","registerDestroyHooksIfSupported","existingProvidersFactoryIndex","existingViewProvidersFactoryIndex","doesProvidersFactoryExist","doesViewProvidersFactoryExist","multiFactory","componentProviders","multiFactoryAdd","multiViewProvidersFactoryResolver","multiProvidersFactoryResolver","contextIndex","indexInFactory","providerIsTypeProvider","providerIsClassProvider","isClassProvider","existingCallbacksIndex","isComponentProvider","lData","multiResolve","componentCount","multiProviders","viewProviders","processProvidersFn","NgModuleRef$1","NgModuleFactory$1","createNgModuleRef","_bootstrapComponents","destroyCbs","componentFactoryResolver","_r3Injector","NgModuleFactory","EnvironmentNgModuleRefAdapter","createEnvironmentInjector","debugName","StandaloneService","cachedInjectors","getOrCreateStandaloneInjector","standaloneInjector","ɵɵStandaloneFeature","getComponent","getComponentAtNodeIndex","getContext","assertDomElement","getOwningComponent","elementOrDir","getRootComponents","getInjector","getDirectives","getDirectiveMetadata$1","directiveOrComponentInstance","getHostElement","componentOrDirective","getListeners","lContext","firstParam","secondParam","listenerElement","useCaptureOrIndx","sortListeners","isDirectiveDefHack","setClassMetadata","clazz","ɵɵpureFunction0","slotOffset","pureFn","ɵɵpureFunction1","pureFunction1Internal","ɵɵpureFunction2","pureFunction2Internal","ɵɵpureFunction3","pureFunction3Internal","ɵɵpureFunction4","pureFunction4Internal","ɵɵpureFunction5","exp5","ɵɵpureFunction6","exp6","ɵɵpureFunction7","exp7","ɵɵpureFunction8","exp8","ɵɵpureFunctionV","exps","pureFunctionVInternal","getPureFunctionReturnValue","returnValueIndex","lastReturnValue","bindingRoot","ɵɵpipe","pipeName","getPipeDef","pipeFactory","pipeInstance","ɵɵpipeBind1","isPure","ɵɵpipeBind2","ɵɵpipeBind3","ɵɵpipeBind4","ɵɵpipeBindV","_wrapInTimeout","EventEmitter_","isAsync","__isAsync","nextFn","errorFn","completeFn","symbolIterator","_results","QueryList","_emitDistinctChangesOnly","dirty","_changesDetected","_changes","toArray","resultsTree","identityAccessor","newResultFlat","arrayEquals","valueA","valueB","notifyOnChanges","setDirty","TemplateRef","injectTemplateRef","ViewEngineTemplateRef","R3TemplateRef","_declarationLView","_declarationTContainer","declarationViewLQueries","createTemplateRef","ViewContainerRef","injectViewContainerRef","createContainerRef","VE_ViewContainerRef","R3ViewContainerRef","_lContainer","_hostTNode","_hostLView","getViewRefs","indexOrOptions","viewRef","componentFactoryOrType","isComponentFactory","contextInjector","viewAttachedToContainer","prevIdx","prevLContainer","prevVCRef","adjustedIdx","_adjustIndex","insertView","containerLength","trackMovedView","addViewToContainer","parentNativeNode","getOrCreateViewRefs","viewRefsArr","detachedView","commentNode","nativeNextSibling","LQuery_","queryList","LQueries_","tQueries","noOfInheritedQueries","viewLQueries","tQuery","getByIndex","indexInDeclarationView","dirtyQueriesWithMatches","getTQuery","TQueryMetadata_","TQueries_","queriesForTemplateRef","childQueryIndex","tqueryClone","track","tquery","TQuery_","crossesNgTemplate","_appliesToNextNode","_declarationNodeIndex","isApplyingToNode","matchTNode","addMatch","declarationNodeIdx","matchTNodeWithReadOption","getIdxOfMatchingSelector","nodeMatchIdx","directiveOrProviderIdx","matchIdx","createResultForNode","matchingIdx","createResultByTNodeType","createSpecialToken","materializeViewResults","queryIndex","lQuery","tQueryMatches","matchedNodeIdx","collectQueryResults","lViewResults","embeddedLViews","ɵɵqueryRefresh","isCreationMode","ɵɵviewQuery","createTQuery","createLQuery","ɵɵcontentQuery","saveContentQueryAndDirectiveIndex","tViewContentQueries","ɵɵloadQuery","loadQueryInternal","ɵɵtemplateRefExtractor","angularCoreEnv","jitOptions","resetJitOptions","isNgModule","moduleQueue","flushingModuleQueue","flushModuleScopingQueueAsMuchAsPossible","isResolvedDeclaration","setScopeOnDeclaredComponents","declaration","compileNgModule","compileNgModuleDefs","enqueueModuleForDelayedScoping","allowDuplicateDeclarationsInRoot","expandModuleWithProviders","compileInjector","ownerNgModule","verifiedNgModule","resetCompiledComponents","transitiveScopes","transitiveScopesFor","patchComponentDefWithScope","ngSelectorScope","compilation","transitiveScopesForNgModule","importedScope","declared","exportedType","exportedScope","isModuleWithProviders","compilationDepth","compileComponent","ngComponentDef","maybeQueueResolutionOfComponentResources","addDirectiveFactoryDef","getJitOptions","preserveWhitespaces","defaultEncapsulation","directiveMetadata","typeSourceSpan","createParseSourceSpan","animations","interpolation","usesInheritance","addDirectiveDefToUndecoratedParents","getStandaloneDefFunctions","cachedDirectiveDefs","cachedPipeDefs","rawDep","hasSelectorScope","compileDirective","ngDirectiveDef","getDirectiveMetadata","sourceMapUrl","facade","extendsDirectlyFromObject","extractQueriesMetadata","isContentQuery","lifecycle","usesOnChanges","extractExportAs","viewQueries","objPrototype","shouldAddAbstractDirective","convertToR3QueryPredicate","splitByComma","convertToR3QueryMetadata","ann","isQueryAnn","queriesMeta","isInputAnnotation","piece","LIFECYCLE_HOOKS","hookName","compilePipe","ngPipeDef","getPipeMetadata","bindingPropertyName","HostBinding","hostPropertyName","HostListener","ApplicationInitStatus","appInits","initialized","donePromise","runInitializers","asyncInitPromises","initResult","observableAsPromise","APP_ID","_appIdRandomProviderFactory","_randomChar","APP_ID_RANDOM_PROVIDER","PLATFORM_INITIALIZER","APP_BOOTSTRAP_LISTENER","PACKAGE_ROOT_URL","Console","getGlobalLocale","$localize","TRANSLATIONS","TRANSLATIONS_FORMAT","MissingTranslationStrategy","Warning","Ignore","ModuleWithComponentFactories","componentFactories","Compiler","compileModuleSync","compileModuleAsync","compileModuleAndAllComponentsSync","compileModuleAndAllComponentsAsync","clearCacheFor","getModuleId","COMPILER_OPTIONS","CompilerFactory","applyChanges","rootComponent","_published","publishDefaultGlobalUtils$1","publishGlobalUtil","COMPILED","GLOBAL_PUBLISH_EXPANDO_KEY","enableLongStackTrace","shouldCoalesceEventChangeDetection","shouldCoalesceRunChangeDetection","hasPendingMacrotasks","hasPendingMicrotasks","isStable","onUnstable","onMicrotaskEmpty","onStable","assertZonePatched","_nesting","_outer","_inner","AsyncStackTaggingZoneSpec","TaskTrackingZoneSpec","longStackTraceZoneSpec","lastRequestAnimationFrameId","nativeRequestAnimationFrame","getNativeRequestAnimationFrame","nativeCancelAnimationFrame","unpatchedRequestAnimationFrame","unpatchedCancelAnimationFrame","forkInnerZoneWithAngularBehavior","delayChangeDetectionForEventsDelegate","delayChangeDetectionForEvents","isCheckStableRunning","fakeTopEventTask","updateMicroTaskStatus","checkStable","isAngularZone","onEnter","onLeave","_hasPendingMicrotasks","isInAngularZone","EMPTY_PAYLOAD","NoopNgZone","TESTABILITY","TESTABILITY_GETTER","_testabilityGetter","Testability","_ngZone","testabilityGetter","_pendingCount","_isZoneStable","_didWork","_callbacks","taskTrackingZone","setTestabilityGetter","addToWindow","_watchAngularEvents","assertNotInAngularZone","_runCallbacksIfReady","increasePendingRequestCount","decreasePendingRequestCount","timeoutId","doneCb","getPendingTasks","updateCb","macroTasks","creationLocation","addCallback","whenStable","getPendingRequestCount","registerApplication","unregisterApplication","findProviders","using","TestabilityRegistry","_applications","testability","unregisterAllApplications","getTestability","getAllTestabilities","getAllRootElements","findTestabilityInTree","findInAncestors","_platformInjector","ALLOW_MULTIPLE_PLATFORMS","PLATFORM_DESTROY_LISTENERS","compileNgModuleFactory","moduleFactory","cf","NgProbeToken","createPlatform","PlatformRef","runPlatformInitializers","inits","internalCreateApplication","appProviders","platformProviders","platformInjector","createOrReusePlatformInjector","createPlatformInjector","ngZone","getNgZone","getNgZoneOptions","envInjector","exceptionHandler","onErrorSubscription","destroyListener","onPlatformDestroyListeners","_callAndReportToErrorHandler","initStatus","ApplicationRef","createPlatformFactory","parentPlatformFactory","extraProviders","getPlatform","assertPlatform","requiredToken","destroyPlatform","_modules","_destroyListeners","bootstrapModuleFactory","ngZoneInjector","moduleRef","_moduleDoBootstrap","optionsReducer","ngDoBootstrap","destroyListeners","ngZoneEventCoalescing","ngZoneRunCoalescing","ngZoneToUse","_exceptionHandler","_bootstrapListeners","_views","_runningTick","_stable","componentTypes","_onMicrotaskEmptySubscription","tick","isCurrentlyStable","stableSub","unstableSub","assertInAngularZone","merge$1","componentOrFactory","compRef","_loadComponent","attachView","NG_DEV_MODE","viewCount","warnIfDestroyed","_devMode","_runModeLocked","isDevMode","getModuleFactory","noModuleError","getNgModuleById","ChangeDetectorRef","injectChangeDetectorRef","createViewRef","isPipe","ViewRef","EmbeddedViewRef","DebugEventListener","asNativeElements","debugEls","DebugNode","nativeNode","DebugElement","references","getLocalRefs","discoverLocalRefs","providerTokens","getInjectionTokens","copyDomProperties","NodePrototype","descriptors","isPrimitiveValue","collectPropertyBindings","bindingIndexes","metadataParts","lowercaseTNodeAttrs","eAttrs","lowercaseName","baseVal","getDebugNode","queryAll","_queryAll","queryAllNodes","triggerEventHandler","eventObj","invokedListeners","eventListeners","unwrappedListener","elementsOnly","_queryNodeChildren","_queryNativeNodeDescendants","rootNativeNode","getNativeByTNodeOrNull","_addQueryMatch","nodeOrContainer","_queryNodeChildrenInContainer","nextLView","nextTNode","childView","debugNode","NG_DEBUG_PROPERTY","getDebugNodeR2","_nativeNode","DefaultIterableDifferFactory","trackByFn","DefaultIterableDiffer","trackByIdentity","_linkedRecords","_unlinkedRecords","_previousItHead","_itHead","_itTail","_additionsHead","_additionsTail","_movesHead","_movesTail","_removalsHead","_removalsTail","_identityChangesHead","_identityChangesTail","forEachItem","nextIt","nextRemove","addRemoveOffset","moveOffsets","getPreviousIndex","adjPreviousIndex","_nextRemoved","localMovePreviousIndex","localCurrentIndex","forEachPreviousItem","_nextPrevious","_nextAdded","forEachMovedItem","_nextMoved","_nextIdentityChange","itemTrackBy","mayBeDirty","trackById","_verifyReinsertion","_addIdentityChange","_mismatch","iterateListLike","_truncate","isDirty","previousRecord","_prev","_remove","_reinsertAfter","_moveAfter","_addAfter","IterableChangeRecord_","reinsertRecord","_addToMoves","nextRecord","_addToRemovals","_unlink","prevRecord","_prevRemoved","_insertAfter","_DuplicateMap","toIndex","_prevDup","_nextDup","_DuplicateItemRecordList","_head","_tail","atOrAfterIndex","duplicates","recordList","moveOffset","DefaultKeyValueDifferFactory","DefaultKeyValueDiffer","_records","_mapHead","_appendAfter","_previousMapHead","_changesHead","_changesTail","_nextChanged","_maybeAddToChanges","_getOrCreateRecordForKey","_insertBeforeOrAppend","KeyValueChangeRecord_","_addToAdditions","_addToChanges","defaultIterableDiffersFactory","IterableDiffers","copied","defaultKeyValueDiffersFactory","KeyValueDiffers","keyValDiff","defaultIterableDiffers","defaultKeyValueDiffers","platformCore","ApplicationModule","coerceToBoolean","ɵivyEnabled","ɵɵngDeclareDirective","decl","compileDirectiveDeclaration","ɵɵngDeclareClassMetadata","ɵɵngDeclareComponent","compileComponentDeclaration","ɵɵngDeclareFactory","getFactoryKind","compileFactoryDeclaration","ɵɵngDeclareInjectable","compileInjectableDeclaration","ɵɵngDeclareInjector","compileInjectorDeclaration","ɵɵngDeclareNgModule","compileNgModuleDeclaration","ɵɵngDeclarePipe","compilePipeDeclaration","elementInjector","reflectComponentType","BaseControlValueAccessor","BuiltInControlValueAccessor","CHECKBOX_VALUE_ACCESSOR","CheckboxControlValueAccessor","DEFAULT_VALUE_ACCESSOR","DefaultValueAccessor","isEmptyInputValue","hasValidLength","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","Validators","minValidator","maxValidator","requiredValidator","requiredTrueValidator","emailValidator","minLength","minLengthValidator","maxLength","maxLengthValidator","patternValidator","validators","compose","composeAsync","required","minlength","actualLength","maxlength","nullValidator","regex","regexStr","requiredPattern","actualValue","isPresent","toObservable","mergeErrors","arrayOfErrors","executeValidators","normalizeValidators","isValidatorFn","presentValidators","composeValidators","composeAsyncValidators","mergeValidators","controlValidators","dirValidator","getControlValidators","_rawValidators","getControlAsyncValidators","_rawAsyncValidators","makeValidatorsArray","hasValidator","addValidators","currentValidators","validatorsToAdd","removeValidators","AbstractControlDirective","_onDestroyCallbacks","valid","invalid","pristine","touched","untouched","statusChanges","_setValidators","_composedValidatorFn","_setAsyncValidators","_composedAsyncValidatorFn","asyncValidator","_registerOnDestroy","_invokeOnDestroyCallbacks","errorCode","getError","NgControl","valueAccessor","ControlContainer","formDirective","AbstractControlStatus","_cd","isTouched","isUntouched","isPristine","isValid","isInvalid","isPending","isSubmitted","submitted","NgControlStatus","NgControlStatusGroup","VALID","INVALID","DISABLED","pickValidators","validatorOrOpts","isOptionsObj","coerceToValidator","pickAsyncValidators","asyncValidators","coerceToAsyncValidator","assertControlPresent","isGroup","controls","assertAllValuesPresent","_forEachChild","AbstractControl","_pendingDirty","_hasOwnPendingAsyncValidator","_pendingTouched","_onCollectionChange","_onDisabledChange","validatorFn","asyncValidatorFn","updateOn","_updateOn","setValidators","setAsyncValidators","addAsyncValidators","removeAsyncValidators","hasAsyncValidator","clearValidators","clearAsyncValidators","markAsTouched","onlySelf","markAllAsTouched","markAsUntouched","_updateTouched","markAsDirty","markAsPristine","_updatePristine","markAsPending","emitEvent","skipPristineCheck","_parentMarkedDirty","_updateValue","_updateAncestors","changeFn","updateValueAndValidity","setParent","getRawValue","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","_updateTreeValidity","ctrl","_allControlsDisabled","_asyncValidationSubscription","_updateControlsErrors","currPath","_initObservables","_anyControlsHaveStatus","_anyControls","_anyControlsDirty","_anyControlsTouched","_registerOnCollectionChange","_setUpdateStrategy","FormGroup","_setUpControls","registerControl","addControl","removeControl","setControl","controlName","patchValue","_reduceChildren","_syncPendingControls","subtreeUpdated","updated","_reduceValue","initValue","UntypedFormGroup","FormRecord","controlPath","setUpControl","setUpValidators","setUpViewChangePipeline","_pendingValue","_pendingChange","updateControl","setUpModelChangePipeline","emitModelEvent","viewToModelUpdate","_unregisterOnChange","setUpBlurPipeline","setUpDisabledChangeHandler","onDisabledChange","registerOnDisabledChange","_unregisterOnDisabledChange","cleanUpControl","validateControlPresenceOnChange","cleanUpValidators","registerOnValidatorChange","onValidatorChange","isControlUpdated","updatedValidators","updatedAsyncValidators","emitModelToViewChange","setUpFormContainer","isPropertyUpdated","viewModel","model","syncPendingControls","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","isBuiltInAccessor","formDirectiveProvider$1","NgForm","resolvedPromise$1","_directives","ngSubmit","_findContainer","getControl","addFormGroup","removeFormGroup","getFormGroup","updateModel","onSubmit","onReset","resetForm","removeListItem","isFormControlState","formState","FormControl","_onChange","_applyFormState","nonNullable","initialValueIsDefault","emitViewToModelChange","AbstractFormGroupDirective","_checkParentType","modelGroupProvider","NgModelGroup","formControlBinding$1","NgModel","_changeDetectorRef","_registered","_checkForErrors","_checkName","oldName","_getPath","_setUpControl","_updateDisabled","_isStandalone","_setUpStandalone","disabledValue","ɵcoerceToBoolean","ɵNgNoValidate","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","RADIO_VALUE_ACCESSOR","RadioControlValueAccessor","RadioControlRegistryModule","RadioControlRegistry","_accessors","accessor","_isSameGroup","fireUncheck","controlPair","_control","_registry","_fn","formControlName","RANGE_VALUE_ACCESSOR","RangeValueAccessor","NG_MODEL_WITH_FORM_CONTROL_WARNING","formControlBinding","FormControlDirective","_ngModelWarningConfig","_ngModelWarningSent","_isControlChanged","previousForm","_ngModelWarningSentOnce","formDirectiveProvider","FormGroupDirective","_updateDomValue","_checkFormPresent","_updateValidators","_updateRegistrations","_oldForm","removeListItem$1","_setUpFormContainer","_cleanUpFormContainer","addFormArray","removeFormArray","getFormArray","oldCtrl","newCtrl","isFormControl","cleanUpFormContainer","formGroupNameProvider","FormGroupName","_hasInvalidParent","formArrayNameProvider","FormArrayName","controlNameBinding","FormControlName","_added","SELECT_VALUE_ACCESSOR","SelectControlValueAccessor","_buildValueString$1","_optionMap","_idCounter","_compareWith","compareWith","valueString","_getOptionId","_getOptionValue","_registerOption","_extractId$1","NgSelectOption","_select","ngValue","_setElementValue","SELECT_MULTIPLE_VALUE_ACCESSOR","SelectMultipleControlValueAccessor","_buildValueString","optionSelectedStateSetter","ids","opt","_setSelected","_extractId","ɵNgSelectMultipleOption","toInteger","AbstractValidatorDirective","_validator","inputName","normalizeInput","_enabled","createValidator","MAX_VALIDATOR","MaxValidator","MIN_VALIDATOR","MinValidator","REQUIRED_VALIDATOR","RequiredValidator","CHECKBOX_REQUIRED_VALIDATOR","CheckboxRequiredValidator","EMAIL_VALIDATOR","EmailValidator","MIN_LENGTH_VALIDATOR","MinLengthValidator","MAX_LENGTH_VALIDATOR","MaxLengthValidator","PATTERN_VALIDATOR","PatternValidator","ɵInternalFormsSharedModule","warnOnNgModelWithFormControl","FormArray","_registerControl","removeAt","UntypedFormArray","isAbstractControlOptions","FormBuilder","useNonNullable","nnfb","reducedControls","_reduceControls","createdControls","_createControl","NonNullableFormBuilder","UntypedFormBuilder","controlsConfig","GenericBrowserDomAdapter","ɵDomAdapter","supportsDOMEvents","BrowserDomAdapter","ɵsetRootDomAdapter","onAndCancel","getDefaultDocument","createHtmlDocument","DocumentFragment","getBaseElementHref","baseElement","relativePath","urlParsingNode","pathName","resetBaseElement","getCookie","TRANSITION_ID","SERVER_TRANSITION_PROVIDERS","transitionId","dom","BrowserGetTestability","ɵglobal","testabilities","didWork","decrement","didWork_","BrowserXhr","EVENT_MANAGER_PLUGINS","plugins","_eventNameToPlugin","manager","_plugins","_findPluginFor","addGlobalEventListener","getZone","EventManagerPlugin","SharedStylesHost","_stylesSet","addStyles","additions","onStylesAdded","getAllStyles","DomSharedStylesHost","_hostNodes","_addStylesToHost","styleNodes","styleEl","addHost","hostNode","removeHost","styleNode","NAMESPACE_URIS","svg","xhtml","xlink","xml","xmlns","math","COMPONENT_REGEX","shimContentAttribute","componentShortId","shimHostAttribute","compId","decoratePreventDefault","eventHandler","DomRendererFactory2","eventManager","sharedStylesHost","rendererByCompId","defaultRenderer","DefaultDomRenderer2","EmulatedEncapsulationDomRenderer2","applyToHost","ShadowDomRenderer","createElementNS","isTemplateNode","namespaceUri","setAttributeNS","removeAttributeNS","contentAttr","hostAttr","hostEl","nodeOrShadowRoot","DomEventsPlugin","MODIFIER_KEYS","_keyMap","Del","Esc","Left","Right","Up","Down","Menu","Scroll","Win","MODIFIER_KEY_GETTERS","alt","KeyEventsPlugin","parseEventName","parsedEvent","outsideHandler","eventCallback","fullKey","domEventName","_normalizeKey","codeIX","modifierName","fullKeyCode","keycode","modifierGetter","matchEventFullKeyCode","keyName","bootstrapApplication","ɵinternalCreateApplication","createProvidersConfig","createApplication","BROWSER_MODULE_PROVIDERS","INTERNAL_BROWSER_PLATFORM_PROVIDERS","provideProtractorTestingSupport","TESTABILITY_PROVIDERS","initDomAdapter","makeCurrent","ɵPLATFORM_BROWSER_ID","_document","ɵsetDocument","platformBrowser","BROWSER_MODULE_PROVIDERS_MARKER","ɵTESTABILITY_GETTER","ɵTESTABILITY","ɵINJECTOR_SCOPE","providersAlreadyPresent","Meta","_dom","addTag","forceCreation","_getOrCreateElement","addTags","getTag","attrSelector","getTags","updateTag","_parseSelector","_setMetaElementAttributes","removeTag","removeTagElement","_containsAttributes","_getMetaKeyMap","META_KEYS_MAP","createMeta","httpEquiv","Title","setTitle","newTitle","createTitle","exportNgVar","ChangeDetectionPerfRecord","msPerTick","numTicks","AngularProfiler","timeChangeDetection","profileName","isProfilerAvailable","profile","performanceNow","profileEnd","PROFILER_GLOBAL_NAME","enableDebugTools","disableDebugTools","escapeHtml","escapedText","makeStateKey","TransferState","onSerializeCallbacks","hasKey","onSerialize","toJson","retrieveTransferredState","initialState","unescapeHtml","unescapedText","BrowserTransferStateModule","By","debugElement","elementMatches","EVENT_NAMES","pan","panstart","panmove","panend","pancancel","panleft","panright","panup","pandown","pinch","pinchstart","pinchmove","pinchend","pinchcancel","pinchin","pinchout","press","pressup","rotate","rotatestart","rotatemove","rotateend","rotatecancel","swipe","swipeleft","swiperight","swipeup","swipedown","doubletap","HAMMER_GESTURE_CONFIG","HAMMER_LOADER","HammerGestureConfig","overrides","buildHammer","Hammer","HammerGesturesPlugin","_loaderPromise","isCustomEvent","cancelRegistration","HammerModule","ɵConsole","DomSanitizer","DomSanitizerImpl","ɵallowSanitizationBypassAndThrow","ɵunwrapSafeValue","ɵ_sanitizeHtml","ɵ_sanitizeUrl","bypassSecurityTrustHtml","ɵbypassSanitizationTrustHtml","bypassSecurityTrustStyle","ɵbypassSanitizationTrustStyle","bypassSecurityTrustScript","ɵbypassSanitizationTrustScript","bypassSecurityTrustUrl","ɵbypassSanitizationTrustUrl","ɵbypassSanitizationTrustResourceUrl","domSanitizerImplFactory","_refCount","refCounter","sharedConnection","_connection","ConnectableObservable","subjectFactory","getSubject","_teardown","higherOrderRefCount","takeLast","PRIMARY_OUTLET","RouteTitleKey","ParamsAsMap","convertToParamMap","defaultUrlMatcher","segmentGroup","hasChildren","posParams","consumed","shallowEqual","equalArraysOrString","aSorted","bSorted","wrapIntoObservable","ɵisObservable","pathCompareMap","exact","equalSegmentGroups","containee","matrixParams","equalPath","matrixParamsMatch","numberOfChildren","subset","containsSegmentGroup","paramCompareMap","equalParams","containsParams","ignored","containsTree","fragment","containsSegmentGroupHelper","containeePaths","containerPaths","containeeSegment","UrlTree","queryParamMap","_queryParamMap","DEFAULT_SERIALIZER","UrlSegmentGroup","serializePaths","UrlSegment","parameterMap","_parameterMap","serializePath","UrlSerializer","DefaultUrlSerializer","UrlParser","parseRootSegment","parseQueryParams","parseFragment","serializeSegment","serializeQueryParams","strParams","encodeUriQuery","encodeUriFragment","mapChildrenIntoArray","childOutlet","encodeUriString","encodeUriSegment","decode","decodeQuery","serializeMatrixParams","SEGMENT_RE","matchSegments","QUERY_PARAM_RE","QUERY_PARAM_VALUE_RE","consumeOptional","peekStartsWith","parseChildren","parseQueryParam","parseSegment","parseParens","parseMatrixParams","parseParam","valueMatch","matchQueryParams","matchUrlQueryParamValue","decodedKey","decodedVal","currentVal","allowPrimary","outletName","createRoot","rootCandidate","squashSegmentGroup","newChildren","childCandidate","mergeTrivialChildren","isUrlTree","createUrlTree","urlTree","commands","nav","computeNavigation","Navigation","numberOfDoubleDots","isAbsolute","cmd","cmdIdx","outlets","segmentPath","urlPart","partIndex","toRoot","createTreeUsingPathIndex","lastPathIndex","startingPosition","findStartingPosition","createPositionApplyingDoubleDots","isMatrixParams","_urlSegment","processChildren","updateSegmentGroupChildren","updateSegmentGroup","_lastPathIndex","isCommandWithOutlets","oldRoot","oldSegmentGroup","newSegmentGroup","qp","replaceSegment","newRoot","oldSegment","newSegment","cmdWithOutlet","prefixedWith","currentCommandIndex","currentPathIndex","noMatch","pathIndex","commandIndex","curr","slicedCommands","createNewSegmentGroup","getOutlets","outlet","createNewSegmentChildren","RouterEvent","navigationTrigger","restoredState","urlAfterRedirects","NavigationError","RoutesRecognized","GuardsCheckStart","GuardsCheckEnd","shouldActivate","ResolveStart","ResolveEnd","RouteConfigLoadStart","RouteConfigLoadEnd","ChildActivationStart","routeConfig","ChildActivationEnd","ActivationStart","ActivationEnd","routerEvent","Tree","_root","pathFromRoot","siblings","findPath","TreeNode","nodeChildrenAsMap","RouterState","setRouterState","createEmptyState","createEmptyStateSnapshot","activated","ActivatedRouteSnapshot","RouterStateSnapshot","emptyUrl","emptyParams","emptyData","emptyQueryParams","ActivatedRoute","futureSnapshot","_futureSnapshot","_routerState","_paramMap","inheritedParamsDataResolve","paramsInheritanceStrategy","inheritingStartingFrom","flattenInherited","_resolvedData","urlSegment","correctedLastPathIndex","_correctedLastPathIndex","_resolve","serializeNode","advanceActivatedRoute","nextSnapshot","shallowEqualArrays","equalParamsAndUrlSegments","equalUrlParams","equalSegments","createNode","routeReuseStrategy","prevState","shouldReuseRoute","createOrReuseChildren","shouldAttach","detachedRouteHandle","retrieve","createActivatedRoute","NAVIGATION_CANCELING_ERROR","redirectingNavigationError","urlSerializer","navigationBehaviorOptions","navigationCancelingError","cancellationCode","isRedirectingNavigationCancelingError$1","isNavigationCancelingError$1","OutletContext","ChildrenOutletContexts","attachRef","contexts","onChildOutletCreated","childName","getOrCreateContext","onChildOutletDestroyed","onOutletDeactivated","onOutletReAttached","NG_DEV_MODE$7","RouterOutlet","parentContexts","changeDetector","_activatedRoute","activateEvents","deactivateEvents","attachEvents","detachEvents","activateWith","isActivated","activatedRoute","activatedRouteData","cmp","resolverOrInjector","childContexts","OutletInjector","isComponentFactoryResolver","ɵEmptyOutletComponent","getOrCreateRouteInjectorIfNeeded","currentInjector","standardizeConfig","getOutlet","sortByMatchingOutlets","sortedConfig","getClosestRouteInjector","_loadedInjector","ActivateRoutes","futureState","currState","forwardEvent","futureRoot","currRoot","deactivateChildRoutes","activateChildRoutes","futureNode","currNode","futureChild","childOutletName","deactivateRoutes","deactivateRouteAndItsChildren","future","shouldDetach","detachAndStoreRouteSubtree","deactivateRouteAndOutlet","activateRoutes","stored","cmpFactoryResolver","CanActivate","CanDeactivate","getAllRouteGuards","getChildRouteGuards","getTokenOrFunctionIdentity","tokenOrFunction","ɵisInjectable","futurePath","canDeactivateChecks","canActivateChecks","prevChildren","getRouteGuards","shouldRun","shouldRunGuardsAndResolvers","runGuardsAndResolvers","isEmptyError","INITIAL_VALUE","prioritizedGuardValue","redirectIfUrlTree","noMatch$1","consumedSegments","remainingSegments","positionalParamSegments","matchWithChecks","runCanMatchGuards","canMatch","canMatchObservables","injectionToken","guard","isCanMatch","slicedSegments","relativeLinkResolution","containsEmptyPathMatchesWithNamedOutlets","emptyPathMatch","createChildrenForEmptyPaths","primarySegment","_sourceSegment","_segmentIndexShift","containsEmptyPathMatches","addEmptyPathsToChildrenIfNeeded","isImmediateMatch","rawSegment","noLeftoversInUrl","NG_DEV_MODE$6","NoMatch$1","AbsoluteRedirect","absoluteRedirect","newTree","ApplyRedirects","configLoader","allowRedirects","splitGroup","rootSegmentGroup","expandSegmentGroup","noMatchError","expandChildren","expandSegment","childOutlets","sortedRoutes","expandedChild","last$1","expandSegmentAgainstRoute","matchSegmentAgainstRoute","expandSegmentAgainstRouteUsingRedirect","expandWildCardWithParamsAgainstRouteUsingRedirect","expandRegularSegmentAgainstRouteUsingRedirect","applyRedirectCommands","lineralizeSegments","newSegments","rawSegmentGroup","_loadedRoutes","cfg","getChildConfig","routerConfig","childInjector","childConfig","splitSegmentGroup","matchedOnOutlet","runCanLoadGuards","canLoadObservables","isCanLoad","shouldLoadResult","canLoadFails","applyRedirectCreateUrlTree","createSegmentGroup","createQueryParams","redirectToParams","actualParams","updatedSegments","createSegments","redirectToSegments","actualSegments","findPosParam","findOrReturn","redirectToUrlSegment","NoMatch","Recognizer","rootComponentType","recognize","processSegmentGroup","routeState","inheritParamsAndData","routeNode","processSegment","outletChildren","takeWhile","inclusive","mergedChildren","mergeEmptyPathMatches","sortActivatedRouteSnapshots","localeCompare","processSegmentAgainstRoute","matchResult","pathIndexShift","getPathIndexShift","_loadedComponent","getSourceSegmentGroup","getResolve","hasEmptyPathConfig","mergedNodes","duplicateEmptyPathNode","resultNode","mergedNode","hasStaticTitle","switchTap","nextResult","TitleStrategy","buildTitle","pageTitle","getResolvedTitleForRoute","DefaultTitleStrategy","updateTitle","RouteReuseStrategy","DefaultRouteReuseStrategy","BaseRouteReuseStrategy","detachedTree","ROUTER_CONFIGURATION","ROUTES","RouterConfigLoader","componentLoaders","childrenLoaders","onLoadStartListener","loadRunner","onLoadEndListener","loadModuleFactoryOrRoutes","factoryOrRoutes","rawRoutes","requireStandaloneComponents","NG_DEV_MODE$3","UrlHandlingStrategy","DefaultUrlHandlingStrategy","shouldProcessUrl","extract","newUrlPart","wholeUrl","defaultMalformedUriErrorHandler","exactMatchOptions","subsetMatchOptions","setupRouter","defaultTitleStrategy","titleStrategy","urlHandlingStrategy","Router","assignExtraOptionsToRouter","malformedUriErrorHandler","onSameUrlNavigation","urlUpdateStrategy","canceledNavigationResolution","rootContexts","lastSuccessfulNavigation","currentNavigation","disposed","navigationId","currentPageId","isNgZoneEnabled","lastSuccessfulId","afterPreactivation","triggerEvent","resetConfig","currentUrlTree","createEmptyUrlTree","rawUrlTree","browserUrlTree","routerState","targetPageId","currentRawUrl","extractedUrl","rawUrl","extras","targetSnapshot","currentRouterState","targetRouterState","guards","guardsResult","navigations","setupNavigations","processNavigations","browserPageId","ɵrouterPageId","eventsSubject","overallTransitionState","completed","previousNavigation","urlTransition","isBrowserTriggeredNavigation","serializeUrl","applyRedirects","applyRedirects$1","finalUrl","recognize$1","newObservableError","skipLocationChange","setBrowserUrl","routesRecognized","navStart","replaceUrl","guardsStart","checkGuards","runCanDeactivateChecks","futureRSS","currRSS","runCanDeactivate","currARS","canDeactivate","canDeactivateObservables","closestInjector","isCanDeactivate","runCanActivateChecks","fireChildActivationStart","fireActivationStart","runCanActivateChild","futureARS","canActivateChildGuardsMapped","getCanActivateChild","guardsMapped","isCanActivateChild","runCanActivate","canActivateObservables","isCanActivate","guardsEnd","restoreHistory","cancelNavigationTransition","resolveStart","dataResolved","resolveData","canActivateChecksResolved","runResolve","resolveNode","getDataKeys","getResolver","resolvedData","resolveEnd","loadComponents","loaders","loadedComponent","createRouterState","navCancel","mergedTree","scheduleNavigation","navError","resetRootComponentType","setTransition","initialNavigation","setUpLocationChangeListener","navigateByUrl","locationSubscription","stateCopy","getCurrentNavigation","relativeTo","queryParamsHandling","preserveFragment","removeEmptyProps","validateCommands","matchOptions","priorPromise","generateNgRouterState","restoringFromCaughtError","targetPagePosition","resetState","resetUrlToCurrentUrlTree","routerPageId","RouterLink","tabIndexAttribute","_preserveFragment","_skipLocationChange","_replaceUrl","onChanges","setTabIndexIfNotOnNativeEl","newTabIndex","RouterLinkWithHref","updateTargetUrlAndHref","RouterLinkActive","linkWithHref","routerLinkActiveOptions","isActiveChange","routerEventsSubscription","links","linksWithHrefs","subscribeToEachLinkOnChanges","linkInputChangesSubscription","allLinkChanges","isLinkActive","routerLinkActive","hasActiveLinks","ariaCurrentWhenActive","isActiveMatchOptions","isActiveCheckFn","PreloadingStrategy","RouterPreloader","preloadingStrategy","setUpPreloading","processRoutes","injectorForCurrentRoute","injectorForChildren","preloadConfig","loadedChildren$","recursiveLoadChildren$","loadComponent$","ROUTER_SCROLLER","RouterScroller","viewportScroller","lastId","lastSource","restoredId","scrollPositionRestoration","anchorScrolling","createScrollEvents","scrollEventsSubscription","consumeScrollEvents","scheduleScrollEvent","routerFeature","ɵkind","provideRoutes","getBootstrapListener","bootstrappedComponentRef","bootstrapDone","BOOTSTRAP_DONE","INITIAL_NAVIGATION","ROUTER_PRELOADER","withPreloading","ROUTER_FORROOT_GUARD","ROUTER_PROVIDERS","rootRoute","routerNgProbeToken","provideForRootGuard","useHash","scrollOffset","provideInitialNavigation","ROUTER_INITIALIZER","locationInitialized","initNavigation","afterNextNavigation","VgBufferingComponent","API","checkInterval","currentPlayPos","lastPlayPos","isBuffering","isPlayerReady","playerReadyEvent","vgFor","bufferDetected","onUpdateBuffer","VgControlsComponent","hidden","isAdsPlaying","hideControls","vgAutohide","vgAutohideTime","mouseMove$","videogularElement","touchStart$","mouseClick$","onPlay","onPause","startAds","onStartAds","endAds","onEndAds","hideAsync","VgStates","VgVolumeComponent","isDragging","ariaValue","getVolume","setVolume","calculateVolume","onMouseDown","mouseDownPosX","onDrag","onStopDrag","arrowAdjustVolume","mousePosX","recObj","volumeBarRef","vol","volume","_c1","VgUtcPipe","mm","VgTimeDisplayComponent","vgProperty","vgFormat","isLive","VgScrubBarComponent","vgControlsHiddenState","hideScrubBar","vgSlider","isSeeking","wasPlaying","isHidden","onHideScrubBar","seekStart","canPlay","seekMove","percentage","seekTime","seekEnd","getTouchOffset","onMouseDownScrubBar","offsetX","onMouseMoveScrubBar","onMouseUpScrubBar","onTouchStartScrubBar","_$event","onTouchMoveScrubBar","onTouchCancelScrubBar","onTouchEndScrubBar","getPercentage","VgMuteComponent","currentVolume","changeMuteState","onKeyDown","VgFullscreenComponent","isFullscreen","onChangeFullscreen","fsState","changeFullscreenState","VgApiService","toggleFullscreen","VgScrubBarBufferingTimeComponent","getBufferTime","bufferTime","buffered","VgScrubBarCurrentTimeComponent","VG_ENDED","VG_PAUSED","VG_PLAYING","VG_LOADING","getDefaultMedia","getMasterMedia","master","vgMaster","isMasterDefined","$$getAllProperties","$$setAllProperties","playbackRate","canPlayThrough","isMetadataLoaded","isWaiting","isCompleted","isMaster","textTracks","byPercent","$$seek","addTextTrack","$$addTextTrack","registerElement","registerMedia","unregisterMedia","VgControlsHiddenService","isHiddenSubject","VgUtilsService","orientation","isIpadOS","VgFullscreenApiService","nativeFullscreen","APIs","w3","exit","newWebkit","oldWebkit","moz","ios","browser","isiOSDevice","isAvailable","fsElemDispatcher","fsChangeSubscription","onFullscreenChange","enterElementInFullScreen","VgEvents","VG_ABORT","VG_CAN_PLAY","VG_CAN_PLAY_THROUGH","VG_DURATION_CHANGE","VG_EMPTIED","VG_ENCRYPTED","VG_ERROR","VG_LOADED_DATA","VG_LOADED_METADATA","VG_LOAD_START","VG_PAUSE","VG_PLAY","VG_PROGRESS","VG_RATE_CHANGE","VG_SEEK","VG_SEEKED","VG_SEEKING","VG_STALLED","VG_SUSPEND","VG_TIME_UPDATE","VG_VOLUME_CHANGE","VG_WAITING","VG_LOAD","VG_ENTER","VG_EXIT","VG_START_ADS","VG_END_ADS","VgMediaDirective","isBufferDetected","playAtferSync","vgMedia","durationChange","encrypted","ended","loadStart","playing","rateChange","seeked","seeking","timeUpdate","volumeChange","domObs","mutations","mutationObs","onMutation","canPlayObs","onCanPlay","canPlayThroughObs","onCanPlayThrough","loadedMetadataObs","onLoadMetadata","waitingObs","onWait","progressObs","endedObs","playingObs","onStartPlaying","playObs","pauseObs","timeUpdateObs","onTimeUpdate","volumeChangeObs","onVolumeChange","errorObs","prepareSync","canPlayAll","canPlayAllSubscription","syncSubscription","startSync","mut","loadMedia","stopBufferCheck","playPromise","specifiedDuration","startBufferCheck","bufferCheck","checkBufferSubscription","newTrack","_f","_g","_j","_k","_m","_p","_q","VgPlayerComponent","controlsHidden","isNativeFullscreen","areControlsHidden","onMediaReady","onHideControls","getZIndex","services","VgOverlayPlayComponent","vgSkipIfControlsHidden","vgSkipIfControlsHiddenDelay","areControlsHiddenChangeTime","TokenService","getTokenCookieName","tokenCookieName","getRefreshTokenCookieName","refreshTokenCookieName","setRefreshToken","featureName","getSource","LogService","logObject","fatal","AbpSessionService","multiTenancySide","getInt","UtilsService","deleteCookie","_messageService","_logService","defaultError","defaultError401","defaultError403","defaultError404","logError","showError","handleNonAbpErrorResponse","handleAbpResponse","ajaxResponse","newResponse","getAbpAjaxResponseOrNull","responseObj","__abp","handleResponse","configuration","_utilsService","isRefreshing","refreshTokenSubject","modifiedRequest","normalizeRequestHeaders","handleErrorResponse","handleSuccessResponse","tryGetRefreshTokenService","authResult","modifiedHeaders","addXRequestedWithHeader","addAuthorizationHeaders","addAspNetCoreCultureHeader","addAcceptLanguageHeader","addTenantIdHeader","cookieTenantIdValue","authorizationHeaders","itemExists","json","responseBody","modifiedResponse","errorBody","errorResponse","collectionCompare","compareArrays","compareObjects","keys1","compareNativeSubtypes","assocIndexOf","eq","ListCache","listCacheClear","__data__","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","getNative","nativeCreate","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","_getMapData","getMapData","isKeyable","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","LARGE_ARRAY_SIZE","arrayFilter","resIndex","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isBuffer","isTypedArray","skipIndexes","baseTimes","isIndex","arrayMap","createBaseEach","fromRight","baseForOwn","baseFor","spreadableSymbol","isFlattenable","_baseFlatten","isStrict","createBaseFor","keysFunc","baseGet","castPath","toKey","nativeObjectToString","symToStringTag","baseGetTag","getRawTag","isOwn","unmasked","objectToString","SetCache","setCacheAdd","setCacheHas","_arraySome","arraySome","_cacheHas","cacheHas","_equalArrays","equalArrays","bitmask","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","arrValue","othValue","compared","othIndex","mapToArray","_setToArray","setToArray","symbolProto","symbolValueOf","nativeGetSymbols","stubArray","getAllKeys","baseGetAllKeys","symbolsFunc","getSymbols","DataView","_Set","_WeakMap","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ctorString","argsTag","arrayTag","objectTag","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalByTag","byteLength","byteOffset","boolTag","dateTag","regexpTag","convert","stacked","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","objProps","objLength","objStacked","skipCtor","objValue","objCtor","othCtor","baseIsEqual","isObjectLike","isStrictComparable","_matchesStrictComparable","matchesStrictComparable","srcValue","_baseMatches","baseMatches","matchData","getMatchData","baseIsMatch","noCustomizer","COMPARE_PARTIAL_FLAG","_baseHasIn","baseHasIn","lodash_es_hasIn","hasIn","hasPath","hasFunc","isLength","baseMatchesProperty","isKey","lodash_es_property","baseProperty","basePropertyDeep","_baseIteratee","baseMap","baseAssignValue","assignMergeValue","freeExports","freeModule","Buffer","allocUnsafe","_cloneTypedArray","cloneTypedArray","typedArray","isDeep","cloneArrayBuffer","arrayBuffer","objectCreate","_getPrototype","getPrototype","overArg","funcToString","objectCtorString","safeGet","assignValue","baseKeysIn","nativeKeysIn","isProto","isPrototype","lodash_es_keysIn","keysIn","lodash_es_toPlainObject","toPlainObject","copyObject","_baseMergeDeep","baseMergeDeep","mergeFunc","isCommon","isTyped","isArrayLikeObject","cloneBuffer","isPlainObject","initCloneObject","baseCreate","_baseMerge","nativeMax","lodash_es_constant","constant","nativeNow","shortOut","lastCalled","stamp","_baseRest","baseRest","setToString","overRest","otherArgs","baseUnary","memoize","memoized","Cache","rePropName","reEscapeChar","memoizeCapped","quote","subString","stringToPath","assigner","isIterateeCall","freeGlobal","coreJsData","maskSrcKey","reIsHostCtor","reIsNative","baseIsNative","isMasked","_getNative","reIsUint","reIsDeepProp","reIsPlainProp","freeSelf","baseFilter","createFind","findIndexFunc","fromIndex","reWhitespace","reTrimStart","baseTrim","trimmedEndIndex","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","lodash_es_toFinite","toFinite","isBinary","remainder","baseFindIndex","arrayEach","castFunction","baseIsArguments","stubFalse","typedArrayTags","freeProcess","nodeUtil","nodeIsTypedArray","baseIsTypedArray","baseKeys","symbolToString","baseToString","lodash_es_toString","LuxonError","InvalidDateTimeError","toMessage","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","InvalidArgumentError","ZoneIsAbstractError","DATE_SHORT","DATE_MED","DATE_MED_WITH_WEEKDAY","weekday","DATE_FULL","DATE_HUGE","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","ianaName","isUniversal","offsetName","formatOffset","equals","otherZone","singleton","SystemZone","Intl","resolvedOptions","timeZone","parseZoneInfo","dtfCache","typeToPos","era","ianaZoneCache","IANAZone","isValidZone","zoneName","dtf","makeDTF","hour12","adOrBc","formatToParts","partsOffset","filled","hackyOffset","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","asTS","over","objToLocalTS","millisecond","intlLFCache","intlDTCache","getCachedDTF","locString","intlNumCache","intlRelCache","sysLocaleCache","listStuff","loc","defaultOK","englishFn","intlFn","listingMode","PolyNumberFormatter","intl","forceSimple","padTo","otherOpts","intlOpts","__spreadValues","useGrouping","minimumIntegerDigits","inf","getCachedINF","NumberFormat","roundTo","PolyDateFormatter","originalZone","gmtOffset","offsetZ","__spreadProps","PolyRelFormatter","isEnglish","hasRelative","getCachedRTF","cacheKeyOpts","RelativeTimeFormat","formatRelativeTime","numeric","narrow","units","years","quarters","weeks","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","English","Locale","numberingSystem","outputCalendar","defaultToEN","specifiedLocale","localeR","systemLocale","numbering","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","parseLocaleString","localeStr","xIndex","uIndex","selectedStr","smaller","calendar","intlConfigString","weekdaysCache","monthsCache","meridiemCache","eraCache","fastNumbersCached","fastNumbers","supportsFastNumbers","alts","redefaultToEN","redefaultToSystem","formatStr","mapMonths","weekdays","mapWeekdays","meridiems","eras","matching","dtFormatter","numberFormatter","relFormatter","listFormatter","getCachedLF","ListFormat","FixedOffsetZone","utcInstance","signedOffset","InvalidZone","normalizeZone","defaultZone","lowered","throwOnInvalid","defaultLocale","defaultNumberingSystem","defaultOutputCalendar","twoDigitCutoffYear","cutoffYear","bestBy","by","best","pair","integerBetween","thing","padded","parseInteger","parseFloating","parseMillis","towardZero","factor","__pow","isLeapYear","daysInYear","daysInMonth","modMonth","floorMod","UTC","weeksInWeekYear","weekYear","p2","untruncateYear","offsetFormat","modified","offHourStr","offMinuteStr","offHour","offMin","asNumber","numericValue","normalizeObject","normalized","RangeError","timeObject","pick","monthsLong","monthsShort","monthsNarrow","weekdaysLong","weekdaysShort","weekdaysNarrow","erasLong","erasShort","erasNarrow","stringifyTokens","splits","tokenToString","literal","macroTokenToFormatOpts","Formats","DD","DDD","DDDD","ttt","tttt","TT","TTT","TTTT","ff","fff","ffff","FFF","FFFF","Formatter","fmt","currentFull","bracketed","formatOpts","systemLoc","formatWithSystemDefault","formatDateTimeParts","formatInterval","interval","formatRange","formatDateTimeFromString","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","monthForDateTime","weekdayForDateTime","maybeMacro","eraForDateTime","parseFormat","meridiemForDateTime","weekNumber","ordinal","quarter","formatDurationFromString","dur","tokenToField","realTokens","lildur","mapped","shiftTo","Invalid","explanation","ianaRegex","combineRegexes","regexes","combineExtractors","extractors","mergedVals","mergedZone","extractor","simpleParse","ret","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","int","extractISOTime","extractISOOffset","local","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","force","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","rfc2822","extractRFC2822","obsOffset","milOffset","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOYmd","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","extractISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","conf","conversionAccuracy","matrix","Duration","fromMap","fromUnit","toMap","toUnit","conv","added","antiTrunc","accurate","isLuxonDuration","normalizeUnit","durationLike","fromMillis","isDuration","parseISODuration","parseISOTimeOnly","week","fmtOpts","toHuman","unitDisplay","listStyle","toISOTime","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","fromDurationLike","negate","mapUnits","reconfigure","vals","normalizeValues","rescale","removeZeroes","newVals","shiftToAll","built","accumulated","lastUnit","own","ak","negated","invalidReason","invalidExplanation","Interval","isLuxonInterval","builtStart","friendlyDateTime","builtEnd","validateError","validateStartEnd","fromDateTimes","startIsValid","endIsValid","toDuration","hasSame","isAfter","dateTime","isBefore","splitAt","dateTimes","sorted","splitBy","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","intervals","final","sofar","currentCount","ends","difference","xor","toLocaleString","toISODate","dateFormat","mapEndpoints","Info","locObj","relative","dayDiff","earlier","later","utcDayStart","keepLocalTime","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","digitRegex","intUnit","deser","parseDigits","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","strings","escapeToken","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","dummyDateTimeCache","expandMacroTokens","maybeExpandMacroToken","formatOptsToTokens","explainFromTokens","unitForToken","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","disqualifyingUnit","regexString","buildRegex","rawMatches","specificOffset","dateTimeFromMatches","toField","getDummyDateTime","tokenForPart","isSpace","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","getUTCDay","computeOrdinal","uncomputeOrdinal","month0","gregorianToWeek","gregObj","weekToGregorian","weekData","weekdayOfJan4","yearInDays","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","hasInvalidGregorianData","validYear","validMonth","validDay","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","MAX_DATE","unsupportedZone","possiblyCachedWeekData","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","objToTS","adjustTime","oPre","millisToAdd","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","longFormat","includeOffset","extendedZone","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","quickDT","tsNow","offsetProvis","diffRelative","calendary","differ","lastOpts","argList","isLuxonDateTime","zoneToUse","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","higherOrderInvalid","hasInvalidWeekData","validWeek","validWeekday","hasInvalidOrdinalData","validOrdinal","gregorian","tsFinal","offsetFinal","parseISODate","parseRFC2822Date","preprocessRFC2822","parseHTTPDate","localeToUse","parseFromTokens","fromFormat","parseSQL","localeOpts","tokenList","monthShort","monthLong","weekdayShort","weekdayLong","offsetNameShort","offsetNameLong","isInDST","isInLeapYear","resolvedLocaleOptions","toLocal","keepCalendarTime","newTS","offsetGuess","asObj","settingWeekStuff","mixed","normalizedUnit","toLocaleParts","ext","toISOWeekDate","toRFC2822","toHTTP","toSQLDate","toSQLTime","includeZone","includeOffsetSpace","toSQL","toSeconds","toUnixInteger","toBSON","includeConfig","otherDateTime","durOpts","maybeArray","otherIsLater","diffed","highWater","lowestOrder","highOrderDiffs","remainingMillis","lowerOrderUnits","diffNow","until","inputMs","adjustedToZone","toRelativeCalendar","isDateTime","fromFormatExplain","dateTimeish","absFloor","isDateValid","hasOwnProp","argumentForCoercion","coercedNumber","aliases","_mapUnits","addUnitAlias","shorthand","lowerCase","_unit","normalizeUnits","zeroFill","targetLength","forceSign","absNumber","formatFunctions","formatTokenFunctions","formattingTokens","addFormatToken","removeFormattingTokens","createUTCDate","isUTC","getFirstDayOfMonth","isFirstDayOfWeek","firstDayOfWeek","isSameMonth","date1","date2","isSameYear","isSameDay$1","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchShortOffset","matchTimestamp","matchWord","addRegexToken","strictRegex","getParseRegexForToken","_strict","unescapeFormat","regexEscape","p3","p4","addParseToken","_token","addWeekParseToken","_w","addTimeToArrayFromToken","priorities","addUnitPriority","priority","getParsingFlags","_pf","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","weekdayMismatch","parseTwoDigitYear","defaultTimeUnit","shiftDate","setFullDate","getNum","setMonth","dayOfMonth","setUTCMonth","setDate","setUTCDate","cloneDate","_date","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","setLocaleDayOfWeek","getLocaleDayOfWeek","setISODayOfWeek","parseIsoWeekday","getLocale","weekdaysParse","setDayOfWeek","getDayOfWeek","subtract","addSubtract","createDuration","getDayOfYear","firstWeekOffset","dow","doy","fwd","weekOfYear","weekOffset","resWeek","resYear","weeksInYear","weekOffsetNext","MONTHS_IN_FORMAT","defaultLocaleMonths","defaultLocaleMonthsShort","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultLongDateFormat","LTS","LT","LL","LLL","LLLL","defaultMonthsShortRegex","defaultMonthsRegex","confKey","_calendar","sameElse","longDateFormat","_longDateFormat","formatUpper","invalidDate","_invalidDate","_ordinal","preparse","postformat","relativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","_months","isFormat","_monthsShort","monthsParse","monthName","strict","_monthsParseExact","handleMonthStrictParse","_monthsParse","_longMonthsParse","_shortMonthsParse","_shortMonths","monthsRegex","computeMonthsParse","_monthsStrictRegex","_monthsRegex","monthsShortRegex","_monthsShortStrictRegex","_monthsShortRegex","_week","_weekdays","weekdaysMin","_weekdaysMin","_weekdaysShort","weekdayName","_weekdaysParseExact","handleWeekStrictParse","_weekdaysParse","_minWeekdaysParse","_shortWeekdaysParse","_fullWeekdaysParse","weekdaysRegex","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","weekdaysShortRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","weekdaysMinRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","isPM","isLower","formatLongDate","llc","mom","shortPieces","longPieces","mixedPieces","cmpLenRev","minPieces","minp","shortp","longp","baseConfig","sameDay","nextDay","nextWeek","lastDay","lastWeek","dayOfMonthOrdinalParse","past","MM","yy","meridiemParse","array1","array2","dontConvert","lengthDiff","diffs","addWeekYearFormatToken","_getWeekYearFormatCb","getWeekYear","_getISOWeekYearFormatCb","getISOWeekYear","addOffsetFormatToken","getUTCOffset","_isUTC","getDateOffset","chunkOffset","localeFamilies","globalLocale","loadLocale","getSetGlobalLocale","_abbr","parentConfig","abbr","mergeConfigs","childProp","parentProp","setDefaultLocale","initWeek","getWeek","getISOWeek","initWeekYear","initYear","initTimezone","initTimestamp","unix","initSecond","initQuarter","getQuarter","initOffset","_useUTC","_tzm","offsetFromString","initMonth","initMinute","initMillisecond","parseMs","initHour","hFormat","lowercase","matchMeridiem","_meridiemParse","kFormat","kInput","_isPm","_meridiem","bigHour","pos1","pos2","initDayOfYear","_dayOfYear","initDayOfWeek","getISODayOfWeek","invalidWeekday","initDayOfMonth","_dayOfMonthOrdinalParse","_ordinalParse","chooseLocale","ordering","orderingHash","mem","absCeil","daysToMonths","monthsToDays","thresholds","substituteTimeAgo","_isValid","isDurationValid","unitHasDecimal","_milliseconds","_days","bubble","monthsFromDays","humanize","withSuffix","localeData","posNegDuration","localeKey","mathAbs","_units","parsedParts","isNowValid","createInvalid","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","UT","configFromISO","allowTime","timeFormat","tzFormat","configFromStringAndFormat","configFromRFC2822","markInvalid","parsedArray","extractFromRFC2822Strings","checkWeekday","parsedInput","calculateOffset","militaryOffset","numOffset","hm","formatMoment","_format","expandFormat","makeFormatFunction","formatArr","localFormattingTokens","replaceLongDateFormatTokens","configFromArray","yearToUse","currentDate","currentDateArray","nowValue","dayOfYearFromWeekInfo","weekdayOverflow","GG","curWeek","_overflowWeeks","_overflowWeekday","dayOfYearFromWeeks","dayOfYear","resDayOfYear","_overflowDayOfYear","_nextDay","expectedWeekday","checkOverflow","totalParsedInputLength","inputLength","skipped","meridiemFixWrap","_hour","meridiemHour","isPm","createFromConfig","prepareConfig","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromInput","configFromString","_arr","configFromObject","normalizeObjectUnits","inputObject","normalizedInput","parseDate","createLocalOrUTC","_input","isObjectEmpty","utcAsLocal","absRound","isDisabledDay","daysDisabled","isSame","aspNetRegex","isoRegex","convertDuration","parseIso","diffRes","momentsDifference","_other","cloneWithOffset","offsetDiff","setTime","positiveMomentsDifference","inp","isAdding","parseWeekday","_num","_weekDay","pluralForm","plurals","pluralize","months$1","monthsShort$6","thBeLocale","monthsParseExact","weekdaysParseExact","processHoursFunction","ContentRef","ComponentLoader","_applicationRef","_posService","onBeforeShow","onBeforeHide","onHidden","_isHiding","containerDefaultSelector","_listenOpts","_globalListener","compType","_componentFactory","attachment","_subscribePositioning","_innerComponent","_contentRef","_getContentRef","selectedElement","_registerOutsideClick","deletePositionElement","componentEl","_removeGlobalListener","_unsubscribePositioning","_unregisterListenersFn","listenOpts","triggers","outsideClick","outsideEsc","registerHide","listenToTriggersV2","attachInline","vRef","_inlineViewRef","registerOutsideClick","registerEscClick","getInnerComponent","_zoneSubscription","appendToBody","calcPosition","contentCmptFactory","modalContentInjector","ComponentLoaderFactory","createLoader","queueScheduler","QueueScheduler","QueueAction","MiniState","_initialState","actionsDispatcher$","reducer","MiniStore","_dispatcher","_reducer","state$","pathOrMapFn","dispatch","_r19","ctx_r18","_r21","ctx_r20","_r23","ctx_r22","ctx_r24","ctx_r25","ctx_r26","_r28","ctx_r27","ctx_r29","ctx_r30","ctx_r31","_r33","ctx_r32","_r35","ctx_r34","_r37","ctx_r36","isValidLimit","parseHours","parseMinutes","parseSeconds","parseTime","isHourInputValid","isMinuteInputValid","isSecondInputValid","isInputValid","canChangeValue","readonlyInput","mousewheel","arrowkeys","getControlsValue","hourStep","minuteStep","secondsStep","showSpinners","showMeridian","showSeconds","meridians","TimepickerConfig","allowEmptyTime","showMinutes","hoursPlaceholder","minutesPlaceholder","secondsPlaceholder","ariaLabelHours","ariaLabelMinutes","ariaLabelSeconds","TimepickerActions","WRITE_VALUE","payload","changeHours","CHANGE_HOURS","changeMinutes","CHANGE_MINUTES","changeSeconds","CHANGE_SECONDS","SET_TIME_UNIT","updateControls","UPDATE_CONTROLS","canIncrementHours","canIncrementMinutes","canIncrementSeconds","canDecrementHours","canDecrementMinutes","canDecrementSeconds","canToggleMeridian","timepickerReducer","canChangeHours","_newTime","canChangeMinutes","canChangeSeconds","_newControlsState","timepickerControls","_newHour","hoursPerDay","_newMinutes","_newSeconds","hoursPerDayHalf","_newState","TimepickerStore","TIMEPICKER_CONTROL_VALUE_ACCESSOR","TimepickerComponent","_store","_timepickerActions","meridianChange","meridian","invalidHours","invalidMinutes","invalidSeconds","labelHours","labelMinutes","labelSeconds","timepickerSub","_renderTime","controlsState","isTimepickerInputValid","isOneOfDatesIsEmpty","isSpinnersVisible","resetValidation","prevDef","wheelSign","updateHours","_updateTime","updateMinutes","updateSeconds","isInputLimitValid","isOneOfDatesEmpty","toggleMeridian","_hours","TimepickerModule","_r3","ctx_r2","_r2","ctx_r1","_r13","ctx_r11","ctx_r9","_r17","ctx_r15","ctx_r10","_r29","ctx_r35","ctx_r38","ctx_r40","_r45","ctx_r43","_r5","ctx_r4","ctx_r6","ctx_r7","month_r3","year_r3","_r11","ctx_r12","ctx_r13","ctx_r14","_r22","ctx_r21","ctx_r28","_r36","ctx_r33","_r38","ctx_r37","_r40","ctx_r39","_r42","ctx_r41","adaptivePosition","useUtc","isAnimated","returnFocusToInput","displayMonths","showWeekNumbers","dateInputFormat","rangeSeparator","rangeInputFormat","monthTitle","yearTitle","dayLabel","monthLabel","yearLabel","weekNumbers","showTodayButton","showClearButton","todayPosition","clearPosition","todayButtonLabel","clearButtonLabel","customRangeButtonLabel","allowedPositions","DATEPICKER_ANIMATION_TIMING","datepickerAnimation","BsDatepickerAbstractComponent","customRanges","chosenRange","_daysCalendarSub","selectedTimeSub","_effects","setMinDate","setMaxDate","setDaysDisabled","datesDisabled","setDatesDisabled","datesEnabled","setDatesEnabled","setDisabled","dateCustomClasses","setDateCustomClasses","dateTooltipTexts","setDateTooltipTexts","daysCalendar$","_daysCalendar$","multipleCalendars","setViewMode","navigateTo","dayHoverHandler","weekHoverHandler","monthHoverHandler","yearHoverHandler","timeSelectHandler","daySelectHandler","monthSelectHandler","yearSelectHandler","setRangeOnCalendar","setToday","clearDate","_stopPropagation","BsDatepickerActions","calculate","CALCULATE","FORMAT","FLAG","SELECT","selectTime","SELECT_TIME","changeViewMode","CHANGE_VIEWMODE","NAVIGATE_TO","navigateStep","NAVIGATE_OFFSET","SET_OPTIONS","selectRange","SELECT_RANGE","hoverDay","HOVER","isHovered","cell","SET_MIN_DATE","SET_MAX_DATE","SET_DAYSDISABLED","SET_DATESDISABLED","SET_DATESENABLED","SET_IS_DISABLED","SET_DATE_CUSTOM_CLASSES","SET_DATE_TOOLTIP_TEXTS","SET_LOCALE","_defaultLocale","_localeChange","localeChange","currentLocale","BsDatepickerEffects","_actions","_localeService","_subs","_bsDatepickerStore","setRangeValue","setBindings","selectedTime","times","flaggedMonths","monthsCalendar","flaggedMonthsCalendar","yearsCalendar","yearsCalendarFlagged","viewMode","options$","latest","setEventHandlers","_cell","isOtherMonth","registerDatepickerSideEffects","monthsModel","monthModel","formattedMonths","selectedDate","selectedRange","yearsCalendarModel","hoveredDate","_initialView","initialDatepickerState","monthViewOptions","isMonthDisabled","minBound","maxBound","isYearDisabled","isDisabledDate","dateDisabled","isEnabledDate","enabledDate","getYearsCalendarInitialDate","calendarIndex","checkRangesWithMaxDate","compareDateWithMaxDateHelper","checkBsValue","setCurrentTimeOnDateSelect","setCurrentTimeHelper","setDateRangesCurrentTimeOnDateSelect","createMatrix","prevValue","initialDate","calcDaysCalendar","startingDate","firstDay","getStartingDayOfCalendar","calculateDateOffset","startingDayOffset","_startingDayOffset","weekDay","daysMatrix","getWeekNumbers","getShiftedWeekdays","canSwitchMode","minMode","shift$1","formatMonthsCalendar","viewDate","formatOptions","hideRightArrow","hideLeftArrow","disableRightArrow","disableLeftArrow","initialYearShift","yearsPerCalendar","formatYearsCalendar","previousInitialDate","calculateInitialDate","yearsMatrix","formatYearRangeTitle","copyTime","sourceDate","bsDatepickerReducer","calculateReducer","displayOneMonthRange","isDisplayOneMonth","showPreviousMonth","monthIndex","preventChangeToNextMonth","viewMonth","getFormatOptions","formatReducer","formatDaysCalendar","daysCalendar","weekIndex","dayIndex","flagReducer","formattedMonth","flagDaysCalendar","isSameDay","isSelectionStart","isSelectionEnd","isInRange","isDateInRange","isToday","customClasses","dcc","tooltipText","newDay","flagMonthsCalendar","monthCalendar","rowIndex","hoveredMonth","newMonth","yearIndex","flagYearsCalendar","hoveredYear","navigateOffsetReducer","shiftViewDate","middleDate","newState","_time","getViewDate","_viewDate","dte","BsDatepickerStore","BsCustomDatesViewComponent","onSelect","selectFromRanges","BsNavigationDirection","UP","DOWN","BsCurrentDateViewComponent","BsTimepickerViewComponent","ampm","BsCalendarLayoutComponent","BsDatepickerDayDecoratorComponent","_elRef","customTodayClass","BsDatepickerNavigationViewComponent","onNavigate","onViewMode","navTo","BsDaysCalendarViewComponent","onHover","onHoverWeek","isiOS","isShowTooltip","selectDay","selectWeek","selectWeekDateRange","selectFromOtherMonth","selectedDay","lastDayOfRange","isWeekHovered","isOtherMonthHovered","dateData","BsMonthCalendarViewComponent","hoverMonth","BsYearsCalendarViewComponent","viewYear","hoverYear","BsDatepickerContainerComponent","_positionService","valueChange","animationState","isRangePicker","event$","isTopPosition","isOtherMonthsActive","showTodayBtn","todayBtnLbl","todayPos","showClearBtn","clearBtnLbl","clearPos","customRangeBtnLbl","startTimepicker","positionServiceEnable","_c3","i7","BsDatepickerDirective","cis","isDestroy$","_dateInputFormat$","_datepicker","isOpen$","_bsValue","bsConfig","initCurrentTime","dateInputFormat$","setConfig","_datepickerRef","initSubscribes","unsubscribeSubscriptions","BsDaterangepickerContainerComponent","_rangeStack","endTimepicker","rangesProcessing","maxDateRange","setMaxDateRangeOnCalendar","currentSelection","maxDateValueInMilliseconds","maxDateRangeInMilliseconds","_c4","BS_DATEPICKER_VALUE_ACCESSOR","BsDatepickerInputDirective","BS_DATEPICKER_VALIDATOR","_picker","_onTouched","_validatorChange","setBsValue","_setInputValue","onKeydownEvent","bsDate","_localeKey","onBlur","BsDaterangepickerDirective","_rangeInputFormat$","rangeInputFormat$","BS_DATERANGEPICKER_VALUE_ACCESSOR","BsDaterangepickerInputDirective","BS_DATERANGEPICKER_VALIDATOR","_isFirstDateValid","_isSecondDateValid","trimmedSeparator","_val","PositioningService","dropdownAnimation","DROPDOWN_ANIMATION_TIMING","BsDropdownState","autoClose","insideClick","stopOnClickPropagation","isOpenChange","isDisabledChange","toggleClick","dropdownMenu","resolveDropdownMenu","BsDropdownContainerComponent","_builder","_factoryDropDownAnimation","isBs3","BsDropdownConfig","BsDropdownDirective","_cis","dropup","_isInlineOpen","_isDisabled","_subscriptions","_isInited","_dropdown","_showInline","isBs4","_inlinedMenu","addBs4Polyfills","playAnimation","_dropup","_placement","removeShowClass","removeDropupStyles","navigationClick","firstActive","allRef","addShowClass","checkRightAlignment","addDropupStyles","isRightAligned","BsDropdownMenuDirective","BsDropdownToggleDirective","_documentClickListener","_escKeyUpListener","hasV8BreakIterator","FocusTrapManager","_focusTrapStack","focusTrap","v8BreakIterator","Platform","_platformId","EDGE","TRIDENT","BLINK","CSS","IOS","FIREFOX","ANDROID","SAFARI","InteractivityChecker","_platform","hasGeometry","isTabbable","frameElement","getFrameElement","getTabIndexValue","tabIndexValue","isPotentiallyTabbableIOS","tabIndex","isFocusable","isPotentiallyFocusable","isHiddenInput","isInputElement","isNativeFormElement","isAnchorWithHref","isAnchorElement","hasValidTabIndex","ignoreVisibility","coerceBooleanProperty","FocusTrap","_checker","deferAnchors","_hasAttached","startAnchorListener","focusLastTabbableElement","endAnchorListener","focusFirstTabbableElement","attachAnchors","_startAnchor","_endAnchor","_toggleAnchorTabIndex","startAnchor","endAnchor","_createAnchor","focusInitialElementWhenReady","_executeOnStable","focusInitialElement","focusFirstTabbableElementWhenReady","focusLastTabbableElementWhenReady","_getRegionBoundary","bound","markers","_getFirstTabbableElement","_getLastTabbableElement","redirectToElement","focusableChild","hasAttached","tabbableChild","toggleAnchors","FocusTrapFactory","deferCaptureElements","FocusTrapDirective","_focusTrapFactory","_previouslyFocusedElement","_autoCapture","autoCapture","_captureFocus","autoCaptureChange","FocusTrapModule","BsModalRef","setClass","ModalOptions","modalConfigDefaults","ignoreBackdropClick","class","animated","closeInterceptor","MODAL_CONFIG_DEFAULT_OVERRIDE","CLASS_NAME","ModalContainerComponent","isModalHiding","clickStartedInContent","bsModalService","getModalsCount","checkScrollbar","setScrollbar","onClickStarted","onClickStop","setDismissReason","onEsc","ModalBackdropComponent","_isAnimated","_isShown","Utils","clf","modalDefaultOption","onHide","isBodyOverflowing","originalBodyPadding","timerHideModal","timerRmBackDrop","isNested","_backdrop","getConfig","dismissReason","hideModal","document$1","showBackdrop","window$1","transitionComplete","resetScrollbar","resetAdjustments","focusOtherModal","callbackRemove","removeBackdrop","otherOpenedModals","getScrollbarWidth","currentId","BsModalService","modalsCount","_backdropLoader","_createLoaders","_showBackdrop","lastDismissReason","_showModal","_hideBackdrop","_hideModal","removeLoaders","isBackdropEnabled","isBackdropInDOM","backdropRef","modalLoader","bsModalRef","modalContainerRef","newClass","copyEvent","indexToRemove","MapPlacementInToRL","PlacementForBs5","getStyleComputedProperty","nextElementSibling","findCommonOffsetParent","element1","element2","DOCUMENT_POSITION_FOLLOWING","createRange","setStart","setEnd","commonAncestorContainer","isOffsetContainer","element1root","getFixedPositionOffsetParent","sideA","sideB","getSize","computedStyle","getWindowSizes","getClientRect","sizes","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","getScroll","upperSide","getBoundaries","boundariesElement","boundaries","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","boundariesNode","getArea","refRect","sortedAreas","area","filteredAreas","allowedPosition","computedPlacement","getBsVer","isBs5","getOuterSizes","getReferenceOffsets","getTargetOffsets","hostOffsets","targetRect","targetOffsets","isHoriz","secondarySide","measurement","secondaryMeasurement","isModifierEnabled","availablePositions","checkPopoverMargin","checkPosition","isNumeric","sideCapitalized","opSide","arrowElementSize","placementVariation","targetMarginSide","targetBorderSide","targetBorderRadius","borderRadius","targetSideArrowOffset","sideValue","flipOrder","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","getOppositeVariation","transformProp","targetStyles","isPlacementHorizontal","shiftVariation","shiftOffsets","positionService","Positioning","positionElements","chainOfModifiers","initData","hostElPosition","placementAuto","positionFixed","modifiedData","getOffsets","updateContainerClass","dataPlacement","checkMargins","update$$","triggerEvent$","positionElement","_getHtmlElement","addPositionElement","elRef","_r6","_r8","tabz_r1","NgTranscludeDirective","ngTransclude","_ngTransclude","TabsetConfig","isKeysAllowed","ariaLabel","TabsetComponent","tabs","classMap","_vertical","_justified","_isKeysAllowed","vertical","setClassMap","justified","addTab","tab","removeTab","reselect","hasAvailableTabs","newActiveIndex","getClosestTabIndex","keyNavActions","removable","lastTab","firstTab","previousTab","nextTab","tabsLength","prevIndex","TabDirective","tabset","selectTab","deselect","_customClass","ariaLabelledby","TabHeadingDirective","headingRef","TooltipConfig","TooltipContainerComponent","_bsVersions","in","fade","TooltipDirective","tooltipId","tooltipChange","tooltipAnimation","tooltipFadeDuration","tooltipStateChanged","_tooltip","htmlContent","tooltip","_appendToBody","_popupClass","_tooltipContext","_tooltipPopupDelay","_tooltipTrigger","setAriaDescribedBy","_ariaDescribedby","_delayTimeoutId","showTooltip","cancelDelayedTooltipShowing","_tooltipCancelShowFn","_delaySubscription","parseTriggers","__decorate","OnChange","__metadata","Trigger","isManual","DEFAULT_ALIASES","hover","trimmedTriggers","parsedTriggers","triggerPair","manualTriggers","_registerHide","useToggle","showFn","unsubscribeFn","BsVerions","guessedVersion","_guessBsVersion","spanEl","checkPadding","__theme","opener","bsVer","currentBsVersion","resVersion","crossorigin","integrity","cdnLink","_messagesHash","_hideMsg","_r10","ctx_r16","ctx_r19","_r27","CropperSettings","maintainAspectRatio","aspectRatio","resetCropOnAspectRatioChange","resizeToWidth","resizeToHeight","cropperMinWidth","cropperMinHeight","cropperMaxHeight","cropperMaxWidth","cropperStaticWidth","cropperStaticHeight","canvasRotation","initialStepSize","roundCropper","onlyScaleDown","imageQuality","autoCrop","containWithinAspectRatio","hideResizeSquares","alignImage","cropperScaledMinWidth","cropperScaledMinHeight","cropperScaledMaxWidth","cropperScaledMaxHeight","stepSize","validateOptions","setOptionsFromChanges","MoveTypes","Drag","Move","Resize","Pinch","percent","totalValue","CropService","crop","sourceImage","loadedImage","cropper","imagePosition","getImagePosition","x1","y2","y1","cropCanvas","fillStyle","fillRect","scale","flipH","flipV","translateH","translateV","getCanvasTranslate","transformedImage","transformed","setTransform","translate","drawImage","cropperPosition","offsetImagePosition","getOffsetImagePosition","resizeRatio","getResizeRatio","resizeCanvas","canvas","width_source","height_source","ratio_w","ratio_h","ratio_w_half","ratio_h_half","getImageData","img2","createImageData","data2","center_y","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","xx_start","yy_start","xx_stop","yy_stop","dy","center_x","w0","xx","dx","pos_x","putImageData","toDataURL","getQuality","translateUnit","getRatio","offsetY","exifTransform","ratioWidth","ratioHeight","ratios","CropperPositionService","resetCropperPosition","sourceImageElement","cropperWidth","cropperHeight","cropperHeightWithAspectRatio","cropperWidthWithAspectRatio","moveStart","diffX","getClientX","diffY","getClientY","maxSize","moveX","moveY","newWidth","newHeight","checkAspectRatio","overflowX1","overflowX2","overflowY1","overflowY2","LoadImageService","autoRotateSupported","supportsAutomaticRotation","Image","testAutoOrientationImageURL","loadImageFile","cropperSettings","loadImage","readAsDataURL","imageBase64","imageType","isValidImageType","loadBase64Image","loadImageFromURL","crossOrigin","originalImage","originalBase64","transformImageBase64","autoRotate","getTransformationsFromExifData","exifRotationOrBase64Image","getExifRotation","base64ToArrayBuffer","binaryString","getUint16","getUint32","little","transformLoadedImage","naturalWidth","naturalHeight","originalSize","transformedSize","getTransformedSize","transformedBase64","loadImageFromBase64","minHeightToContain","ImageCropperComponent","cropService","cropperPositionService","loadImageService","setImageMaxSizeRetries","resizedWhileHidden","moveTypes","imageVisible","allowMoveImage","imageCropped","startCropImage","imageLoaded","cropperReady","loadImageFailed","transformChange","onChangesUpdateSettings","onChangesInputImage","setLoadedImage","loadImageError","setMaxSize","setCropperScaledMinSize","setCropperScaledMaxSize","aspectRatioIsCorrect","checkCropperPosition","doAutoCrop","setCssTransform","imageURL","imageFile","isValidImageChangedEvent","safeTransformStyle","activatePinchGesture","safeImgDataUrl","imageLoadedInView","checkImageMaxSizeRecursively","sourceImageLoaded","resizeCropperPosition","hammer","wrapper","onPinch","pinchStop","startPinch","keyboardAccess","changeKeyboardStepSize","keyboardMoveCropper","moveType","getInvertedPositionForKey","getPositionForKey","moveEvent","getEventForKey","startMove","moveImg","moveStop","setCropperScaledMinWidth","setCropperScaledMinHeight","maintainSize","base64Image","byteString","ab","LOADERS","cog","pacman","PRIMARY_SPINNER","NgxSpinner","spinnerObservable","getSpinner","spinner","_reject","NGX_SPINNER_CONFIG","SafeHtmlPipe","_sanitizer","globalConfig","disableAnimation","ngUnsubscribe","setDefaultOptions","bdColor","divArray","divCount","showSpinner","handleKeyboardEvent","spinnerDOM","isSpinnerZone","initObservable","onInputChange","changedProp","getClass","sizeClass","ContextMenuService","activeItemKeyChange","activeItemKeyChange$","changeKey","activeItemKey","FilterMatchMode","STARTS_WITH","CONTAINS","NOT_CONTAINS","ENDS_WITH","EQUALS","NOT_EQUALS","IN","LESS_THAN","LESS_THAN_OR_EQUAL_TO","GREATER_THAN","GREATER_THAN_OR_EQUAL_TO","BETWEEN","IS","IS_NOT","BEFORE","AFTER","DATE_IS","DATE_IS_NOT","DATE_BEFORE","DATE_AFTER","FilterOperator","AND","OR","FilterService","filterLocale","filterValue","ObjectUtils","notContains","notEquals","between","lte","gte","isNot","dateIs","toDateString","dateIsNot","dateBefore","dateAfter","filterMatchMode","filteredItems","fieldValue","messageSource","clearSource","messageObserver","clearObserver","addAll","OverlayService","clickSource","clickObservable","PrimeNGConfig","ripple","overlayOptions","filterMatchModeOptions","translation","noFilter","matchAny","addRule","removeRule","accept","choose","dayNames","dayNamesShort","dayNamesMin","monthNames","monthNamesShort","weekHeader","weak","medium","strong","passwordPrompt","emptyMessage","emptyFilterMessage","translationSource","translationObserver","getTranslation","setTranslation","Header","PrimeTemplate","getType","SharedModule","TranslationKeys","NO_FILTER","LTE","GT","GTE","CLEAR","APPLY","MATCH_ANY","ADD_RULE","REMOVE_RULE","ACCEPT","REJECT","CHOOSE","UPLOAD","CANCEL","DAY_NAMES","DAY_NAMES_SHORT","DAY_NAMES_MIN","MONTH_NAMES","MONTH_NAMES_SHORT","FIRST_DAY_OF_WEEK","TODAY","WEEK_HEADER","WEAK","MEDIUM","STRONG","PASSWORD_PROMPT","EMPTY_MESSAGE","EMPTY_FILTER_MESSAGE","TreeDragDropService","dragStartSource","dragStopSource","dragStart$","dragStop$","startDrag","stopDrag","_r32","_r34","_r24","ctx_r42","ctx_r44","_r63","ctx_r62","ctx_r75","ctx_r87","_r91","ctx_r90","scrollerOptions_r66","_r98","ctx_r97","ctx_r99","ctx_r100","AUTOCOMPLETE_VALUE_ACCESSOR","AutoComplete","overlayService","lazy","autoZIndex","baseZIndex","dropdownIcon","unique","completeOnFocus","showClear","dropdownMode","showTransitionOptions","hideTransitionOptions","autocomplete","completeMethod","onUnselect","onFocus","onDropdownClick","onClear","onKeyUp","onLazyLoad","onModelChange","onModelTouched","overlayVisible","inputFieldValue","listId","UniqueComponentId","itemSize","_itemSize","suggestions","_suggestions","handleSuggestionsChange","suggestionsUpdated","alignOverlay","highlightOptionChanged","itemsWrapper","listItem","DomHandler","highlightOption","noResults","autoHighlight","showEmptyMessage","templates","itemTemplate","groupTemplate","selectedItemTemplate","headerTemplate","emptyTemplate","footerTemplate","loaderTemplate","updateInputField","getOptionGroupChildren","optionGroup","optionGroupChildren","getOptionGroupLabel","optionGroupLabel","onInput","inputKeyDown","forceSelection","updateFilledState","onInputClick","documentClickListener","inputClick","forceSelectionUpdateModelTimeout","multiInputEL","inputEL","resolveFieldData","itemClicked","hasFocus","onOverlayAnimationStart","virtualScroll","scroller","setContentEl","itemsViewChild","appendOverlay","ZIndexUtils","bindDocumentClickListener","bindDocumentResizeListener","bindScrollListener","onOverlayHide","onOverlayAnimationEnd","onOverlayClick","appendTo","minWidth","restoreOverlayAppend","multiContainerEL","handleDropdownClick","queryValue","emptyMessageLabel","itemIndex","removedValue","onKeydown","highlightItemIndex","findOptionGroupIndex","nextItemIndex","groupIndex","findOptionIndex","prevItemIndex","prevGroup","onKeyup","onInputFocus","onInputBlur","suggestion","itemValue","onInputPaste","dataKey","formattedValue","isDropdownClick","dropdownButton","unbindDocumentClickListener","documentResizeListener","onWindowResize","unbindDocumentResizeListener","ConnectedOverlayScrollHandler","containerEL","unbindScrollListener","_c2","_c5","_c6","InputTextModule","ButtonModule","RippleModule","ScrollerModule","AutoFocusModule","AutoFocus","focused","autofocus","ctx_r3","ButtonDirective","iconPos","loadingIcon","_loading","_label","updateLabel","updateIcon","setStyleClass","_icon","_initialStyleClass","getStyleClass","createIcon","createLabel","styleClass","labelElement","iconElement","iconPosClass","iconClass","getIconClass","Button","contentTemplate","badgeStyleClass","badge","calculateMinWidth","getOuterWidth","absolutePosition","getClosestRelativeElement","elementDimensions","getHiddenElementDimensions","targetHeight","targetOffset","windowScrollTop","getWindowScrollTop","windowScrollLeft","getWindowScrollLeft","getViewport","relativeElement","relativeElementOffset","elementOuterHeight","elementOuterWidth","targetOuterHeight","targetOuterWidth","getParents","scrollableParents","overflowRegex","overflowCheck","styleDeclaration","scrollSelectors","dataset","scrollselectors","findSingle","elementHeight","elementWidth","dimensions","borderTopValue","paddingTopValue","containerRect","itemHeight","getOuterHeight","gap","fading","replacementElement","replaceChild","calculatedScrollbarWidth","calculatedScrollbarHeight","scrollbarHeight","getSelection","removeAllRanges","rangeCount","getRangeAt","selection","resolveUserAgent","safari","visibleFocusableElements","focusableElement","previousElementSibling","isExist","getScrollableParents","ctx_r5","ctx_r8","OVERLAY_VALUE_ACCESSOR","Overlay","showOverlayContentAnimation","hideOverlayContentAnimation","visibleChange","onAnimationStart","onAnimationDone","_visible","modalVisible","isOverlayClicked","isOverlayContentClicked","transformOptions","visible","_mode","_style","overlayResponsiveOptions","_styleClass","contentStyle","_contentStyle","contentStyleClass","_contentStyleClass","_target","_appendTo","_autoZIndex","_baseZIndex","_showTransitionOptions","_hideTransitionOptions","_listener","responsive","_responsive","matchMedia","overlayMode","overlayResponsiveDirection","overlayEl","overlayViewChild","contentEl","contentViewChild","targetEl","isFocus","onVisibleChange","handleEvents","onOverlayContentClick","onOverlayContentAnimationStart","onOverlayContentAnimationDone","bindListeners","unbindListeners","isOutsideClicked","OverlayModule","_r12","_r16","_r31","_r44","ctx_r57","_r71","ctx_r70","scrollerOptions_r47","DROPDOWN_VALUE_ACCESSOR","Dropdown","DropdownItem","onOptionClick","filterService","resetFilterOnHide","autoDisplayFirst","tooltipPosition","tooltipPositionStyle","autofocusFilter","overlayDirection","onFilter","_disabled","filterTemplate","emptyFilterTemplate","optionsToDisplay","updateSelectedOption","labelId","filterBy","filterOptions","onFilterInputChange","resetFilter","selectedOption","findOption","editable","optionsChanged","_filterValue","activateFilter","updateEditableLabel","getOptionLabel","emptyFilterMessageLabel","isVisibleClearIcon","editableInputViewChild","getOptionValue","isOptionDisabled","optionDisabled","onItemClick","accessibleViewChild","preventScroll","selectedOptionUpdated","filterViewChild","onMouseclick","readonly","isInputClick","onEditableInputFocus","onEditableInputChange","scrollToIndex","selectedListItem","inline","preventModelTouched","findPrevEnabledOption","prevEnabledOption","findNextEnabledOption","nextEnabledOption","selectedItemIndex","searchTimeout","newOption","previousSearchChar","currentSearchChar","searchValue","searchIndex","searchOptionWithinGroup","searchOption","searchOptionInRange","inGroup","searchFields","filteredGroups","filteredSubOptions","applyFocus","primeng_dropdown_c3","primeng_dropdown_c4","primeng_dropdown_c5","primeng_dropdown_c6","primeng_dropdown_c7","_c8","_c9","DropdownModule","msg_r4","Messages","closable","enableService","escape","timerSubscriptions","startMessageLifes","messageSubscription","filteredMessages","clearSubscription","hasMessages","parentEl","removeMessage","life","startMessageLife","timerSubsctiption","msgEl","timerEl","MessagesModule","file_r17","FileUpload","invalidFileSizeMessageSummary","invalidFileSizeMessageDetail","invalidFileTypeMessageSummary","invalidFileTypeMessageDetail","invalidFileLimitMessageDetail","invalidFileLimitMessageSummary","previewWidth","chooseIcon","uploadIcon","cancelIcon","showUploadButton","onSend","onUpload","uploadHandler","onImageError","_files","uploadedFileCount","isImage","objectURL","createObjectURL","basicButtonLabel","hasFiles","chooseLabel","uploadLabel","fileTemplate","toolbarTemplate","translationSubscription","onDragOver","advancedFileInput","onFileSelect","isIE11","duplicateIEEvent","msgs","dataTransfer","currentFiles","fileLimit","checkFileLimit","isFileLimitExceeded","clearIEInput","clearInputElement","sFile","MSInputMethodContext","isFileTypeValid","summary","detail","formatSize","acceptableTypes","isWildcard","getTypeClass","getFileExtension","onImageLoad","revokeObjectURL","customUpload","uploading","isChooseDisabled","basicFileInput","onDragEnter","dragHighlight","onDragLeave","onDrop","onBasicUploaderClick","onBasicKeydown","imageError","getBlockableElement","chooseButtonLabel","uploadButtonLabel","cancelButtonLabel","primeng_fileupload_c0","primeng_fileupload_c1","primeng_fileupload_c2","i8","_r25","INPUTNUMBER_VALUE_ACCESSOR","InputNumber","showButtons","buttonLayout","incrementButtonIcon","decrementButtonIcon","allowEmpty","groupChar","prefixChar","suffixChar","clearTimer","simpleChange","updateConstructParser","constructParser","localeMatcher","currencyDisplay","minimumFractionDigits","minFractionDigits","maximumFractionDigits","maxFractionDigits","numberFormat","numerals","_numeral","_group","getGroupingExpression","_minusSign","getMinusSignExpression","_currency","getCurrencyExpression","_decimal","getDecimalExpression","_suffix","getSuffixExpression","_prefix","getPrefixExpression","escapeRegExp","parseValue","filteredText","parsedValue","spin","validateValue","updateInput","handleOnInput","onUpButtonMouseDown","onUpButtonMouseUp","onUpButtonMouseLeave","onUpButtonKeyDown","onUpButtonKeyUp","onDownButtonMouseDown","onDownButtonMouseUp","onDownButtonMouseLeave","onDownButtonKeyUp","onDownButtonKeyDown","onUserInput","isSpecialChar","onInputKeyDown","selectionStart","newValueStr","isNumeralChar","deleteChar","decimalCharIndex","decimalCharIndexWithoutPrefix","getDecimalCharIndexes","decimalLength","getDecimalLength","insertedText","isDecimalMode","updateValue","deleteRange","onInputKeyPress","isDecimalSign","isMinusSign","onPaste","clipboardData","filteredData","allowMinusSign","getCharIndexes","minusCharIndex","suffixCharIndex","currencyCharIndex","minusCharIndexOnText","insertText","operation","charIndex","initCursor","valueLength","prefixLength","resetRegex","valueStr","insertedValueStr","isValueChanged","currentLength","concatValues","newLength","startValue","startExpr","sRegex","tExpr","tRegex","prevChar","nextChar","isGroupChar","val1","val2","valueSplit","getFormatter","InputNumberModule","InputText","ngModel","Paginator","pageLinkSize","onPageChange","alwaysShow","dropdownScrollHeight","currentPageReportTemplate","showFirstLastIcon","totalRecords","showPageLinks","_first","_page","updatePaginatorState","updatePageLinks","updateFirst","updateRowsPerPageOptions","rowsPerPageOptions","rowsPerPageItems","showAll","isFirstPage","isLastPage","getPageCount","calculatePageLinkBoundaries","numberOfPages","visiblePages","pageLinks","showJumpToPageDropdown","pageItems","pageCount","changePageToFirst","changePageToPrev","changePageToNext","changePageToLast","onPageLinkClick","onRppChange","onPageDropdownChange","paginatorState","currentPage","currentPageReport","ProgressBar","showValue","Ripple","mouseDownListener","ink","getInk","resetInk","onAnimationEnd","animationListener","Scroller","onScrollIndexChange","_tabindex","_orientation","_resizeDelay","_appendOnly","_inline","_lazy","_loaderDisabled","_showSpacer","_showLoader","_autoSize","d_loading","numItemsInViewport","lastScrollPos","lazyLoadState","loaderArr","spacerStyle","tabindex","_items","_scrollHeight","_scrollWidth","resizeDelay","appendOnly","loaderDisabled","columns","_columns","showSpacer","showLoader","numToleratedItems","_numToleratedItems","autoSize","trackBy","_trackBy","horizontal","both","loadedItems","cols","loadedRows","loadedColumns","isPageChanged","getPageByFirst","setInitialState","simpleChanges","isLoadingChanged","d_numToleratedItems","calculateAutoSize","loaderIconTemplate","viewInit","unbindResizeListener","elementViewChild","defaultWidth","defaultHeight","setSize","calculateOptions","setSpacerSize","bindResizeListener","getElementRef","calculateNumItems","contentPos","getContentPosition","calculateFirst","_numT","calculateCoord","_size","_cpos","scrollInView","getRenderedRange","isToEnd","calculateFirstInViewport","_pos","firstInViewport","lastInViewport","calculateNumItemsInViewport","_contentSize","calculateNumToleratedItems","_numItems","calculateLast","_isCols","getLast","minHeight","isCols","setProp","setContentPosition","calculateTranslateVal","_x","_y","translateVal","onScrollPositionChange","calculateScrollPos","calculateCurrentIndex","calculateTriggerIndex","_currentIndex","_last","_isScrollDownOrRight","_triggerIndex","newFirst","newLast","isRangeChanged","newScrollPos","isScrollDown","isScrollRight","triggerIndex","isScrollDownOrRight","onScrollChange","onContainerScroll","scrollTimeout","windowResizeListener","resizeTimeout","isDiffWidth","isDiffHeight","getContentOptions","getItemOptions","getLoaderOptions","renderedIndex","extOptions","_r7","_r9","ctx_r45","weekDay_r48","date_r57","_r64","ctx_r65","ctx_r72","_r77","ctx_r76","ctx_r78","_r82","ctx_r81","ctx_r83","ctx_r86","ctx_r92","ctx_r93","ctx_r94","ctx_r95","ctx_r96","ctx_r98","ctx_r101","ctx_r102","ctx_r103","ctx_r104","ctx_r105","ctx_r106","_r108","ctx_r107","ctx_r109","ctx_r110","ctx_r111","ctx_r112","ctx_r113","ctx_r88","_r115","ctx_r114","ctx_r116","ctx_r117","ctx_r118","ctx_r119","ctx_r120","ctx_r121","ctx_r122","ctx_r123","ctx_r124","ctx_r125","ctx_r126","ctx_r127","ctx_r128","ctx_r129","ctx_r130","ctx_r131","ctx_r132","ctx_r133","ctx_r134","ctx_r135","ctx_r136","ctx_r137","ctx_r138","ctx_r139","ctx_r140","ctx_r141","ctx_r142","ctx_r143","ctx_r144","ctx_r145","ctx_r146","_r148","ctx_r147","ctx_r149","ctx_r150","ctx_r151","_r153","ctx_r152","ctx_r154","ctx_r155","CALENDAR_VALUE_ACCESSOR","Calendar","multipleSeparator","showOtherMonths","shortYearCutoff","hourFormat","stepHour","stepMinute","stepSecond","showOnFocus","showWeek","dataType","selectionMode","todayButtonStyleClass","clearButtonStyleClass","keepInvalid","hideOnDateTimeSelect","timeSeparator","onTodayClick","onClearClick","onMonthChange","onYearChange","onClickOutside","navigationState","_numberOfMonths","convertTo24Hour","pm","isMonthNavigate","updateFocus","initFocusableCell","defaultDate","_defaultDate","currentMonth","initTime","createMonths","_minDate","_maxDate","disabledDates","_disabledDates","disabledDays","_disabledDays","yearRange","_yearRange","yearStart","yearEnd","populateYearOptions","showTime","_showTime","currentHour","updateInputfield","responsiveOptions","_responsiveOptions","destroyResponsiveStyleElement","createResponsiveStyle","numberOfMonths","_firstDayOfWeek","createWeekDays","newLocale","attributeSelector","ticksTo1970","dateTemplate","decadeTemplate","disabledDateTemplate","containerViewChild","yearOptions","weekDays","getFirstDateOfWeek","dayLabels","monthPickerValues","yearPickerValues","createMonth","getWeekNumber","checkDate","getFirstDayOfMonthIndex","daysLength","getDaysCountInMonth","prevMonthDaysLength","getDaysCountInPrevMonth","dayNo","monthRows","getPreviousMonthAndYear","otherMonth","selectable","isSelectable","remainingDaysLength","getNextMonthAndYear","currentMinute","setCurrentHourPM","timeOnly","navBackward","decrementYear","decrementDecade","navForward","incrementYear","incrementDecade","yearNavigator","switchToMonthView","setCurrentView","switchToYearView","onDateSelect","dateMeta","isMultipleSelection","isDateEquals","shouldSelectDate","selectDate","isSingleSelection","hideOverlay","disableModality","maxDateCount","onMonthSelect","onYearSelect","isRangeSelection","inputfieldViewChild","formatTime","getDateFormat","stringArrValue","getSundayIndex","daylightSavingAdjust","isDateBetween","isComparable","isMonthSelected","isYearSelected","validMin","validMax","validDate","selectOtherMonths","isDateDisabled","isDayDisabled","disabledDate","weekdayNumber","showOverlay","onButtonClick","inputfield","getMonthName","switchViewButtonDisabled","onPrevButtonClick","backward","onNextButtonClick","onContainerButtonKeydown","trapFocus","onInputKeydown","isKeydown","onDateCellKeydown","cellContent","cellIndex","nextRow","prevRow","focusCell","prevCell","navigateToMonth","nextCell","onMonthCellKeydown","cells","onYearCellKeydown","selectedCell","todayCell","preventFocus","focusedIndex","onMonthDropdownChange","onYearDropdownChange","validateTime","convertedHour","valueDateString","incrementHour","newHour","newPM","onTimePickerElementMouseDown","onTimePickerElementMouseUp","clearTimePickerTimer","updateTime","onTimePickerElementMouseLeave","timePickerTimer","decrementHour","incrementMinute","decrementMinute","incrementSecond","decrementSecond","newMinute","newSecond","toggleAMPM","parseValueFromString","isValidSelection","updateUI","parseDateTime","populateTime","timeString","propValue","touchUI","onOverlayAnimationDone","enableModality","maskClickListener","animationEndListener","destroyMask","hasBlockerMasks","bodyChildren","unbindAnimationEndListener","unbindMaskClickListener","iFormat","lookAhead","formatName","shortNames","longNames","dim","extra","iValue","getNumber","isDoubled","getName","checkLiteral","onTodayButtonClick","onClearButtonClick","responsiveStyleElement","numMonths","o1","isNavIconClicked","_c12","CalendarModule","option_r1","SELECTBUTTON_VALUE_ACCESSOR","SelectButton","removeOption","SelectButtonModule","_r0","TRISTATECHECKBOX_VALUE_ACCESSOR","TriStateCheckbox","checkboxTrueIcon","checkboxFalseIcon","_r4","TriStateCheckboxModule","scrollerOptions_r26","TableService","sortSource","selectionSource","contextMenuSource","valueSource","totalRecordsSource","columnsSource","resetSource","sortSource$","selectionSource$","contextMenuSource$","valueSource$","totalRecordsSource$","columnsSource$","resetSource$","onSort","sortMeta","onSelectionChange","onResetChange","onContextMenu","onValueChange","onTotalRecordsChange","onColumnsChange","Table","tableService","alwaysShowPaginator","paginatorPosition","paginatorDropdownScrollHeight","defaultSortOrder","resetPageOnSort","selectAllChange","selectionChange","contextMenuSelectionChange","contextMenuSelectionMode","rowTrackBy","lazyLoadOnInit","compareSelectionBy","csvSeparator","exportFilename","filterDelay","expandedRowKeys","editingRowKeys","rowExpandMode","scrollDirection","virtualScrollDelay","columnResizeMode","showInitialSortBadge","stateStorage","editMode","groupRowsByOrder","responsiveLayout","onRowSelect","onRowUnselect","onPage","onRowExpand","onRowCollapse","onContextMenuSelect","onColResize","onColReorder","onRowReorder","onEditInit","onEditComplete","onEditCancel","onHeaderCheckboxToggle","sortFunction","rowsChange","onStateSave","onStateRestore","_virtualRowHeight","_totalRecords","selectionKeys","_sortOrder","_selectAll","columnResizing","rowGroupHeaderStyleObject","virtualRowHeight","createLazyLoadMetadata","restoringFilter","captionTemplate","headerGroupedTemplate","bodyTemplate","loadingBodyTemplate","footerGroupedTemplate","summaryTemplate","colGroupTemplate","expandedRowTemplate","groupHeaderTemplate","rowspanTemplate","groupFooterTemplate","frozenRowsTemplate","frozenHeaderTemplate","frozenBodyTemplate","frozenFooterTemplate","frozenColGroupTemplate","frozenExpandedRowTemplate","emptyMessageTemplate","paginatorLeftTemplate","paginatorRightTemplate","paginatorDropdownItemTemplate","isStateful","resizableColumns","restoreColumnWidths","stateRestored","restoreState","groupRowsBy","sortSingle","sortMultiple","hasFilter","reorderableColumns","columnOrderStateRestored","restoreColumnOrder","_sortField","_multiSortMeta","_selection","preventSelectionSetterPropagation","updateSelectionKeys","selectAll","_rows","processedData","filteredValue","dataToRender","anchorRowIndex","resetScrollTop","getSortMeta","getGroupRowsMeta","restoringSort","customSort","data1","multisortField","multisortmeta","compareValuesOnSort","isSorted","handleRowClick","targetNode","rowData","isMultipleSelectionMode","rangeRowIndex","clearSelectionRange","isRowSelectable","metaSelection","rowTouched","metaKeySelection","dataKeyValue","isSingleSelectionMode","selectionIndex","findIndexInSelection","handleRowTouchEnd","handleRowRightClick","contextMenu","contextMenuSelection","rangeStart","rangeEnd","rangeRowsData","rangeRowData","rowSelectable","toggleRowWithRadio","toggleRowWithCheckbox","toggleRowsWithCheckbox","selectionPageOnly","frozenValue","matchMode","filterTimeout","isFilterBlank","filterGlobal","globalFilterFieldsArray","globalFilterFields","localMatch","globalMatch","localFiltered","filterField","filterMeta","executeLocalFilter","dataFieldValue","filterConstraint","globalFilter","getExportHeader","exportHeader","exportCSV","csv","selectionOnly","exportable","cellData","exportFunction","download","onLazyItemLoad","scrollToVirtualIndex","wrapperViewChild","updateEditingCell","editingCell","editingCellData","editingCellField","editingCellRowIndex","bindDocumentEditListener","isEditingCellValid","documentEditListener","selfClick","unbindDocumentEditListener","overlaySubscription","initRowEdit","saveRowEdit","rowElement","cancelRowEdit","toggleRow","isRowExpanded","isRowEditing","onColumnResizeBegin","containerLeft","resizeColumnElement","lastResizerHelperX","onColumnResize","resizeHelperViewChild","onColumnResizeEnd","newColumnWidth","nextColumnWidth","resizeTableCells","setResizeTableWidth","tableViewChild","colIndex","widths","tableHead","destroyStyleElement","createStyleElement","colWidth","styleElement","onColumnDragStart","columnElement","reorderIconWidth","reorderIndicatorUpViewChild","reorderIconHeight","reorderIndicatorDownViewChild","draggedColumn","onColumnDragEnter","dropHeader","containerOffset","dropHeaderOffset","targetLeft","columnCenter","dropPosition","dropEffect","onColumnDragLeave","onColumnDrop","dropColumn","dragIndex","allowDrop","draggable","onRowDragStart","rowDragging","draggedRowIndex","onRowDragOver","rowY","rowMidY","prevRowElement","droppedRowIndex","onRowDragLeave","onRowDragEnd","onRowDrop","getStorage","sessionStorage","stateKey","storage","saveColumnWidths","saveColumnOrder","clearState","stateString","columnWidthsState","columnWidths","tableWidthState","tableWidth","columnOrder","reorderedColumns","col","findColumnByKey","destroyResponsiveStyle","primeng_table_c0","primeng_table_c1","primeng_table_c2","primeng_table_c3","primeng_table_c4","primeng_table_c5","primeng_table_c6","primeng_table_c7","primeng_table_c8","TableBody","frozenRows","updateFrozenRowStickyPosition","rowGroupMode","updateFrozenRowGroupHeaderStickyPosition","shouldRenderRowGroupHeader","currentRowFieldData","prevRowData","shouldRenderRowGroupFooter","nextRowData","shouldRenderRowspan","calculateRowGroupSize","nextRowFieldData","groupRowSpan","tableHeaderHeight","getScrollerOption","scrollerOptions","getRowIndex","SortableColumn","updateSortState","isFilterElement","onEnterKey","pSortableColumnDisabled","SortIcon","getMultiSortMetaIndex","getBadgeValue","isMultiSorted","SelectableRow","onTouchEnd","onArrowDownKeyDown","findNextSelectableRow","onArrowUpKeyDown","findPrevSelectableRow","onEnterKeyDown","onPageDownKeyDown","onSpaceKeydown","pSelectableRowDisabled","TableCheckbox","TableHeaderCheckbox","valueChangeSubscription","updateCheckedState","selectionChangeSubscription","selectableVal","ReorderableRowHandle","ReorderableRow","droppable","bindEvents","dragStartListener","onDragStart","dragEndListener","onDragEnd","dragOverListener","dragLeaveListener","unbindEvents","pReorderableRowDisabled","Tooltip","fitContent","_tooltipOptions","tooltipEvent","tooltipZIndex","mouseEnterListener","onMouseEnter","mouseLeaveListener","onMouseLeave","clickListener","focusListener","blurListener","setOption","positionStyle","tooltipStyleClass","showDelay","hideDelay","tooltipLabel","updateText","align","tooltipOptions","showTimeout","clearHideTimeout","hideTimeout","clearShowTimeout","tooltipArrow","alignTop","isOutOfBounds","alignBottom","alignRight","alignLeft","getHostOffset","preAlign","hostOffset","defaultClassName","targetTop","resizeListener","clearTimeouts","obj1","obj2","equalsByValue","arrA","arrB","dateA","dateB","regexpA","regexpB","sourceArr","injected","findIndexInList","emptyValue1","emptyValue2","nullSortOrder","zindexutils","zIndexes","lastZIndex","generateZIndex","revertZIndex","getCurrent"],"sourceRoot":"webpack:///","sources":["./src/app/admin/users/impersonation.service.ts","./src/assets/metronic/app/kt/_utils/_ElementStyleUtil.ts","./src/assets/metronic/app/kt/_utils/_DataUtil.ts","./src/assets/metronic/app/kt/_utils/_TypesHelpers.ts","./src/assets/metronic/app/kt/_utils/_DOMEventHandlerUtil.ts","./src/assets/metronic/app/kt/_utils/ElementAnimateUtil.ts","./src/assets/metronic/app/kt/_utils/DomHelpers.ts","./src/assets/metronic/app/kt/_utils/EventHandlerUtil.ts","./src/assets/metronic/app/kt/components/_DrawerComponent.ts","./src/assets/metronic/app/kt/components/_CookieComponent.ts","./src/assets/metronic/app/kt/components/_ScrollComponent.ts","./src/assets/metronic/app/kt/components/_ScrollTopComponent.ts","./src/assets/metronic/app/kt/components/_StickyComponent.ts","./src/assets/metronic/app/kt/components/_ToggleComponent.ts","./src/assets/metronic/app/kt/components/_SwapperComponent.ts","./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","./node_modules/@popperjs/core/lib/utils/math.js","./node_modules/@popperjs/core/lib/utils/userAgent.js","./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","./node_modules/@popperjs/core/lib/enums.js","./node_modules/@popperjs/core/lib/utils/orderModifiers.js","./node_modules/@popperjs/core/lib/utils/debounce.js","./node_modules/@popperjs/core/lib/createPopper.js","./node_modules/@popperjs/core/lib/utils/mergeByName.js","./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","./node_modules/@popperjs/core/lib/utils/getVariation.js","./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","./node_modules/@popperjs/core/lib/utils/computeOffsets.js","./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","./node_modules/@popperjs/core/lib/dom-utils/contains.js","./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","./node_modules/@popperjs/core/lib/utils/detectOverflow.js","./node_modules/@popperjs/core/lib/utils/within.js","./node_modules/@popperjs/core/lib/modifiers/hide.js","./node_modules/@popperjs/core/lib/popper.js","./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","./node_modules/@popperjs/core/lib/modifiers/offset.js","./node_modules/@popperjs/core/lib/modifiers/flip.js","./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","./node_modules/@popperjs/core/lib/utils/getAltAxis.js","./node_modules/@popperjs/core/lib/modifiers/arrow.js","./src/assets/metronic/app/kt/components/MenuComponent.ts","./src/app/shared/layout/themes/themes-layout-base.component.ts","./src/shared/utils/luxon-from-now.pipe.ts","./src/app/shared/layout/notifications/header-notifications.component.html","./src/app/shared/layout/notifications/header-notifications.component.ts","./src/app/shared/layout/nav/menu-search-bar/menu-search-bar.component.html","./src/app/shared/layout/nav/menu-search-bar/menu-search-bar.component.ts","./src/app/shared/layout/nav/side-bar-menu.component.html","./src/app/shared/layout/nav/side-bar-menu.component.ts","./src/app/shared/layout/nav/top-bar-menu.component.html","./src/app/shared/layout/nav/top-bar-menu.component.ts","./src/app/shared/layout/footer.component.html","./src/app/shared/layout/footer.component.ts","./src/app/shared/layout/topbar/quick-theme-selection.component.html","./src/app/shared/layout/topbar/quick-theme-selection.component.ts","./src/app/shared/layout/topbar/language-switch-dropdown.component.html","./src/app/shared/layout/topbar/language-switch-dropdown.component.ts","./src/shared/common/pipes/feature-checker.pipe.ts","./src/app/shared/layout/topbar/chat-toggle-button.component.html","./src/app/shared/layout/topbar/chat-toggle-button.component.ts","./src/app/shared/layout/topbar/subscription-notification-bar.component.html","./src/app/shared/layout/topbar/subscription-notification-bar.component.ts","./src/app/shared/layout/topbar/user-menu.component.html","./src/app/shared/layout/topbar/user-menu.component.ts","./src/app/shared/layout/themes/default/default-logo.component.html","./src/app/shared/layout/themes/default/default-logo.component.ts","./src/app/shared/layout/themes/default/default-brand.component.ts","./src/app/shared/layout/themes/default/default-brand.component.html","./src/app/shared/layout/topbar/active-delegated-users-combo.component.ts","./src/app/shared/layout/toggle-dark-mode/toggle-dark-mode.component.html","./src/app/shared/layout/toggle-dark-mode/toggle-dark-mode.component.ts","./src/app/shared/layout/themes/default/default-layout.component.html","./src/app/shared/layout/themes/default/default-layout.component.ts","./src/app/shared/layout/site/language-picker-local/language-picker-local.component.html","./src/app/shared/layout/site/language-picker-local/language-picker-local.component.ts","./src/app/shared/layout/site/site-nav/site-nav.component.html","./src/app/shared/layout/site/site-nav/site-nav.component.ts","./src/app/shared/layout/themes/site-theme/site-theme.component.html","./src/app/shared/layout/themes/site-theme/site-theme.component.ts","./src/app/shared/layout/link-account-modal.component.html","./src/app/shared/layout/link-account-modal.component.ts","./src/app/shared/layout/linked-accounts-modal.component.html","./src/app/shared/layout/linked-accounts-modal.component.ts","./src/app/shared/layout/create-new-user-delegation-modal.component.html","./src/app/shared/layout/create-new-user-delegation-modal.component.ts","./src/app/shared/layout/user-delegations-modal.component.html","./src/app/shared/layout/user-delegations-modal.component.ts","./src/app/shared/layout/profile/change-password-modal.component.html","./src/app/shared/layout/profile/change-password-modal.component.ts","./src/app/shared/layout/profile/sms-verification-modal.component.html","./src/app/shared/layout/profile/sms-verification-modal.component.ts","./src/app/shared/layout/profile/my-settings-modal.component.html","./src/app/shared/layout/profile/my-settings-modal.component.ts","./node_modules/lodash-es/_baseExtremum.js","./node_modules/lodash-es/_baseLt.js","./node_modules/lodash-es/min.js","./node_modules/lodash-es/_arrayReduce.js","./node_modules/lodash-es/_baseReduce.js","./src/app/shared/layout/chat/ChatFriendDto.ts","./src/shared/utils/friend-profile-picture.component.ts","./src/app/shared/layout/chat/chat-friend-list-item.component.html","./src/app/shared/layout/chat/chat-friend-list-item.component.ts","./src/app/shared/layout/chat/chat-message.component.html","./src/app/shared/layout/chat/chat-message.component.ts","./src/app/shared/layout/chat/chat-bar.component.html","./src/app/shared/layout/chat/chat-bar.component.ts","./node_modules/lodash-es/reduce.js","./src/app/shared/layout/theme-selection/theme-selection-panel.component.html","./src/app/shared/layout/theme-selection/theme-selection-panel.component.ts","./src/app/shared/layout/notifications/notification-settings-modal.component.html","./src/app/shared/layout/notifications/notification-settings-modal.component.ts","./src/app/shared/common/session-timeout/session-timeout-modal-component.ts","./src/app/shared/common/session-timeout/session-timeout-modal.component.html","./src/app/shared/common/session-timeout/session-timeout.component.ts","./src/app/app.component.html","./src/app/app.component.ts","./src/shared/helpers/SignalRHelper.ts","./src/app/shared/layout/site/site-footer/site-footer.component.ts","./src/app/shared/layout/site/site-footer/site-footer.component.html","./src/app/shared/layout/site/moving-text/moving-text.component.ts","./src/app/shared/layout/site/moving-text/moving-text.component.html","./src/app/shared/layout/site/home-header/home-header.component.html","./src/app/shared/layout/site/home-header/home-header.component.ts","./src/app/shared/layout/site/home/home.component.ts","./src/app/shared/layout/site/home/home.component.html","./src/app/shared/layout/notifications/notifications.component.html","./src/app/shared/layout/notifications/notifications.component.ts","./src/app/shared/layout/site/header/header.component.html","./src/app/shared/layout/site/header/header.component.ts","./src/app/shared/layout/site/info/info.component.html","./src/app/shared/layout/site/info/info.component.ts","./src/app/shared/layout/site/info/about-us/about-us.component.ts","./src/app/shared/layout/site/info/about-us/about-us.component.html","./src/app/shared/layout/site/info/contact/contact.component.ts","./src/app/shared/layout/site/info/contact/contact.component.html","./src/app/shared/layout/site/info/support/support.component.ts","./src/app/shared/layout/site/info/support/support.component.html","./src/app/shared/layout/site/privacy-policy/privacy-policy.component.ts","./src/app/shared/layout/site/privacy-policy/privacy-policy.component.html","./src/app/shared/layout/site/our-show/our-show.component.html","./src/app/shared/layout/site/our-show/our-show.component.ts","./src/app/shared/layout/site/episode/episode-panel/episode-media.ts","./src/app/shared/layout/site/episode/episode-panel/episode-panel.component.html","./src/app/shared/layout/site/episode/episode-panel/episode-panel.component.ts","./node_modules/rxjs/dist/esm/internal/operators/distinctUntilKeyChanged.js","./src/app/shared/layout/site/episode/episode-description/episode-description.component.html","./src/app/shared/layout/site/episode/episode-description/episode-description.component.ts","./src/app/shared/layout/site/episode/episode.component.html","./src/app/shared/layout/site/episode/episode.component.ts","./node_modules/rxjs/dist/esm/internal/operators/repeat.js","./src/app/shared/layout/site/games/GamesData.ts","./src/app/shared/layout/site/games/games.component.ts","./src/app/shared/layout/site/games/games.component.html","./src/app/shared/layout/site/oval/oval.ts","./src/app/shared/layout/site/oval/oval.html","./src/app/shared/layout/site/learn-more/learn-more.component.html","./src/app/shared/layout/site/learn-more/learn-more.component.ts","./src/app/shared/layout/site/oval-content/oval-content-LM1/oval-content-LM1.component.html","./src/app/shared/layout/site/oval-content/oval-content-LM1/oval-content-LM1.component.ts","./src/app/shared/layout/site/oval-content/difficultyLevels.ts","./src/app/shared/layout/site/oval-content/oval-content-LM2/oval-content-LM2.component.html","./src/app/shared/layout/site/oval-content/oval-content-LM2/oval-content-LM2.component.ts","./src/app/shared/layout/site/oval-content/oval-content-LM3/oval-content-LM3.component.html","./src/app/shared/layout/site/oval-content/oval-content-LM3/oval-content-LM3.component.ts","./src/app/shared/layout/site/oval-content/oval-content-LM4/oval-content-LM4.component.html","./src/app/shared/layout/site/oval-content/oval-content-LM4/oval-content-LM4.component.ts","./src/app/shared/layout/site/oval-content/oval-content-LM5/oval-content-LM5.component.html","./src/app/shared/layout/site/oval-content/oval-content-LM5/oval-content-LM5.component.ts","./src/app/shared/layout/site/oval-content/oval-content-LM6/oval-content-LM6.component.html","./src/app/shared/layout/site/oval-content/oval-content-LM6/oval-content-LM6.component.ts","./src/app/shared/layout/site/oval-content/oval-content-Default/oval-content-Default.component.html","./src/app/shared/layout/site/oval-content/oval-content-Default/oval-content-Default.component.ts","./src/app/shared/layout/site/oval-content/oval-content.component.html","./src/app/shared/layout/site/oval-content/oval-content.component.ts","./src/app/shared/layout/site/info/about-us-ourshow/about-us-ourshow.component.ts","./src/app/shared/layout/site/info/about-us-ourshow/about-us-ourshow.component.html","./src/app/shared/layout/site/info/about-us-media/about-us-media.component.ts","./src/app/shared/layout/site/info/about-us-media/about-us-media.component.html","./src/app/shared/layout/site/downloadPage/downloadPage.component.html","./src/app/shared/layout/site/downloadPage/downloadPage.component.ts","./src/app/app-routing.module.ts","./src/app/episode-guard.service.ts","./src/app/router-service.ts","./src/app/session-service.ts","./src/app/shared/app-shared.module.ts","./src/app/shared/common/app-common.module.ts","./src/app/shared/common/auth/app-auth.service.ts","./src/app/shared/common/auth/auth-route-guard.ts","./src/app/shared/common/localization/app-localization.service.ts","./src/app/shared/common/lookup/common-lookup-modal.component.html","./src/app/shared/common/lookup/common-lookup-modal.component.ts","./src/app/shared/common/sub-header/sub-header.component.html","./src/app/shared/common/sub-header/sub-header.component.ts","./src/app/shared/common/sub-header/subheader.module.ts","./src/app/shared/common/timing/date-time.service.ts","./src/app/shared/common/timing/timezone-combo.component.ts","./src/app/shared/layout/chat/chat-signalr.service.ts","./src/app/shared/layout/linked-account.service.ts","./src/app/shared/layout/nav/app-menu.ts","./src/app/shared/layout/nav/app-menu-item.ts","./src/app/shared/layout/nav/app-navigation.service.ts","./src/app/shared/layout/notifications/UserNotificationHelper.ts","./src/app/shared/layout/profile/change-profile-picture-modal.component.html","./src/app/shared/layout/profile/change-profile-picture-modal.component.ts","./src/app/shared/layout/profile/change-profile-picture-modal.module.ts","./src/app/shared/layout/site/info/about-us.service.ts","./src/app/shared/layout/site/language-picker-local/LanguageConsts.ts","./src/app/shared/layout/site/language-picker-local/language-picker-local.service.ts","./src/app/shared/layout/themes/ThemeHelper.ts","./src/app/shared/ngx-spinner-text.service.ts","./src/assets/ngx-bootstrap/ngx-bootstrap-locale-mapping.service.ts","./src/assets/ngx-bootstrap/ngx-bootstrap-datepicker-config.service.ts","./node_modules/@angular/animations/fesm2015/browser.mjs","./node_modules/@angular/platform-browser/fesm2015/animations.mjs","./src/shared/helpers/DynamicResourcesHelper.ts","./src/AppPreBootstrap.ts","./node_modules/lodash-es/mergeWith.js","./node_modules/@igniteui/material-icons-extended/build/src/index.js","./node_modules/igniteui-angular/fesm2015/igniteui-angular.mjs","./node_modules/ng-image-slider/fesm2015/ng-image-slider.mjs","./src/app/app.module.ts","./src/root-routing.module.ts","./src/root.component.ts","./src/root.module.ts","./src/main.ts","./src/shared/AppConsts.ts","./src/shared/animations/routerTransition.ts","./src/shared/common/app-component-base.ts","./src/shared/common/appBsModal/app-bs-modal.directive.ts","./src/shared/common/appBsModal/app-bs-modal.module.ts","./src/shared/common/common.module.ts","./src/shared/common/nav/app-url.service.ts","./src/shared/common/pipes/localize.pipe.ts","./src/shared/common/pipes/permission.pipe.ts","./src/shared/common/session/app-session.service.ts","./src/shared/common/session/cookie-consent.service.ts","./src/shared/common/ui/app-ui-customization.service.ts","./src/shared/helpers/DomHelper.ts","./src/shared/helpers/FormattedStringValueExtracter.ts","./src/shared/helpers/PrimengTableHelper.ts","./src/shared/helpers/SubdomainTenancyNameFinder.ts","./src/app/shared/layout/themes/default/DefaultThemeAssetContributor.ts","./src/app/shared/layout/themes/theme2/Theme2ThemeAssetContributor.ts","./src/app/shared/layout/themes/theme3/Theme3ThemeAssetContributor.ts","./src/app/shared/layout/themes/theme4/Theme4ThemeAssetContributor.ts","./src/app/shared/layout/themes/theme5/Theme5ThemeAssetContributor.ts","./src/app/shared/layout/themes/theme6/Theme6ThemeAssetContributor.ts","./src/app/shared/layout/themes/theme7/Theme7ThemeAssetContributor.ts","./src/app/shared/layout/themes/theme8/Theme8ThemeAssetContributor.ts","./src/app/shared/layout/themes/theme9/Theme9ThemeAssetContributor.ts","./src/app/shared/layout/themes/theme10/Theme10ThemeAssetContributor.ts","./src/app/shared/layout/themes/theme11/Theme11ThemeAssetContributor.ts","./src/app/shared/layout/themes/theme12/Theme12ThemeAssetContributor.ts","./src/app/shared/layout/themes/theme13/Theme13ThemeAssetContributor.ts","./src/shared/helpers/ThemeAssetContributorFactory.ts","./src/shared/helpers/UrlHelper.ts","./src/shared/helpers/XmlHttpRequestHelper.ts","./src/shared/locale-mapping.service.ts","./src/shared/service-proxies/service-proxies.ts","./src/account/auth/zero-refresh-token.service.ts","./src/shared/service-proxies/zero-template-http-configuration.service.ts","./src/shared/service-proxies/service-proxy.module.ts","./src/shared/utils/array-to-tree-converter.service.ts","./src/shared/utils/auto-focus.directive.ts","./src/shared/utils/busy-if.directive.ts","./src/shared/utils/button-busy.directive.ts","./src/shared/utils/date-time/date-picker-luxon-modifier.directive.ts","./src/shared/utils/date-time/date-range-picker-luxon-modifier.directive.ts","./src/shared/utils/file-download.service.ts","./src/shared/utils/guid-generator.service.ts","./src/shared/utils/local-storage.service.ts","./src/shared/utils/luxon-format.pipe.ts","./src/shared/utils/name-value-pair.ts","./src/shared/utils/script-loader.service.ts","./src/shared/utils/style-loader.service.ts","./src/shared/utils/tree-data-helper.service.ts","./src/shared/utils/utils.module.ts","./src/shared/utils/validation-messages.component.ts","./node_modules/lodash-es/concat.js","./src/shared/utils/validation/equal-validator.directive.ts","./src/shared/utils/validation/password-complexity-validator.directive.ts","./node_modules/angular2-counto/__ivy_ngcc__/index.js","./node_modules/angular2-counto/__ivy_ngcc__/src/counto.directive.js","./node_modules/angular2-counto/__ivy_ngcc__/src/counto.module.js","./node_modules/angular2-text-mask/__ivy_ngcc__/dist/angular2TextMask.js","./node_modules/igniteui-trial-watermark/index.js","./node_modules/localforage/dist/localforage.js","./node_modules/ng2-file-upload/__ivy_ngcc__/fesm2015/ng2-file-upload.js","./node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js","./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","./node_modules/ngx-perfect-scrollbar/__ivy_ngcc__/fesm2015/ngx-perfect-scrollbar.js","./node_modules/object-path/index.js","./node_modules/push.js/bin/push.min.js","./node_modules/rtl-detect/index.js","./node_modules/rtl-detect/lib/rtl-detect.js","./node_modules/rxjs/dist/esm/internal/BehaviorSubject.js","./node_modules/rxjs/dist/esm/internal/Observable.js","./node_modules/rxjs/dist/esm/internal/util/ObjectUnsubscribedError.js","./node_modules/rxjs/dist/esm/internal/Subject.js","./node_modules/rxjs/dist/esm/internal/NotificationFactories.js","./node_modules/rxjs/dist/esm/internal/Subscriber.js","./node_modules/rxjs/dist/esm/internal/util/UnsubscriptionError.js","./node_modules/rxjs/dist/esm/internal/Subscription.js","./node_modules/rxjs/dist/esm/internal/config.js","./node_modules/rxjs/dist/esm/internal/observable/combineLatest.js","./node_modules/rxjs/dist/esm/internal/observable/concat.js","./node_modules/rxjs/dist/esm/internal/operators/concatAll.js","./node_modules/rxjs/dist/esm/internal/observable/defer.js","./node_modules/rxjs/dist/esm/internal/observable/empty.js","./node_modules/rxjs/dist/esm/internal/observable/forkJoin.js","./node_modules/rxjs/dist/esm/internal/operators/subscribeOn.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleAsyncIterable.js","./node_modules/rxjs/dist/esm/internal/observable/from.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduled.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleObservable.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleArray.js","./node_modules/rxjs/dist/esm/internal/scheduled/schedulePromise.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleIterable.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleReadableStreamLike.js","./node_modules/rxjs/dist/esm/internal/observable/fromEvent.js","./node_modules/rxjs/dist/esm/internal/observable/innerFrom.js","./node_modules/rxjs/dist/esm/internal/observable/merge.js","./node_modules/rxjs/dist/esm/internal/observable/of.js","./node_modules/rxjs/dist/esm/internal/observable/throwError.js","./node_modules/rxjs/dist/esm/internal/observable/timer.js","./node_modules/rxjs/dist/esm/internal/operators/OperatorSubscriber.js","./node_modules/rxjs/dist/esm/internal/operators/auditTime.js","./node_modules/rxjs/dist/esm/internal/operators/audit.js","./node_modules/rxjs/dist/esm/internal/operators/catchError.js","./node_modules/rxjs/dist/esm/internal/operators/concatMap.js","./node_modules/rxjs/dist/esm/internal/operators/debounceTime.js","./node_modules/rxjs/dist/esm/internal/operators/defaultIfEmpty.js","./node_modules/rxjs/dist/esm/internal/operators/distinctUntilChanged.js","./node_modules/rxjs/dist/esm/internal/operators/filter.js","./node_modules/rxjs/dist/esm/internal/operators/finalize.js","./node_modules/rxjs/dist/esm/internal/operators/first.js","./node_modules/rxjs/dist/esm/internal/operators/map.js","./node_modules/rxjs/dist/esm/internal/operators/mapTo.js","./node_modules/rxjs/dist/esm/internal/operators/mergeAll.js","./node_modules/rxjs/dist/esm/internal/operators/mergeMap.js","./node_modules/rxjs/dist/esm/internal/operators/mergeInternals.js","./node_modules/rxjs/dist/esm/internal/operators/observeOn.js","./node_modules/rxjs/dist/esm/internal/operators/scanInternals.js","./node_modules/rxjs/dist/esm/internal/operators/scan.js","./node_modules/rxjs/dist/esm/internal/operators/share.js","./node_modules/rxjs/dist/esm/internal/ReplaySubject.js","./node_modules/rxjs/dist/esm/internal/operators/shareReplay.js","./node_modules/rxjs/dist/esm/internal/operators/startWith.js","./node_modules/rxjs/dist/esm/internal/operators/switchMap.js","./node_modules/rxjs/dist/esm/internal/operators/take.js","./node_modules/rxjs/dist/esm/internal/operators/takeUntil.js","./node_modules/rxjs/dist/esm/internal/operators/tap.js","./node_modules/rxjs/dist/esm/internal/operators/throwIfEmpty.js","./node_modules/rxjs/dist/esm/internal/scheduler/Action.js","./node_modules/rxjs/dist/esm/internal/scheduler/intervalProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js","./node_modules/rxjs/dist/esm/internal/Scheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/AsyncScheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/animationFrameProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/animationFrame.js","./node_modules/rxjs/dist/esm/internal/scheduler/AnimationFrameScheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/AnimationFrameAction.js","./node_modules/rxjs/dist/esm/internal/scheduler/async.js","./node_modules/rxjs/dist/esm/internal/scheduler/dateTimestampProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/timeoutProvider.js","./node_modules/rxjs/dist/esm/internal/symbol/iterator.js","./node_modules/rxjs/dist/esm/internal/symbol/observable.js","./node_modules/rxjs/dist/esm/internal/util/EmptyError.js","./node_modules/rxjs/dist/esm/internal/util/args.js","./node_modules/rxjs/dist/esm/internal/util/argsArgArrayOrObject.js","./node_modules/rxjs/dist/esm/internal/util/arrRemove.js","./node_modules/rxjs/dist/esm/internal/util/createErrorClass.js","./node_modules/rxjs/dist/esm/internal/util/createObject.js","./node_modules/rxjs/dist/esm/internal/util/errorContext.js","./node_modules/rxjs/dist/esm/internal/util/executeSchedule.js","./node_modules/rxjs/dist/esm/internal/util/identity.js","./node_modules/rxjs/dist/esm/internal/util/isArrayLike.js","./node_modules/rxjs/dist/esm/internal/util/isAsyncIterable.js","./node_modules/rxjs/dist/esm/internal/util/isDate.js","./node_modules/rxjs/dist/esm/internal/util/isFunction.js","./node_modules/rxjs/dist/esm/internal/util/isInteropObservable.js","./node_modules/rxjs/dist/esm/internal/util/isIterable.js","./node_modules/rxjs/dist/esm/internal/util/isPromise.js","./node_modules/rxjs/dist/esm/internal/util/isReadableStreamLike.js","./node_modules/rxjs/dist/esm/internal/util/isScheduler.js","./node_modules/rxjs/dist/esm/internal/util/lift.js","./node_modules/rxjs/dist/esm/internal/util/mapOneOrManyArgs.js","./node_modules/rxjs/dist/esm/internal/util/noop.js","./node_modules/rxjs/dist/esm/internal/util/pipe.js","./node_modules/rxjs/dist/esm/internal/util/reportUnhandledError.js","./node_modules/rxjs/dist/esm/internal/util/throwUnobservableError.js","./node_modules/sweetalert2/dist/sweetalert2.all.js","./node_modules/text-mask-core/dist/textMaskCore.js","./node_modules/zone.js/fesm2015/zone.js","./node_modules/@angular/common/locales/ lazy ^\\.\\/.*\\.mjs$ namespace object","./node_modules/ngx-bootstrap/chronos/esm2020/i18n/ lazy ^\\.\\/.*\\.mjs$ namespace object","./node_modules/core-js/es/array/index.js","./node_modules/core-js/es/date/index.js","./node_modules/core-js/es/function/index.js","./node_modules/core-js/es/map/index.js","./node_modules/core-js/es/math/index.js","./node_modules/core-js/es/number/index.js","./node_modules/core-js/es/object/index.js","./node_modules/core-js/es/parse-float.js","./node_modules/core-js/es/parse-int.js","./node_modules/core-js/es/reflect/index.js","./node_modules/core-js/es/regexp/index.js","./node_modules/core-js/es/set/index.js","./node_modules/core-js/es/string/index.js","./node_modules/core-js/es/symbol/index.js","./node_modules/core-js/internals/a-callable.js","./node_modules/core-js/internals/a-constructor.js","./node_modules/core-js/internals/a-possible-prototype.js","./node_modules/core-js/internals/add-to-unscopables.js","./node_modules/core-js/internals/advance-string-index.js","./node_modules/core-js/internals/an-instance.js","./node_modules/core-js/internals/an-object.js","./node_modules/core-js/internals/array-buffer-non-extensible.js","./node_modules/core-js/internals/array-copy-within.js","./node_modules/core-js/internals/array-fill.js","./node_modules/core-js/internals/array-for-each.js","./node_modules/core-js/internals/array-from-constructor-and-list.js","./node_modules/core-js/internals/array-from.js","./node_modules/core-js/internals/array-includes.js","./node_modules/core-js/internals/array-iteration-from-last.js","./node_modules/core-js/internals/array-iteration.js","./node_modules/core-js/internals/array-last-index-of.js","./node_modules/core-js/internals/array-method-has-species-support.js","./node_modules/core-js/internals/array-method-is-strict.js","./node_modules/core-js/internals/array-reduce.js","./node_modules/core-js/internals/array-set-length.js","./node_modules/core-js/internals/array-slice-simple.js","./node_modules/core-js/internals/array-slice.js","./node_modules/core-js/internals/array-sort.js","./node_modules/core-js/internals/array-species-constructor.js","./node_modules/core-js/internals/array-species-create.js","./node_modules/core-js/internals/array-to-reversed.js","./node_modules/core-js/internals/array-with.js","./node_modules/core-js/internals/call-with-safe-iteration-closing.js","./node_modules/core-js/internals/check-correctness-of-iteration.js","./node_modules/core-js/internals/classof-raw.js","./node_modules/core-js/internals/classof.js","./node_modules/core-js/internals/collection-strong.js","./node_modules/core-js/internals/collection.js","./node_modules/core-js/internals/copy-constructor-properties.js","./node_modules/core-js/internals/correct-is-regexp-logic.js","./node_modules/core-js/internals/correct-prototype-getter.js","./node_modules/core-js/internals/create-html.js","./node_modules/core-js/internals/create-iter-result-object.js","./node_modules/core-js/internals/create-non-enumerable-property.js","./node_modules/core-js/internals/create-property-descriptor.js","./node_modules/core-js/internals/create-property.js","./node_modules/core-js/internals/date-to-iso-string.js","./node_modules/core-js/internals/date-to-primitive.js","./node_modules/core-js/internals/define-built-in-accessor.js","./node_modules/core-js/internals/define-built-in.js","./node_modules/core-js/internals/define-built-ins.js","./node_modules/core-js/internals/define-global-property.js","./node_modules/core-js/internals/delete-property-or-throw.js","./node_modules/core-js/internals/descriptors.js","./node_modules/core-js/internals/document-all.js","./node_modules/core-js/internals/document-create-element.js","./node_modules/core-js/internals/does-not-exceed-safe-integer.js","./node_modules/core-js/internals/engine-ff-version.js","./node_modules/core-js/internals/engine-is-ie-or-edge.js","./node_modules/core-js/internals/engine-is-node.js","./node_modules/core-js/internals/engine-user-agent.js","./node_modules/core-js/internals/engine-v8-version.js","./node_modules/core-js/internals/engine-webkit-version.js","./node_modules/core-js/internals/entry-virtual.js","./node_modules/core-js/internals/enum-bug-keys.js","./node_modules/core-js/internals/export.js","./node_modules/core-js/internals/fails.js","./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","./node_modules/core-js/internals/flatten-into-array.js","./node_modules/core-js/internals/freezing.js","./node_modules/core-js/internals/function-apply.js","./node_modules/core-js/internals/function-bind-context.js","./node_modules/core-js/internals/function-bind-native.js","./node_modules/core-js/internals/function-bind.js","./node_modules/core-js/internals/function-call.js","./node_modules/core-js/internals/function-name.js","./node_modules/core-js/internals/function-uncurry-this-accessor.js","./node_modules/core-js/internals/function-uncurry-this-clause.js","./node_modules/core-js/internals/function-uncurry-this.js","./node_modules/core-js/internals/get-built-in.js","./node_modules/core-js/internals/get-iterator-method.js","./node_modules/core-js/internals/get-iterator.js","./node_modules/core-js/internals/get-json-replacer-function.js","./node_modules/core-js/internals/get-method.js","./node_modules/core-js/internals/get-substitution.js","./node_modules/core-js/internals/global.js","./node_modules/core-js/internals/has-own-property.js","./node_modules/core-js/internals/hidden-keys.js","./node_modules/core-js/internals/html.js","./node_modules/core-js/internals/ie8-dom-define.js","./node_modules/core-js/internals/indexed-object.js","./node_modules/core-js/internals/inherit-if-required.js","./node_modules/core-js/internals/inspect-source.js","./node_modules/core-js/internals/internal-metadata.js","./node_modules/core-js/internals/internal-state.js","./node_modules/core-js/internals/is-array-iterator-method.js","./node_modules/core-js/internals/is-array.js","./node_modules/core-js/internals/is-callable.js","./node_modules/core-js/internals/is-constructor.js","./node_modules/core-js/internals/is-data-descriptor.js","./node_modules/core-js/internals/is-forced.js","./node_modules/core-js/internals/is-integral-number.js","./node_modules/core-js/internals/is-null-or-undefined.js","./node_modules/core-js/internals/is-object.js","./node_modules/core-js/internals/is-pure.js","./node_modules/core-js/internals/is-regexp.js","./node_modules/core-js/internals/is-symbol.js","./node_modules/core-js/internals/iterate.js","./node_modules/core-js/internals/iterator-close.js","./node_modules/core-js/internals/iterator-create-constructor.js","./node_modules/core-js/internals/iterator-define.js","./node_modules/core-js/internals/iterators-core.js","./node_modules/core-js/internals/iterators.js","./node_modules/core-js/internals/length-of-array-like.js","./node_modules/core-js/internals/make-built-in.js","./node_modules/core-js/internals/math-expm1.js","./node_modules/core-js/internals/math-fround.js","./node_modules/core-js/internals/math-log10.js","./node_modules/core-js/internals/math-log1p.js","./node_modules/core-js/internals/math-sign.js","./node_modules/core-js/internals/math-trunc.js","./node_modules/core-js/internals/not-a-regexp.js","./node_modules/core-js/internals/number-is-finite.js","./node_modules/core-js/internals/number-parse-float.js","./node_modules/core-js/internals/number-parse-int.js","./node_modules/core-js/internals/object-assign.js","./node_modules/core-js/internals/object-create.js","./node_modules/core-js/internals/object-define-properties.js","./node_modules/core-js/internals/object-define-property.js","./node_modules/core-js/internals/object-get-own-property-descriptor.js","./node_modules/core-js/internals/object-get-own-property-names-external.js","./node_modules/core-js/internals/object-get-own-property-names.js","./node_modules/core-js/internals/object-get-own-property-symbols.js","./node_modules/core-js/internals/object-get-prototype-of.js","./node_modules/core-js/internals/object-is-extensible.js","./node_modules/core-js/internals/object-is-prototype-of.js","./node_modules/core-js/internals/object-keys-internal.js","./node_modules/core-js/internals/object-keys.js","./node_modules/core-js/internals/object-property-is-enumerable.js","./node_modules/core-js/internals/object-prototype-accessors-forced.js","./node_modules/core-js/internals/object-set-prototype-of.js","./node_modules/core-js/internals/object-to-array.js","./node_modules/core-js/internals/object-to-string.js","./node_modules/core-js/internals/ordinary-to-primitive.js","./node_modules/core-js/internals/own-keys.js","./node_modules/core-js/internals/path.js","./node_modules/core-js/internals/proxy-accessor.js","./node_modules/core-js/internals/regexp-exec-abstract.js","./node_modules/core-js/internals/regexp-exec.js","./node_modules/core-js/internals/regexp-flags.js","./node_modules/core-js/internals/regexp-get-flags.js","./node_modules/core-js/internals/regexp-sticky-helpers.js","./node_modules/core-js/internals/regexp-unsupported-dot-all.js","./node_modules/core-js/internals/regexp-unsupported-ncg.js","./node_modules/core-js/internals/require-object-coercible.js","./node_modules/core-js/internals/same-value.js","./node_modules/core-js/internals/set-species.js","./node_modules/core-js/internals/set-to-string-tag.js","./node_modules/core-js/internals/shared-key.js","./node_modules/core-js/internals/shared-store.js","./node_modules/core-js/internals/shared.js","./node_modules/core-js/internals/species-constructor.js","./node_modules/core-js/internals/string-html-forced.js","./node_modules/core-js/internals/string-multibyte.js","./node_modules/core-js/internals/string-pad-webkit-bug.js","./node_modules/core-js/internals/string-pad.js","./node_modules/core-js/internals/string-repeat.js","./node_modules/core-js/internals/string-trim-end.js","./node_modules/core-js/internals/string-trim-forced.js","./node_modules/core-js/internals/string-trim-start.js","./node_modules/core-js/internals/string-trim.js","./node_modules/core-js/internals/symbol-constructor-detection.js","./node_modules/core-js/internals/symbol-define-to-primitive.js","./node_modules/core-js/internals/symbol-registry-detection.js","./node_modules/core-js/internals/this-number-value.js","./node_modules/core-js/internals/to-absolute-index.js","./node_modules/core-js/internals/to-indexed-object.js","./node_modules/core-js/internals/to-integer-or-infinity.js","./node_modules/core-js/internals/to-length.js","./node_modules/core-js/internals/to-object.js","./node_modules/core-js/internals/to-primitive.js","./node_modules/core-js/internals/to-property-key.js","./node_modules/core-js/internals/to-string-tag-support.js","./node_modules/core-js/internals/to-string.js","./node_modules/core-js/internals/try-to-string.js","./node_modules/core-js/internals/uid.js","./node_modules/core-js/internals/use-symbol-as-uid.js","./node_modules/core-js/internals/v8-prototype-define-bug.js","./node_modules/core-js/internals/weak-map-basic-detection.js","./node_modules/core-js/internals/well-known-symbol-define.js","./node_modules/core-js/internals/well-known-symbol-wrapped.js","./node_modules/core-js/internals/well-known-symbol.js","./node_modules/core-js/internals/whitespaces.js","./node_modules/core-js/modules/es.array.at.js","./node_modules/core-js/modules/es.array.concat.js","./node_modules/core-js/modules/es.array.copy-within.js","./node_modules/core-js/modules/es.array.every.js","./node_modules/core-js/modules/es.array.fill.js","./node_modules/core-js/modules/es.array.filter.js","./node_modules/core-js/modules/es.array.find-index.js","./node_modules/core-js/modules/es.array.find-last-index.js","./node_modules/core-js/modules/es.array.find-last.js","./node_modules/core-js/modules/es.array.find.js","./node_modules/core-js/modules/es.array.flat-map.js","./node_modules/core-js/modules/es.array.flat.js","./node_modules/core-js/modules/es.array.for-each.js","./node_modules/core-js/modules/es.array.from.js","./node_modules/core-js/modules/es.array.includes.js","./node_modules/core-js/modules/es.array.index-of.js","./node_modules/core-js/modules/es.array.is-array.js","./node_modules/core-js/modules/es.array.iterator.js","./node_modules/core-js/modules/es.array.join.js","./node_modules/core-js/modules/es.array.last-index-of.js","./node_modules/core-js/modules/es.array.map.js","./node_modules/core-js/modules/es.array.of.js","./node_modules/core-js/modules/es.array.push.js","./node_modules/core-js/modules/es.array.reduce-right.js","./node_modules/core-js/modules/es.array.reduce.js","./node_modules/core-js/modules/es.array.reverse.js","./node_modules/core-js/modules/es.array.slice.js","./node_modules/core-js/modules/es.array.some.js","./node_modules/core-js/modules/es.array.sort.js","./node_modules/core-js/modules/es.array.species.js","./node_modules/core-js/modules/es.array.splice.js","./node_modules/core-js/modules/es.array.to-reversed.js","./node_modules/core-js/modules/es.array.to-sorted.js","./node_modules/core-js/modules/es.array.to-spliced.js","./node_modules/core-js/modules/es.array.unscopables.flat-map.js","./node_modules/core-js/modules/es.array.unscopables.flat.js","./node_modules/core-js/modules/es.array.unshift.js","./node_modules/core-js/modules/es.array.with.js","./node_modules/core-js/modules/es.date.get-year.js","./node_modules/core-js/modules/es.date.now.js","./node_modules/core-js/modules/es.date.set-year.js","./node_modules/core-js/modules/es.date.to-gmt-string.js","./node_modules/core-js/modules/es.date.to-iso-string.js","./node_modules/core-js/modules/es.date.to-json.js","./node_modules/core-js/modules/es.date.to-primitive.js","./node_modules/core-js/modules/es.date.to-string.js","./node_modules/core-js/modules/es.function.bind.js","./node_modules/core-js/modules/es.function.has-instance.js","./node_modules/core-js/modules/es.function.name.js","./node_modules/core-js/modules/es.json.stringify.js","./node_modules/core-js/modules/es.json.to-string-tag.js","./node_modules/core-js/modules/es.map.constructor.js","./node_modules/core-js/modules/es.map.js","./node_modules/core-js/modules/es.math.acosh.js","./node_modules/core-js/modules/es.math.asinh.js","./node_modules/core-js/modules/es.math.atanh.js","./node_modules/core-js/modules/es.math.cbrt.js","./node_modules/core-js/modules/es.math.clz32.js","./node_modules/core-js/modules/es.math.cosh.js","./node_modules/core-js/modules/es.math.expm1.js","./node_modules/core-js/modules/es.math.fround.js","./node_modules/core-js/modules/es.math.hypot.js","./node_modules/core-js/modules/es.math.imul.js","./node_modules/core-js/modules/es.math.log10.js","./node_modules/core-js/modules/es.math.log1p.js","./node_modules/core-js/modules/es.math.log2.js","./node_modules/core-js/modules/es.math.sign.js","./node_modules/core-js/modules/es.math.sinh.js","./node_modules/core-js/modules/es.math.tanh.js","./node_modules/core-js/modules/es.math.to-string-tag.js","./node_modules/core-js/modules/es.math.trunc.js","./node_modules/core-js/modules/es.number.constructor.js","./node_modules/core-js/modules/es.number.epsilon.js","./node_modules/core-js/modules/es.number.is-finite.js","./node_modules/core-js/modules/es.number.is-integer.js","./node_modules/core-js/modules/es.number.is-nan.js","./node_modules/core-js/modules/es.number.is-safe-integer.js","./node_modules/core-js/modules/es.number.max-safe-integer.js","./node_modules/core-js/modules/es.number.min-safe-integer.js","./node_modules/core-js/modules/es.number.parse-float.js","./node_modules/core-js/modules/es.number.parse-int.js","./node_modules/core-js/modules/es.number.to-exponential.js","./node_modules/core-js/modules/es.number.to-fixed.js","./node_modules/core-js/modules/es.number.to-precision.js","./node_modules/core-js/modules/es.object.assign.js","./node_modules/core-js/modules/es.object.create.js","./node_modules/core-js/modules/es.object.define-getter.js","./node_modules/core-js/modules/es.object.define-properties.js","./node_modules/core-js/modules/es.object.define-property.js","./node_modules/core-js/modules/es.object.define-setter.js","./node_modules/core-js/modules/es.object.entries.js","./node_modules/core-js/modules/es.object.freeze.js","./node_modules/core-js/modules/es.object.from-entries.js","./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","./node_modules/core-js/modules/es.object.get-own-property-names.js","./node_modules/core-js/modules/es.object.get-own-property-symbols.js","./node_modules/core-js/modules/es.object.get-prototype-of.js","./node_modules/core-js/modules/es.object.has-own.js","./node_modules/core-js/modules/es.object.is-extensible.js","./node_modules/core-js/modules/es.object.is-frozen.js","./node_modules/core-js/modules/es.object.is-sealed.js","./node_modules/core-js/modules/es.object.is.js","./node_modules/core-js/modules/es.object.keys.js","./node_modules/core-js/modules/es.object.lookup-getter.js","./node_modules/core-js/modules/es.object.lookup-setter.js","./node_modules/core-js/modules/es.object.prevent-extensions.js","./node_modules/core-js/modules/es.object.proto.js","./node_modules/core-js/modules/es.object.seal.js","./node_modules/core-js/modules/es.object.set-prototype-of.js","./node_modules/core-js/modules/es.object.to-string.js","./node_modules/core-js/modules/es.object.values.js","./node_modules/core-js/modules/es.parse-float.js","./node_modules/core-js/modules/es.parse-int.js","./node_modules/core-js/modules/es.reflect.apply.js","./node_modules/core-js/modules/es.reflect.construct.js","./node_modules/core-js/modules/es.reflect.define-property.js","./node_modules/core-js/modules/es.reflect.delete-property.js","./node_modules/core-js/modules/es.reflect.get-own-property-descriptor.js","./node_modules/core-js/modules/es.reflect.get-prototype-of.js","./node_modules/core-js/modules/es.reflect.get.js","./node_modules/core-js/modules/es.reflect.has.js","./node_modules/core-js/modules/es.reflect.is-extensible.js","./node_modules/core-js/modules/es.reflect.own-keys.js","./node_modules/core-js/modules/es.reflect.prevent-extensions.js","./node_modules/core-js/modules/es.reflect.set-prototype-of.js","./node_modules/core-js/modules/es.reflect.set.js","./node_modules/core-js/modules/es.reflect.to-string-tag.js","./node_modules/core-js/modules/es.regexp.constructor.js","./node_modules/core-js/modules/es.regexp.dot-all.js","./node_modules/core-js/modules/es.regexp.exec.js","./node_modules/core-js/modules/es.regexp.flags.js","./node_modules/core-js/modules/es.regexp.sticky.js","./node_modules/core-js/modules/es.regexp.test.js","./node_modules/core-js/modules/es.regexp.to-string.js","./node_modules/core-js/modules/es.set.constructor.js","./node_modules/core-js/modules/es.set.js","./node_modules/core-js/modules/es.string.anchor.js","./node_modules/core-js/modules/es.string.at-alternative.js","./node_modules/core-js/modules/es.string.big.js","./node_modules/core-js/modules/es.string.blink.js","./node_modules/core-js/modules/es.string.bold.js","./node_modules/core-js/modules/es.string.code-point-at.js","./node_modules/core-js/modules/es.string.ends-with.js","./node_modules/core-js/modules/es.string.fixed.js","./node_modules/core-js/modules/es.string.fontcolor.js","./node_modules/core-js/modules/es.string.fontsize.js","./node_modules/core-js/modules/es.string.from-code-point.js","./node_modules/core-js/modules/es.string.includes.js","./node_modules/core-js/modules/es.string.italics.js","./node_modules/core-js/modules/es.string.iterator.js","./node_modules/core-js/modules/es.string.link.js","./node_modules/core-js/modules/es.string.match-all.js","./node_modules/core-js/modules/es.string.match.js","./node_modules/core-js/modules/es.string.pad-end.js","./node_modules/core-js/modules/es.string.pad-start.js","./node_modules/core-js/modules/es.string.raw.js","./node_modules/core-js/modules/es.string.repeat.js","./node_modules/core-js/modules/es.string.replace-all.js","./node_modules/core-js/modules/es.string.replace.js","./node_modules/core-js/modules/es.string.search.js","./node_modules/core-js/modules/es.string.small.js","./node_modules/core-js/modules/es.string.split.js","./node_modules/core-js/modules/es.string.starts-with.js","./node_modules/core-js/modules/es.string.strike.js","./node_modules/core-js/modules/es.string.sub.js","./node_modules/core-js/modules/es.string.substr.js","./node_modules/core-js/modules/es.string.sup.js","./node_modules/core-js/modules/es.string.trim-end.js","./node_modules/core-js/modules/es.string.trim-left.js","./node_modules/core-js/modules/es.string.trim-right.js","./node_modules/core-js/modules/es.string.trim-start.js","./node_modules/core-js/modules/es.string.trim.js","./node_modules/core-js/modules/es.symbol.async-iterator.js","./node_modules/core-js/modules/es.symbol.constructor.js","./node_modules/core-js/modules/es.symbol.description.js","./node_modules/core-js/modules/es.symbol.for.js","./node_modules/core-js/modules/es.symbol.has-instance.js","./node_modules/core-js/modules/es.symbol.is-concat-spreadable.js","./node_modules/core-js/modules/es.symbol.iterator.js","./node_modules/core-js/modules/es.symbol.js","./node_modules/core-js/modules/es.symbol.key-for.js","./node_modules/core-js/modules/es.symbol.match-all.js","./node_modules/core-js/modules/es.symbol.match.js","./node_modules/core-js/modules/es.symbol.replace.js","./node_modules/core-js/modules/es.symbol.search.js","./node_modules/core-js/modules/es.symbol.species.js","./node_modules/core-js/modules/es.symbol.split.js","./node_modules/core-js/modules/es.symbol.to-primitive.js","./node_modules/core-js/modules/es.symbol.to-string-tag.js","./node_modules/core-js/modules/es.symbol.unscopables.js","./node_modules/tslib/tslib.es6.js","./node_modules/@angular/animations/fesm2015/animations.mjs","./node_modules/@angular/common/fesm2015/common.mjs","./node_modules/@angular/common/fesm2015/http.mjs","./node_modules/@angular/core/fesm2015/core.mjs","./node_modules/@angular/forms/fesm2015/forms.mjs","./node_modules/@angular/platform-browser/fesm2015/platform-browser.mjs","./node_modules/rxjs/dist/esm/internal/operators/refCount.js","./node_modules/rxjs/dist/esm/internal/observable/ConnectableObservable.js","./node_modules/rxjs/dist/esm/internal/operators/takeLast.js","./node_modules/rxjs/dist/esm/internal/operators/last.js","./node_modules/@angular/router/fesm2015/router.mjs","./node_modules/rxjs/dist/esm/internal/operators/takeWhile.js","./node_modules/@videogular/ngx-videogular/fesm2015/videogular-ngx-videogular-buffering.mjs","./node_modules/@videogular/ngx-videogular/fesm2015/videogular-ngx-videogular-controls.mjs","./node_modules/@videogular/ngx-videogular/fesm2015/videogular-ngx-videogular-core.mjs","./node_modules/@videogular/ngx-videogular/fesm2015/videogular-ngx-videogular-overlay-play.mjs","./node_modules/abp-ng2-module/fesm2015/abp-ng2-module.mjs","./node_modules/just-compare/index.mjs","./node_modules/lodash-es/_assocIndexOf.js","./node_modules/lodash-es/_listCacheDelete.js","./node_modules/lodash-es/_ListCache.js","./node_modules/lodash-es/_listCacheClear.js","./node_modules/lodash-es/_listCacheGet.js","./node_modules/lodash-es/_listCacheHas.js","./node_modules/lodash-es/_listCacheSet.js","./node_modules/lodash-es/_Map.js","./node_modules/lodash-es/_nativeCreate.js","./node_modules/lodash-es/_hashGet.js","./node_modules/lodash-es/_hashHas.js","./node_modules/lodash-es/_Hash.js","./node_modules/lodash-es/_hashClear.js","./node_modules/lodash-es/_hashDelete.js","./node_modules/lodash-es/_hashSet.js","./node_modules/lodash-es/_isKeyable.js","./node_modules/lodash-es/_getMapData.js","./node_modules/lodash-es/_MapCache.js","./node_modules/lodash-es/_mapCacheClear.js","./node_modules/lodash-es/_mapCacheDelete.js","./node_modules/lodash-es/_mapCacheGet.js","./node_modules/lodash-es/_mapCacheHas.js","./node_modules/lodash-es/_mapCacheSet.js","./node_modules/lodash-es/_Stack.js","./node_modules/lodash-es/_stackClear.js","./node_modules/lodash-es/_stackDelete.js","./node_modules/lodash-es/_stackGet.js","./node_modules/lodash-es/_stackHas.js","./node_modules/lodash-es/_stackSet.js","./node_modules/lodash-es/_Symbol.js","./node_modules/lodash-es/_Uint8Array.js","./node_modules/lodash-es/_arrayFilter.js","./node_modules/lodash-es/_arrayLikeKeys.js","./node_modules/lodash-es/_baseTimes.js","./node_modules/lodash-es/_arrayMap.js","./node_modules/lodash-es/_arrayPush.js","./node_modules/lodash-es/_baseEach.js","./node_modules/lodash-es/_createBaseEach.js","./node_modules/lodash-es/_baseForOwn.js","./node_modules/lodash-es/_isFlattenable.js","./node_modules/lodash-es/_baseFlatten.js","./node_modules/lodash-es/_baseFor.js","./node_modules/lodash-es/_createBaseFor.js","./node_modules/lodash-es/_baseGet.js","./node_modules/lodash-es/_getRawTag.js","./node_modules/lodash-es/_objectToString.js","./node_modules/lodash-es/_baseGetTag.js","./node_modules/lodash-es/_SetCache.js","./node_modules/lodash-es/_setCacheAdd.js","./node_modules/lodash-es/_setCacheHas.js","./node_modules/lodash-es/_arraySome.js","./node_modules/lodash-es/_cacheHas.js","./node_modules/lodash-es/_equalArrays.js","./node_modules/lodash-es/_mapToArray.js","./node_modules/lodash-es/_setToArray.js","./node_modules/lodash-es/_equalByTag.js","./node_modules/lodash-es/_getSymbols.js","./node_modules/lodash-es/stubArray.js","./node_modules/lodash-es/_getAllKeys.js","./node_modules/lodash-es/_baseGetAllKeys.js","./node_modules/lodash-es/_equalObjects.js","./node_modules/lodash-es/_DataView.js","./node_modules/lodash-es/_Promise.js","./node_modules/lodash-es/_Set.js","./node_modules/lodash-es/_WeakMap.js","./node_modules/lodash-es/_getTag.js","./node_modules/lodash-es/_baseIsEqualDeep.js","./node_modules/lodash-es/_baseIsEqual.js","./node_modules/lodash-es/_isStrictComparable.js","./node_modules/lodash-es/_matchesStrictComparable.js","./node_modules/lodash-es/_baseMatches.js","./node_modules/lodash-es/_getMatchData.js","./node_modules/lodash-es/_baseIsMatch.js","./node_modules/lodash-es/get.js","./node_modules/lodash-es/_baseHasIn.js","./node_modules/lodash-es/_hasPath.js","./node_modules/lodash-es/hasIn.js","./node_modules/lodash-es/_baseMatchesProperty.js","./node_modules/lodash-es/_baseProperty.js","./node_modules/lodash-es/property.js","./node_modules/lodash-es/_basePropertyDeep.js","./node_modules/lodash-es/_baseIteratee.js","./node_modules/lodash-es/_baseMap.js","./node_modules/lodash-es/_baseAssignValue.js","./node_modules/lodash-es/_assignMergeValue.js","./node_modules/lodash-es/_cloneBuffer.js","./node_modules/lodash-es/_cloneArrayBuffer.js","./node_modules/lodash-es/_cloneTypedArray.js","./node_modules/lodash-es/_baseCreate.js","./node_modules/lodash-es/_getPrototype.js","./node_modules/lodash-es/isPlainObject.js","./node_modules/lodash-es/_safeGet.js","./node_modules/lodash-es/_assignValue.js","./node_modules/lodash-es/_baseKeysIn.js","./node_modules/lodash-es/_nativeKeysIn.js","./node_modules/lodash-es/keysIn.js","./node_modules/lodash-es/toPlainObject.js","./node_modules/lodash-es/_copyObject.js","./node_modules/lodash-es/_baseMergeDeep.js","./node_modules/lodash-es/isArrayLikeObject.js","./node_modules/lodash-es/_initCloneObject.js","./node_modules/lodash-es/_baseMerge.js","./node_modules/lodash-es/_apply.js","./node_modules/lodash-es/_overRest.js","./node_modules/lodash-es/constant.js","./node_modules/lodash-es/_shortOut.js","./node_modules/lodash-es/_setToString.js","./node_modules/lodash-es/_baseSetToString.js","./node_modules/lodash-es/_baseRest.js","./node_modules/lodash-es/_baseUnary.js","./node_modules/lodash-es/memoize.js","./node_modules/lodash-es/_stringToPath.js","./node_modules/lodash-es/_memoizeCapped.js","./node_modules/lodash-es/_castPath.js","./node_modules/lodash-es/_copyArray.js","./node_modules/lodash-es/_createAssigner.js","./node_modules/lodash-es/_defineProperty.js","./node_modules/lodash-es/_freeGlobal.js","./node_modules/lodash-es/_isMasked.js","./node_modules/lodash-es/_coreJsData.js","./node_modules/lodash-es/_baseIsNative.js","./node_modules/lodash-es/_getNative.js","./node_modules/lodash-es/_getValue.js","./node_modules/lodash-es/_isIndex.js","./node_modules/lodash-es/_isIterateeCall.js","./node_modules/lodash-es/_isKey.js","./node_modules/lodash-es/_isPrototype.js","./node_modules/lodash-es/_overArg.js","./node_modules/lodash-es/_root.js","./node_modules/lodash-es/_toKey.js","./node_modules/lodash-es/_toSource.js","./node_modules/lodash-es/eq.js","./node_modules/lodash-es/_baseFilter.js","./node_modules/lodash-es/filter.js","./node_modules/lodash-es/find.js","./node_modules/lodash-es/_createFind.js","./node_modules/lodash-es/_trimmedEndIndex.js","./node_modules/lodash-es/_baseTrim.js","./node_modules/lodash-es/toNumber.js","./node_modules/lodash-es/toFinite.js","./node_modules/lodash-es/findIndex.js","./node_modules/lodash-es/toInteger.js","./node_modules/lodash-es/_baseFindIndex.js","./node_modules/lodash-es/_arrayEach.js","./node_modules/lodash-es/forEach.js","./node_modules/lodash-es/_castFunction.js","./node_modules/lodash-es/identity.js","./node_modules/lodash-es/_baseIsArguments.js","./node_modules/lodash-es/isArguments.js","./node_modules/lodash-es/isArray.js","./node_modules/lodash-es/isArrayLike.js","./node_modules/lodash-es/isBuffer.js","./node_modules/lodash-es/stubFalse.js","./node_modules/lodash-es/isFunction.js","./node_modules/lodash-es/isLength.js","./node_modules/lodash-es/isObject.js","./node_modules/lodash-es/isObjectLike.js","./node_modules/lodash-es/isSymbol.js","./node_modules/lodash-es/_baseIsTypedArray.js","./node_modules/lodash-es/_nodeUtil.js","./node_modules/lodash-es/isTypedArray.js","./node_modules/lodash-es/_nativeKeys.js","./node_modules/lodash-es/_baseKeys.js","./node_modules/lodash-es/keys.js","./node_modules/lodash-es/map.js","./node_modules/lodash-es/merge.js","./node_modules/lodash-es/_baseToString.js","./node_modules/lodash-es/toString.js","./node_modules/luxon/src/errors.js","./node_modules/luxon/src/impl/formats.js","./node_modules/luxon/src/zone.js","./node_modules/luxon/src/zones/systemZone.js","./node_modules/luxon/src/zones/IANAZone.js","./node_modules/luxon/src/impl/locale.js","./node_modules/luxon/src/impl/english.js","./node_modules/luxon/src/zones/fixedOffsetZone.js","./node_modules/luxon/src/zones/invalidZone.js","./node_modules/luxon/src/impl/zoneUtil.js","./node_modules/luxon/src/impl/util.js","./node_modules/luxon/src/settings.js","./node_modules/luxon/src/impl/formatter.js","./node_modules/luxon/src/impl/invalid.js","./node_modules/luxon/src/impl/regexParser.js","./node_modules/luxon/src/duration.js","./node_modules/luxon/src/interval.js","./node_modules/luxon/src/info.js","./node_modules/luxon/src/impl/diff.js","./node_modules/luxon/src/impl/digits.js","./node_modules/luxon/src/impl/tokenParser.js","./node_modules/luxon/src/impl/conversions.js","./node_modules/luxon/src/datetime.js","./node_modules/luxon/src/luxon.js","./node_modules/ngx-bootstrap/chronos/fesm2015/ngx-bootstrap-chronos.mjs","./node_modules/ngx-bootstrap/component-loader/fesm2015/ngx-bootstrap-component-loader.mjs","./node_modules/rxjs/dist/esm/internal/scheduler/queue.js","./node_modules/rxjs/dist/esm/internal/scheduler/QueueScheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/QueueAction.js","./node_modules/ngx-bootstrap/mini-ngrx/fesm2015/ngx-bootstrap-mini-ngrx.mjs","./node_modules/ngx-bootstrap/timepicker/fesm2015/ngx-bootstrap-timepicker.mjs","./node_modules/ngx-bootstrap/datepicker/fesm2015/ngx-bootstrap-datepicker.mjs","./node_modules/ngx-bootstrap/dropdown/fesm2015/ngx-bootstrap-dropdown.mjs","./node_modules/ngx-bootstrap/focus-trap/fesm2015/ngx-bootstrap-focus-trap.mjs","./node_modules/ngx-bootstrap/modal/fesm2015/ngx-bootstrap-modal.mjs","./node_modules/ngx-bootstrap/popover/fesm2015/ngx-bootstrap-popover.mjs","./node_modules/ngx-bootstrap/positioning/fesm2015/ngx-bootstrap-positioning.mjs","./node_modules/ngx-bootstrap/tabs/fesm2015/ngx-bootstrap-tabs.mjs","./node_modules/ngx-bootstrap/tooltip/fesm2015/ngx-bootstrap-tooltip.mjs","./node_modules/ngx-bootstrap/utils/fesm2015/ngx-bootstrap-utils.mjs","./node_modules/ngx-image-cropper/fesm2015/ngx-image-cropper.mjs","./node_modules/ngx-spinner/fesm2015/ngx-spinner.mjs","./node_modules/primeng/fesm2015/primeng-api.mjs","./node_modules/primeng/fesm2015/primeng-autocomplete.mjs","./node_modules/primeng/fesm2015/primeng-autofocus.mjs","./node_modules/primeng/fesm2015/primeng-button.mjs","./node_modules/primeng/fesm2015/primeng-dom.mjs","./node_modules/primeng/fesm2015/primeng-overlay.mjs","./node_modules/primeng/fesm2015/primeng-dropdown.mjs","./node_modules/primeng/fesm2015/primeng-messages.mjs","./node_modules/primeng/fesm2015/primeng-fileupload.mjs","./node_modules/primeng/fesm2015/primeng-inputnumber.mjs","./node_modules/primeng/fesm2015/primeng-inputtext.mjs","./node_modules/primeng/fesm2015/primeng-paginator.mjs","./node_modules/primeng/fesm2015/primeng-progressbar.mjs","./node_modules/primeng/fesm2015/primeng-ripple.mjs","./node_modules/primeng/fesm2015/primeng-scroller.mjs","./node_modules/primeng/fesm2015/primeng-calendar.mjs","./node_modules/primeng/fesm2015/primeng-selectbutton.mjs","./node_modules/primeng/fesm2015/primeng-tristatecheckbox.mjs","./node_modules/primeng/fesm2015/primeng-table.mjs","./node_modules/primeng/fesm2015/primeng-tooltip.mjs","./node_modules/primeng/fesm2015/primeng-utils.mjs"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { AppAuthService } from '@app/shared/common/auth/app-auth.service';\r\nimport { AppUrlService } from '@shared/common/nav/app-url.service';\r\nimport {\r\n AccountServiceProxy,\r\n ImpersonateUserInput,\r\n ImpersonateTenantInput,\r\n ImpersonateOutput,\r\n DelegatedImpersonateInput,\r\n} from '@shared/service-proxies/service-proxies';\r\n\r\n@Injectable()\r\nexport class ImpersonationService {\r\n constructor(\r\n private _accountService: AccountServiceProxy,\r\n private _appUrlService: AppUrlService,\r\n private _authService: AppAuthService\r\n ) {}\r\n\r\n impersonateTenant(userId: number, tenantId?: number): void {\r\n const input = new ImpersonateTenantInput();\r\n input.userId = userId;\r\n input.tenantId = tenantId;\r\n\r\n this._accountService.impersonateTenant(input).subscribe((result: ImpersonateOutput) => {\r\n let targetUrl =\r\n this.getAppRootUrl(result) +\r\n '?impersonationToken=' +\r\n result.impersonationToken;\r\n if (input.tenantId) {\r\n targetUrl = targetUrl + '&tenantId=' + input.tenantId;\r\n }\r\n\r\n this._authService.logout(true, targetUrl);\r\n });\r\n }\r\n\r\n impersonateUser(userId: number, tenantId: number): void {\r\n const input = new ImpersonateUserInput();\r\n input.userId = userId;\r\n input.tenantId = tenantId;\r\n\r\n this._accountService.impersonateUser(input).subscribe((result: ImpersonateOutput) => {\r\n let targetUrl =\r\n this.getAppRootUrl(result) +\r\n '?impersonationToken=' +\r\n result.impersonationToken;\r\n if (input.tenantId) {\r\n targetUrl = targetUrl + '&tenantId=' + input.tenantId;\r\n }\r\n\r\n this._authService.logout(true, targetUrl);\r\n });\r\n }\r\n\r\n delegatedImpersonate(userDelegationId: number, tenantId?: number): void {\r\n const input = new DelegatedImpersonateInput();\r\n input.userDelegationId = userDelegationId;\r\n\r\n this._accountService.delegatedImpersonate(input).subscribe((result: ImpersonateOutput) => {\r\n let targetUrl =\r\n this.getAppRootUrl(result) +\r\n '?impersonationToken=' +\r\n result.impersonationToken;\r\n targetUrl = targetUrl + '&userDelegationId=' + userDelegationId;\r\n if (tenantId) {\r\n targetUrl = targetUrl + '&tenantId=' + tenantId;\r\n }\r\n\r\n this._authService.logout(true, targetUrl);\r\n });\r\n }\r\n\r\n backToImpersonator(): void {\r\n this._accountService.backToImpersonator().subscribe((result: ImpersonateOutput) => {\r\n let targetUrl =\r\n this.getAppRootUrl(result) +\r\n '?impersonationToken=' +\r\n result.impersonationToken;\r\n if (abp.session.impersonatorTenantId) {\r\n targetUrl = targetUrl + '&tenantId=' + abp.session.impersonatorTenantId;\r\n }\r\n\r\n this._authService.logout(true, targetUrl);\r\n });\r\n }\r\n\r\n getAppRootUrl(result: ImpersonateOutput): string{\r\n return this._appUrlService.getAppRootUrlOfTenant(result.tenancyName) + 'index.html';\r\n }\r\n}\r\n","export class ElementStyleUtil {\r\n public static set(element: HTMLElement, property: string, value?: any, important?: boolean) {\r\n if (important) {\r\n element.style.setProperty(property, value, 'important')\r\n } else {\r\n element.style.setProperty(property, value)\r\n }\r\n }\r\n\r\n public static get(element: HTMLElement, attributeName: string) {\r\n return element.style.getPropertyValue(attributeName)\r\n }\r\n\r\n public static remove(element: HTMLElement, attibuteName: string) {\r\n element.style.removeProperty(attibuteName)\r\n }\r\n}\r\n","export class DataUtil {\r\n static store: Map> = new Map()\r\n\r\n public static set(instance: HTMLElement | undefined, key: string, data: unknown): void {\r\n if (!instance) {\r\n return\r\n }\r\n\r\n const instanceData = DataUtil.store.get(instance)\r\n if (!instanceData) {\r\n const newMap = new Map().set(key, data)\r\n DataUtil.store.set(instance, newMap)\r\n return\r\n }\r\n\r\n instanceData.set(key, data)\r\n }\r\n\r\n public static get(instance: HTMLElement, key: string): unknown | undefined {\r\n const instanceData = DataUtil.store.get(instance)\r\n if (!instanceData) {\r\n return\r\n }\r\n\r\n return instanceData.get(key)\r\n }\r\n\r\n public static remove(instance: HTMLElement, key: string): void {\r\n const instanceData = DataUtil.store.get(instance)\r\n if (!instanceData) {\r\n return\r\n }\r\n\r\n instanceData.delete(key)\r\n }\r\n\r\n public static removeOne(instance: HTMLElement, key: string, eventId: string) {\r\n const instanceData = DataUtil.store.get(instance)\r\n if (!instanceData) {\r\n return\r\n }\r\n\r\n const eventsIds = instanceData.get(key)\r\n if (!eventsIds) {\r\n return\r\n }\r\n\r\n const updateEventsIds = (eventsIds as string[]).filter((f) => f !== eventId)\r\n DataUtil.set(instance, key, updateEventsIds)\r\n }\r\n\r\n public static has(instance: HTMLElement, key: string): boolean {\r\n const instanceData = DataUtil.store.get(instance)\r\n if (instanceData) {\r\n return instanceData.has(key)\r\n }\r\n\r\n return false\r\n }\r\n\r\n public static getAllInstancesByKey(key: string) {\r\n const result: any[] = []\r\n DataUtil.store.forEach((val) => {\r\n val.forEach((v, k) => {\r\n if (k === key) {\r\n result.push(v)\r\n }\r\n })\r\n })\r\n return result\r\n }\r\n}\r\n","function getObjectPropertyValueByKey(obj: any, key: string): any | undefined {\r\n const map = new Map(Object.entries(obj))\r\n if (obj.hasOwnProperty(key) && map) {\r\n return map.get(key)\r\n }\r\n}\r\n\r\n/**\r\n * Generates unique ID for give prefix.\r\n * @param {string} prefix Prefix for generated ID\r\n * @returns {boolean}\r\n */\r\nfunction getUniqueIdWithPrefix(prefix: string | undefined): string {\r\n const result = Math.floor(Math.random() * new Date().getTime()).toString()\r\n if (!prefix) {\r\n return result\r\n }\r\n\r\n return `${prefix}${result}`\r\n}\r\n\r\n/* eslint-disable no-useless-escape */\r\nfunction stringSnakeToCamel(str: string): string {\r\n return str.replace(/(\\-\\w)/g, function (m) {\r\n return m[1].toUpperCase()\r\n })\r\n}\r\n\r\nfunction toJSON(value: string | JSON): JSON | undefined {\r\n if (typeof value !== 'string') {\r\n return value\r\n }\r\n\r\n if (!value) {\r\n return undefined\r\n }\r\n\r\n // (\"'\" => \"\\\"\");\r\n const result = value\r\n .toString()\r\n .split('')\r\n .map((el) => (el !== \"'\" ? el : '\"'))\r\n .join('')\r\n var jsonStr = result.replace(/(\\w+:)|(\\w+ :)/g, function (matched) {\r\n return '\"' + matched.substring(0, matched.length - 1) + '\":'\r\n })\r\n try {\r\n return JSON.parse(jsonStr)\r\n } catch {\r\n return undefined\r\n }\r\n}\r\n\r\nexport {getObjectPropertyValueByKey, getUniqueIdWithPrefix, stringSnakeToCamel, toJSON}\r\n","import {getUniqueIdWithPrefix} from './_TypesHelpers'\r\n\r\nexport class DOMEventHandlerUtil {\r\n public static store = new Map()\r\n\r\n public static on(\r\n element: HTMLElement,\r\n selector: string,\r\n eventName: string,\r\n callBack: any\r\n ): string {\r\n const eventId = getUniqueIdWithPrefix('DOMEvent')\r\n DOMEventHandlerUtil.store.set(eventId, (e: Event) => {\r\n const targets = element.querySelectorAll(selector)\r\n let target: HTMLElement | null = e.target as HTMLElement\r\n while (target && target !== element) {\r\n for (let i = 0; i < targets.length; i++) {\r\n if (target === targets[i]) {\r\n callBack.call(target, e)\r\n }\r\n }\r\n\r\n if (target.parentElement) {\r\n target = target.parentElement\r\n } else {\r\n target = null\r\n }\r\n }\r\n })\r\n element.addEventListener(eventName, DOMEventHandlerUtil.store.get(eventId))\r\n return eventId\r\n }\r\n\r\n public static off(element: HTMLElement, eventName: string, eventId: string): void {\r\n const funcFromStore = DOMEventHandlerUtil.store.get(eventId)\r\n if (!funcFromStore) {\r\n return\r\n }\r\n\r\n element.removeEventListener(eventName, funcFromStore)\r\n DOMEventHandlerUtil.store.delete(eventId)\r\n }\r\n\r\n public static one(element: HTMLElement, eventName: string, callBack: Function): void {\r\n element.addEventListener(eventName, function calee(e) {\r\n // remove event\r\n if (e.target && e.target.removeEventListener) {\r\n e.target.removeEventListener(e.type, calee)\r\n }\r\n\r\n if (element && e && e.currentTarget) {\r\n // if (element && element.removeEventListener && e && e.currentTarget) {\r\n e.currentTarget.removeEventListener(e.type, calee)\r\n }\r\n\r\n // call hander\r\n return callBack(e)\r\n })\r\n }\r\n}\r\n","import {DOMEventHandlerUtil} from './_DOMEventHandlerUtil'\r\nimport {ElementStyleUtil} from './_ElementStyleUtil'\r\nimport {getElementOffset} from './DomHelpers'\r\n\r\nexport class ElementAnimateUtil {\r\n public static animate(\r\n from: number,\r\n to: number,\r\n duration: number,\r\n update: Function,\r\n complete?: Function\r\n ) {\r\n /**\r\n * TinyAnimate.easings\r\n * Adapted from jQuery Easing\r\n */\r\n const easings = {\r\n linear: function (t: number, b: number, c: number, d: number) {\r\n return (c * t) / d + b\r\n },\r\n }\r\n\r\n // Create mock done() function if necessary\r\n if (!complete) {\r\n complete = function () {}\r\n }\r\n\r\n // Animation loop\r\n // let canceled = false;\r\n const change = to - from\r\n\r\n function loop(timestamp: number) {\r\n var time = (timestamp || +new Date()) - start\r\n\r\n if (time >= 0) {\r\n update(easings.linear(time, from, change, duration))\r\n }\r\n if (time >= 0 && time >= duration) {\r\n update(to)\r\n if (complete) {\r\n complete()\r\n }\r\n } else {\r\n window.requestAnimationFrame(loop)\r\n }\r\n }\r\n\r\n update(from)\r\n\r\n // Start animation loop\r\n const start =\r\n window.performance && window.performance.now ? window.performance.now() : +new Date()\r\n\r\n window.requestAnimationFrame(loop)\r\n }\r\n\r\n public static animateClass(\r\n element: HTMLElement,\r\n animationName: string,\r\n callBack?: Function\r\n ): void {\r\n const animateClasses = animationName.split(' ')\r\n animateClasses.forEach((cssClass) => element.classList.add(cssClass))\r\n DOMEventHandlerUtil.one(element, 'animationend', function () {\r\n animateClasses.forEach((cssClass) => element.classList.remove(cssClass))\r\n })\r\n\r\n if (callBack) {\r\n DOMEventHandlerUtil.one(element, 'animationend', callBack)\r\n }\r\n }\r\n\r\n public static transitionEnd(element: HTMLElement, callBack: Function) {\r\n DOMEventHandlerUtil.one(element, 'transitionend', callBack)\r\n }\r\n\r\n public static animationEnd(element: HTMLElement, callBack: Function) {\r\n DOMEventHandlerUtil.one(element, 'animationend', callBack)\r\n }\r\n\r\n public static animationDelay(element: HTMLElement, value: string) {\r\n ElementStyleUtil.set(element, 'animation-delay', value)\r\n }\r\n\r\n public static animationDuration(element: HTMLElement, value: string) {\r\n ElementStyleUtil.set(element, 'animation-duration', value)\r\n }\r\n\r\n public static scrollTo(element: HTMLElement | null, offset: number, duration: number = 500) {\r\n let targetPos = element ? getElementOffset(element).top : 0\r\n let scrollPos =\r\n window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0\r\n\r\n if (offset) {\r\n scrollPos += offset\r\n targetPos = targetPos - offset\r\n }\r\n\r\n const from = scrollPos\r\n const to = targetPos\r\n\r\n ElementAnimateUtil.animate(from, to, duration, function (value: number) {\r\n document.documentElement.scrollTop = value\r\n // document.body.parentNode.scrollTop = value;\r\n document.body.scrollTop = value\r\n }) //, easing, done\r\n }\r\n public static scrollTop(offset: number, duration: number) {\r\n ElementAnimateUtil.scrollTo(null, offset, duration)\r\n }\r\n}\r\n","import {OffsetModel} from './models/OffsetModel'\r\nimport {ViewPortModel} from './models/ViewPortModel'\r\nimport {ElementStyleUtil} from './_ElementStyleUtil'\r\nimport {DataUtil} from './_DataUtil'\r\nimport {ElementAnimateUtil} from './ElementAnimateUtil'\r\nimport {getObjectPropertyValueByKey, toJSON} from './_TypesHelpers'\r\n\r\nfunction getCSS(el: HTMLElement, styleProp: string) {\r\n const defaultView = (el.ownerDocument || document).defaultView\r\n\r\n if (!defaultView) {\r\n return ''\r\n }\r\n\r\n // sanitize property name to css notation\r\n // (hyphen separated words eg. font-Size)\r\n styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase()\r\n\r\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp)\r\n}\r\n\r\nfunction getCSSVariableValue(variableName: string) {\r\n let hex = getComputedStyle(document.documentElement).getPropertyValue(variableName)\r\n if (hex && hex.length > 0) {\r\n hex = hex.trim()\r\n }\r\n\r\n return hex\r\n}\r\n\r\nfunction getElementActualCss(el: HTMLElement, prop: any, cache: boolean) {\r\n let css = ''\r\n\r\n if (!el.getAttribute('kt-hidden-' + prop) || cache === false) {\r\n let value\r\n\r\n // the element is hidden so:\r\n // making the el block so we can meassure its height but still be hidden\r\n css = el.style.cssText\r\n el.style.cssText = 'position: absolute; visibility: hidden; display: block;'\r\n\r\n if (prop === 'width') {\r\n value = el.offsetWidth\r\n } else if (prop === 'height') {\r\n value = el.offsetHeight\r\n }\r\n\r\n el.style.cssText = css\r\n\r\n // store it in cache\r\n if (value !== undefined) {\r\n el.setAttribute('kt-hidden-' + prop, value.toString())\r\n return parseFloat(value.toString())\r\n }\r\n return 0\r\n } else {\r\n // store it in cache\r\n const attributeValue = el.getAttribute('kt-hidden-' + prop)\r\n if (attributeValue || attributeValue === '0') {\r\n return parseFloat(attributeValue)\r\n }\r\n }\r\n}\r\n\r\nfunction getElementActualHeight(el: HTMLElement) {\r\n return getElementActualCss(el, 'height', false)\r\n}\r\n\r\nfunction getElementActualWidth(el: HTMLElement, cache?: boolean) {\r\n return getElementActualCss(el, 'width', false)\r\n}\r\n\r\nfunction getElementIndex(element: HTMLElement) {\r\n if (element.parentNode) {\r\n const c = element.parentNode.children\r\n for (let i = 0; i < c.length; i++) {\r\n if (c[i] === element) return i\r\n }\r\n }\r\n return -1\r\n}\r\n\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\r\nfunction getElementMatches(element: HTMLElement, selector: string) {\r\n const p = Element.prototype\r\n const f = p.matches || p.webkitMatchesSelector\r\n\r\n if (element && element.tagName) {\r\n return f.call(element, selector)\r\n } else {\r\n return false\r\n }\r\n}\r\n\r\nfunction getElementOffset(el: HTMLElement): OffsetModel {\r\n // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\r\n // Support: IE <=11 only\r\n // Running getBoundingClientRect on a\r\n // disconnected node in IE throws an error\r\n if (!el.getClientRects().length) {\r\n return {top: 0, left: 0}\r\n }\r\n\r\n // Get document-relative position by adding viewport scroll to viewport-relative gBCR\r\n const rect = el.getBoundingClientRect()\r\n const win = el.ownerDocument.defaultView\r\n if (win) {\r\n return {\r\n top: rect.top + win.pageYOffset,\r\n left: rect.left + win.pageXOffset,\r\n }\r\n }\r\n\r\n return rect\r\n}\r\n\r\nfunction getElementParents(element: Element, selector: string) {\r\n // Element.matches() polyfill\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches = function (s) {\r\n const matches = (document || this.ownerDocument).querySelectorAll(s)\r\n let i = matches.length\r\n while (--i >= 0 && matches.item(i) !== this) {}\r\n return i > -1\r\n }\r\n }\r\n\r\n // Set up a parent array\r\n const parents: Array = []\r\n\r\n let el: Element | null = element\r\n\r\n // Push each parent element to the array\r\n for (; el && el !== document.body; el = el.parentElement) {\r\n if (selector) {\r\n if (el.matches(selector)) {\r\n parents.push(el)\r\n }\r\n continue\r\n }\r\n parents.push(el)\r\n }\r\n\r\n // Return our parent array\r\n return parents\r\n}\r\n\r\nfunction getHighestZindex(el: HTMLElement) {\r\n let bufferNode: Node | null = el as Node\r\n let buffer = el\r\n while (bufferNode && bufferNode !== document) {\r\n // Ignore z-index if position is set to a value where z-index is ignored by the browser\r\n // This makes behavior of this function consistent across browsers\r\n // WebKit always returns auto if the element is positioned\r\n const position = buffer.style.getPropertyValue('position')\r\n if (position === 'absolute' || position === 'relative' || position === 'fixed') {\r\n // IE returns 0 when zIndex is not specified\r\n // other browsers return a string\r\n // we ignore the case of nested elements with an explicit value of 0\r\n //
\r\n const value = parseInt(buffer.style.getPropertyValue('z-index'))\r\n if (!isNaN(value) && value !== 0) {\r\n return value\r\n }\r\n }\r\n\r\n bufferNode = bufferNode.parentNode\r\n buffer = bufferNode as HTMLElement\r\n }\r\n return null\r\n}\r\n\r\nfunction getScrollTop(): number {\r\n return (document.scrollingElement || document.documentElement).scrollTop\r\n}\r\n\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth\r\nfunction getViewPort(): ViewPortModel {\r\n return {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n }\r\n}\r\n\r\nfunction insertAfterElement(el: HTMLElement, referenceNode: HTMLElement) {\r\n return referenceNode.parentNode?.insertBefore(el, referenceNode.nextSibling)\r\n}\r\n\r\nfunction isElementHasClasses(element: HTMLElement, classesStr: string): boolean {\r\n const classes = classesStr.split(' ')\r\n for (let i = 0; i < classes.length; i++) {\r\n if (!element.classList.contains(classes[i])) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n}\r\n\r\nfunction isVisibleElement(element: HTMLElement): boolean {\r\n return !(element.offsetWidth === 0 && element.offsetHeight === 0)\r\n}\r\n\r\n// Throttle function: Input as function which needs to be throttled and delay is the time interval in milliseconds\r\nfunction throttle(timer: number | undefined, func: Function, delay?: number) {\r\n // If setTimeout is already scheduled, no need to do anything\r\n if (timer) {\r\n return\r\n }\r\n\r\n // Schedule a setTimeout after delay seconds\r\n timer = window.setTimeout(function () {\r\n func()\r\n\r\n // Once setTimeout function execution is finished, timerId = undefined so that in
\r\n // the next scroll event function execution can be scheduled by the setTimeout\r\n timer = undefined\r\n }, delay)\r\n}\r\n\r\nfunction getElementChildren(element: HTMLElement, selector: string): Array | null {\r\n if (!element || !element.childNodes) {\r\n return null\r\n }\r\n\r\n const result: Array = []\r\n for (let i = 0; i < element.childNodes.length; i++) {\r\n const child = element.childNodes[i]\r\n // child.nodeType == 1 => Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference\r\n if (child.nodeType === 1 && getElementMatches(child as HTMLElement, selector)) {\r\n result.push(child as HTMLElement)\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\nfunction getElementChild(element: HTMLElement, selector: string): HTMLElement | null {\r\n const children = getElementChildren(element, selector)\r\n return children ? children[0] : null\r\n}\r\n\r\nfunction isMobileDevice(): boolean {\r\n let test = getViewPort().width < +getBreakpoint('lg') ? true : false\r\n\r\n if (test === false) {\r\n // For use within normal web clients\r\n test = navigator.userAgent.match(/iPad/i) != null\r\n }\r\n\r\n return test\r\n}\r\n\r\nfunction slide(el: HTMLElement, dir: string, speed: number, callback: any) {\r\n if (\r\n !el ||\r\n (dir === 'up' && isVisibleElement(el) === false) ||\r\n (dir === 'down' && isVisibleElement(el) === true)\r\n ) {\r\n return\r\n }\r\n\r\n speed = speed ? speed : 600\r\n let calcHeight = getElementActualHeight(el)\r\n let calcPaddingTop: number = 0\r\n let calcPaddingBottom: number = 0\r\n\r\n if (ElementStyleUtil.get(el, 'padding-top') && DataUtil.get(el, 'slide-padding-top') !== true) {\r\n DataUtil.set(el, 'slide-padding-top', ElementStyleUtil.get(el, 'padding-top'))\r\n }\r\n\r\n if (\r\n ElementStyleUtil.get(el, 'padding-bottom') &&\r\n DataUtil.has(el, 'slide-padding-bottom') !== true\r\n ) {\r\n DataUtil.set(el, 'slide-padding-bottom', ElementStyleUtil.get(el, 'padding-bottom'))\r\n }\r\n\r\n if (DataUtil.has(el, 'slide-padding-top')) {\r\n const data = DataUtil.get(el, 'slide-padding-top') as string\r\n calcPaddingTop = parseInt(data as string)\r\n }\r\n\r\n if (DataUtil.has(el, 'slide-padding-bottom')) {\r\n const data = DataUtil.get(el, 'slide-padding-bottom') as string\r\n calcPaddingBottom = parseInt(data)\r\n }\r\n\r\n if (dir === 'up') {\r\n // up\r\n el.style.cssText = 'display: block; overflow: hidden;'\r\n\r\n if (calcPaddingTop) {\r\n ElementAnimateUtil.animate(0, calcPaddingTop, speed, function (value: number) {\r\n el.style.paddingTop = calcPaddingTop - value + 'px'\r\n })\r\n }\r\n\r\n if (calcPaddingBottom) {\r\n ElementAnimateUtil.animate(0, calcPaddingBottom, speed, function (value: number) {\r\n el.style.paddingBottom = calcPaddingBottom - value + 'px'\r\n })\r\n }\r\n\r\n ElementAnimateUtil.animate(\r\n 0,\r\n calcHeight || 0,\r\n speed,\r\n function (value: number) {\r\n el.style.height = (calcHeight || 0) - value + 'px'\r\n },\r\n function () {\r\n el.style.height = ''\r\n el.style.display = 'none'\r\n\r\n if (typeof callback === 'function') {\r\n callback()\r\n }\r\n }\r\n )\r\n } else if (dir === 'down') {\r\n // down\r\n el.style.cssText = 'display: block; overflow: hidden;'\r\n\r\n if (calcPaddingTop) {\r\n ElementAnimateUtil.animate(\r\n 0,\r\n calcPaddingTop,\r\n speed,\r\n function (value: number) {\r\n //\r\n el.style.paddingTop = value + 'px'\r\n },\r\n function () {\r\n el.style.paddingTop = ''\r\n }\r\n )\r\n }\r\n\r\n if (calcPaddingBottom) {\r\n ElementAnimateUtil.animate(\r\n 0,\r\n calcPaddingBottom,\r\n speed,\r\n function (value: number) {\r\n el.style.paddingBottom = value + 'px'\r\n },\r\n function () {\r\n el.style.paddingBottom = ''\r\n }\r\n )\r\n }\r\n\r\n ElementAnimateUtil.animate(\r\n 0,\r\n calcHeight || 0,\r\n speed,\r\n function (value: number) {\r\n el.style.height = value + 'px'\r\n },\r\n function () {\r\n el.style.height = ''\r\n el.style.display = ''\r\n el.style.overflow = ''\r\n\r\n if (typeof callback === 'function') {\r\n callback()\r\n }\r\n }\r\n )\r\n }\r\n}\r\n\r\nfunction slideUp(el: HTMLElement, speed: number, callback: any) {\r\n slide(el, 'up', speed, callback)\r\n}\r\n\r\nfunction slideDown(el: HTMLElement, speed: number, callback: any) {\r\n slide(el, 'down', speed, callback)\r\n}\r\n\r\nfunction getBreakpoint(breakpoint: string) {\r\n let value: number | string = getCSSVariableValue('--kt-' + breakpoint)\r\n if (value) {\r\n value = parseInt(value.trim())\r\n }\r\n\r\n return value\r\n}\r\n\r\nfunction getAttributeValueByBreakpoint(incomingAttr: string): string | JSON {\r\n let value = toJSON(incomingAttr)\r\n if (typeof value !== 'object') {\r\n return incomingAttr\r\n }\r\n\r\n const width = getViewPort().width\r\n let resultKey\r\n let resultBreakpoint = -1\r\n let breakpoint\r\n\r\n for (let key in value) {\r\n if (key === 'default') {\r\n breakpoint = 0\r\n } else {\r\n breakpoint = getBreakpoint(key) ? +getBreakpoint(key) : parseInt(key)\r\n }\r\n\r\n if (breakpoint <= width && breakpoint > resultBreakpoint) {\r\n resultKey = key\r\n resultBreakpoint = breakpoint\r\n }\r\n }\r\n\r\n return resultKey ? getObjectPropertyValueByKey(value, resultKey) : value\r\n}\r\n\r\nfunction colorLighten(color: string, amount: number) {\r\n const addLight = (_color: string, _amount: number) => {\r\n const cc = parseInt(_color, 16) + _amount\r\n const cNum = cc > 255 ? 255 : cc\r\n const c = cNum.toString(16).length > 1 ? cNum.toString(16) : `0${cNum.toString(16)}`\r\n return c\r\n }\r\n\r\n color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color\r\n amount = parseInt(((255 * amount) / 100).toString())\r\n return (color = `#${addLight(color.substring(0, 2), amount)}${addLight(\r\n color.substring(2, 4),\r\n amount\r\n )}${addLight(color.substring(4, 6), amount)}`)\r\n}\r\n\r\nfunction colorDarken(color: string, amount: number) {\r\n const subtractLight = (_color: string, _amount: number) => {\r\n const cc = parseInt(color, 16) - amount\r\n const cNum = cc < 0 ? 0 : cc\r\n const c = cNum.toString(16).length > 1 ? cNum.toString(16) : `0${cNum.toString(16)}`\r\n return c\r\n }\r\n\r\n color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color\r\n amount = parseInt(((255 * amount) / 100).toString())\r\n\r\n return (color = `#${subtractLight(color.substring(0, 2), amount)}${subtractLight(\r\n color.substring(2, 4),\r\n amount\r\n )}${subtractLight(color.substring(4, 6), amount)}`)\r\n}\r\n\r\nexport {\r\n getBreakpoint,\r\n getCSS,\r\n getCSSVariableValue,\r\n getElementActualCss,\r\n getElementActualHeight,\r\n getElementActualWidth,\r\n getElementIndex,\r\n getElementMatches,\r\n getElementOffset,\r\n getElementParents,\r\n getHighestZindex,\r\n getScrollTop,\r\n getViewPort,\r\n insertAfterElement,\r\n isElementHasClasses,\r\n isVisibleElement,\r\n throttle,\r\n getElementChildren,\r\n getElementChild,\r\n isMobileDevice,\r\n slide,\r\n slideUp,\r\n slideDown,\r\n getAttributeValueByBreakpoint,\r\n colorLighten,\r\n colorDarken,\r\n}\r\n","import {DataUtil} from './_DataUtil'\r\nimport {getUniqueIdWithPrefix} from './_TypesHelpers'\r\n\r\nexport interface EventMeta {\r\n name: string\r\n callback: Function\r\n one: boolean\r\n fired: boolean\r\n}\r\n\r\nexport class EventHandlerUtil {\r\n static store: {\r\n [name: string]: {\r\n [handlerId: string]: EventMeta\r\n }\r\n } = {}\r\n\r\n private static setEventMetasByName(\r\n name: string,\r\n handlers: {\r\n [handlerId: string]: EventMeta\r\n }\r\n ): void {\r\n EventHandlerUtil.store[name] = handlers\r\n }\r\n\r\n private static getEventMetaByName(name: string):\r\n | {\r\n [handlerId: string]: EventMeta\r\n }\r\n | undefined {\r\n return EventHandlerUtil.store[name]\r\n }\r\n\r\n private static setEventMetaByNameAndHandlerId(\r\n name: string,\r\n handlerId: string,\r\n meta: EventMeta\r\n ): void {\r\n if (EventHandlerUtil.store[name]) {\r\n EventHandlerUtil.store[name][handlerId] = meta\r\n return\r\n }\r\n EventHandlerUtil.store[name] = {}\r\n EventHandlerUtil.store[name][handlerId] = meta\r\n }\r\n\r\n private static getEventMetaByHandlerId(name: string, handlerId: string): EventMeta | undefined {\r\n const handlersIds = EventHandlerUtil.store[name]\r\n if (!handlersIds) {\r\n return\r\n }\r\n return handlersIds[handlerId]\r\n }\r\n\r\n private static setFiredByNameAndHandlerId(name: string, handerId: string, fired: boolean): void {\r\n const meta = EventHandlerUtil.getEventMetaByHandlerId(name, handerId)\r\n if (!meta) {\r\n return\r\n }\r\n\r\n meta.fired = fired\r\n EventHandlerUtil.setEventMetaByNameAndHandlerId(name, handerId, meta)\r\n }\r\n\r\n private static addEvent(\r\n element: HTMLElement,\r\n name: string,\r\n callback: Function,\r\n one: boolean = false\r\n ): string {\r\n const handlerId = getUniqueIdWithPrefix('event')\r\n const data = DataUtil.get(element, name)\r\n const handlersIds = data ? (data as string[]) : []\r\n handlersIds.push(handlerId)\r\n\r\n DataUtil.set(element, name, handlersIds)\r\n\r\n const meta: EventMeta = {\r\n name: name,\r\n callback: callback,\r\n one: one,\r\n fired: false,\r\n }\r\n\r\n EventHandlerUtil.setEventMetaByNameAndHandlerId(name, handlerId, meta)\r\n return handlerId\r\n }\r\n\r\n private static removeEvent(element: HTMLElement, name: string, handerId: string) {\r\n DataUtil.removeOne(element, name, handerId)\r\n const handlersIds = EventHandlerUtil.store[name]\r\n if (handlersIds) {\r\n return\r\n }\r\n\r\n delete EventHandlerUtil.store[name][handerId]\r\n }\r\n\r\n public static trigger(element: HTMLElement, name: string, target?: any, e?: Event): boolean {\r\n let returnValue = true\r\n if (!DataUtil.has(element, name)) {\r\n return returnValue\r\n }\r\n\r\n let eventValue\r\n let handlerId\r\n const data = DataUtil.get(element, name)\r\n const handlersIds = data ? (data as string[]) : []\r\n for (let i = 0; i < handlersIds.length; i++) {\r\n handlerId = handlersIds[i]\r\n if (EventHandlerUtil.store[name] && EventHandlerUtil.store[name][handlerId]) {\r\n const handler = EventHandlerUtil.store[name][handlerId]\r\n if (handler.name === name) {\r\n if (handler.one) {\r\n if (handler.fired) {\r\n EventHandlerUtil.store[name][handlerId].fired = true\r\n eventValue = handler.callback.call(this, target)\r\n }\r\n } else {\r\n eventValue = handler.callback.call(this, target)\r\n }\r\n\r\n if (eventValue === false) {\r\n returnValue = false\r\n }\r\n }\r\n }\r\n }\r\n return returnValue\r\n }\r\n\r\n public static on = function (element: HTMLElement, name: string, callBack: Function): void {\r\n EventHandlerUtil.addEvent(element, name, callBack, false)\r\n }\r\n\r\n public static one(element: HTMLElement, name: string, callBack: Function): void {\r\n EventHandlerUtil.addEvent(element, name, callBack, true)\r\n }\r\n\r\n public static off(element: HTMLElement, name: string, handerId: string): void {\r\n EventHandlerUtil.removeEvent(element, name, handerId)\r\n }\r\n}\r\n","import {\r\n EventHandlerUtil,\r\n getUniqueIdWithPrefix,\r\n getObjectPropertyValueByKey,\r\n stringSnakeToCamel,\r\n getAttributeValueByBreakpoint,\r\n throttle,\r\n getCSS,\r\n DOMEventHandlerUtil,\r\n ElementStyleUtil,\r\n} from '../_utils/index'\r\n\r\nexport class DrawerStore {\r\n static store: Map = new Map()\r\n\r\n public static set(instanceId: string, drawerComponentObj: DrawerComponent): void {\r\n if (DrawerStore.has(instanceId)) {\r\n return\r\n }\r\n\r\n DrawerStore.store.set(instanceId, drawerComponentObj)\r\n }\r\n\r\n public static get(instanceId: string): DrawerComponent | undefined {\r\n if (!DrawerStore.has(instanceId)) {\r\n return\r\n }\r\n return DrawerStore.store.get(instanceId)\r\n }\r\n\r\n public static remove(instanceId: string): void {\r\n if (!DrawerStore.has(instanceId)) {\r\n return\r\n }\r\n\r\n DrawerStore.store.delete(instanceId)\r\n }\r\n\r\n public static has(instanceId: string): boolean {\r\n return DrawerStore.store.has(instanceId)\r\n }\r\n\r\n public static getAllInstances() {\r\n return DrawerStore.store\r\n }\r\n}\r\n\r\nexport interface DrawerOptions {\r\n overlay: boolean\r\n baseClass: string\r\n overlayClass: string\r\n direction: string\r\n}\r\n\r\nconst defaultDrawerOptions: DrawerOptions = {\r\n overlay: true,\r\n baseClass: 'drawer',\r\n overlayClass: 'drawer-overlay',\r\n direction: 'end',\r\n}\r\n\r\nclass DrawerComponent {\r\n element: HTMLElement\r\n overlayElement: HTMLElement | null = null\r\n toggleElement: HTMLElement | null = null\r\n options: DrawerOptions\r\n instanceUid: string\r\n name: string = ''\r\n shown: boolean = false\r\n lastWidth: number = 0\r\n closeElement: HTMLElement | null = null\r\n\r\n constructor(_element: HTMLElement, options: DrawerOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultDrawerOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('drawer')\r\n this.overlayElement = null\r\n this.name = this.element.getAttribute('data-kt-drawer-name') || ''\r\n this.shown = false\r\n this.toggleElement = null\r\n // Event Handlers\r\n this._handlers()\r\n // Update Instance\r\n this._update()\r\n // Bind Instance\r\n DrawerStore.set(this.element.id, this)\r\n }\r\n\r\n private _handlers = () => {\r\n const togglers = this._getOption('toggle') as string\r\n const closers = this._getOption('close') as string\r\n\r\n if (togglers !== null && togglers.length > 0) {\r\n DOMEventHandlerUtil.on(document.body, togglers, 'click', (e: Event) => {\r\n e.preventDefault()\r\n this.toggleElement = document.getElementById(togglers)\r\n this._toggle()\r\n })\r\n }\r\n\r\n if (closers !== null && closers.length > 0) {\r\n DOMEventHandlerUtil.on(document.body, closers, 'click', (e: Event) => {\r\n e.preventDefault()\r\n this.closeElement = document.getElementById(closers)\r\n\r\n this._hide()\r\n })\r\n }\r\n }\r\n\r\n private _update = () => {\r\n const width = String(this._getOption('width'))\r\n const direction = String(this._getOption('direction'))\r\n\r\n // Reset state\r\n const hasBaseClass = this.element.classList.contains(`${this.options.baseClass}-on`)\r\n const bodyCanvasAttr = String(document.body.getAttribute(`data-kt-drawer-${this.name}-`))\r\n\r\n if (hasBaseClass === true && bodyCanvasAttr === 'on') {\r\n this.shown = true\r\n } else {\r\n this.shown = false\r\n }\r\n\r\n // Activate/deactivate\r\n if (this._getOption('activate') === true) {\r\n this.element.classList.add(this.options.baseClass)\r\n this.element.classList.add(`${this.options.baseClass}-${direction}`)\r\n ElementStyleUtil.set(this.element, 'width', width, true)\r\n\r\n this.lastWidth = parseInt(width)\r\n } else {\r\n ElementStyleUtil.set(this.element, 'width', '')\r\n this.element.classList.remove(this.options.baseClass)\r\n this.element.classList.remove(`${this.options.baseClass}-${direction}`)\r\n this._hide()\r\n }\r\n }\r\n\r\n private _getOption = (name: string) => {\r\n const attr = this.element.getAttribute(`data-kt-drawer-${name}`)\r\n if (attr) {\r\n let value = getAttributeValueByBreakpoint(attr)\r\n if (value !== null && String(value) === 'true') {\r\n return true\r\n } else {\r\n if (value !== null && String(value) === 'false') {\r\n return false\r\n }\r\n }\r\n\r\n return value\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n } else {\r\n return null\r\n }\r\n }\r\n }\r\n\r\n private _toggle = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.drawer.toggle') === false) {\r\n return\r\n }\r\n\r\n if (this.shown) {\r\n this._hide()\r\n } else {\r\n this._show()\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.drawer.toggled')\r\n }\r\n\r\n private _hide = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.drawer.hide') === false) {\r\n return\r\n }\r\n\r\n this.shown = false\r\n this._deleteOverlay()\r\n document.body.removeAttribute(`data-kt-drawer-${this.name}`)\r\n document.body.removeAttribute(`data-kt-drawer`)\r\n this.element.classList.remove(`${this.options.baseClass}-on`)\r\n if (this.toggleElement != null) {\r\n this.toggleElement.classList.remove('active')\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.drawer.after.hidden')\r\n }\r\n\r\n private _show = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.drawer.show') === false) {\r\n return\r\n }\r\n\r\n this.shown = true\r\n this._createOverlay()\r\n document.body.setAttribute(`data-kt-drawer-${this.name}`, 'on')\r\n document.body.setAttribute('data-kt-drawer', 'on')\r\n this.element.classList.add(`${this.options.baseClass}-on`)\r\n if (this.toggleElement !== null) {\r\n this.toggleElement.classList.add('active')\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.drawer.shown')\r\n }\r\n\r\n private _createOverlay = () => {\r\n if (this._getOption('overlay') === true) {\r\n this.overlayElement = document.createElement('DIV')\r\n const elementZIndex = getCSS(this.element, 'z-index')\r\n if (elementZIndex) {\r\n const overlayZindex = parseInt(elementZIndex) - 1\r\n ElementStyleUtil.set(this.overlayElement, 'z-index', overlayZindex) // update\r\n }\r\n document.body.append(this.overlayElement)\r\n const overlayClassOption = this._getOption('overlay-class')\r\n if (overlayClassOption) {\r\n this.overlayElement.classList.add(overlayClassOption.toString())\r\n }\r\n this.overlayElement.addEventListener('click', (e) => {\r\n e.preventDefault()\r\n this._hide()\r\n })\r\n }\r\n }\r\n\r\n private _deleteOverlay = () => {\r\n if (this.overlayElement !== null && this.overlayElement.parentNode) {\r\n this.overlayElement.parentNode.removeChild(this.overlayElement)\r\n }\r\n }\r\n\r\n private _getDirection = () => {\r\n return String(this._getOption('direction')) === 'left' ? 'left' : 'right'\r\n }\r\n\r\n private _getWidth = () => {\r\n let width = this._getOption('width')\r\n if (width && width === 'auto') {\r\n width = getCSS(this.element, 'width')\r\n }\r\n\r\n return width\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public toggle = () => {\r\n this._toggle()\r\n }\r\n\r\n public show = () => {\r\n this._show()\r\n }\r\n\r\n public hide = () => {\r\n this._hide()\r\n }\r\n\r\n public isShown = () => {\r\n return this.shown\r\n }\r\n\r\n public update = () => {\r\n this._update()\r\n }\r\n\r\n public goElement = () => {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string, handerId: string) => {\r\n return EventHandlerUtil.off(this.element, name, handerId)\r\n }\r\n\r\n public trigger = (name: string, event: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Static methods\r\n public static hasInstace = (elementId: string): boolean => {\r\n return DrawerStore.has(elementId)\r\n }\r\n\r\n public static getInstance = (elementId: string) => {\r\n return DrawerStore.get(elementId)\r\n }\r\n\r\n public static hideAll = () => {\r\n const oldInstances = DrawerStore.getAllInstances()\r\n oldInstances.forEach((dr) => {\r\n dr.hide()\r\n })\r\n }\r\n\r\n public static updateAll = () => {\r\n const oldInstances = DrawerStore.getAllInstances()\r\n oldInstances.forEach((dr) => {\r\n dr.update()\r\n })\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string): void {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((element) => {\r\n const item = element as HTMLElement\r\n let drawer = DrawerComponent.getInstance(item.id)\r\n if (!drawer) {\r\n drawer = new DrawerComponent(item, defaultDrawerOptions)\r\n }\r\n drawer.element = item\r\n drawer.hide()\r\n })\r\n }\r\n\r\n // Dismiss instances\r\n public static handleDismiss = () => {\r\n // External drawer toggle handler\r\n DOMEventHandlerUtil.on(document.body, '[data-kt-drawer-dismiss=\"true\"]', 'click', () => {\r\n /* @ts-ignore */\r\n const element = this.closest('[data-kt-drawer=\"true\"]')\r\n if (element) {\r\n const drawer = DrawerComponent.getInstance(element)\r\n if (drawer && drawer.isShown()) {\r\n drawer.hide()\r\n }\r\n }\r\n })\r\n }\r\n\r\n // Global Initialization\r\n public static initGlobalHandlers(): void {\r\n // Window Resize Handling\r\n window.addEventListener('resize', function () {\r\n let timer: number | undefined\r\n throttle(\r\n timer,\r\n () => {\r\n // Locate and update Drawer instances on window resize\r\n const elements = document.body.querySelectorAll('[data-kt-drawer=\"true\"]')\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n const instance = DrawerComponent.getInstance(item.id)\r\n if (instance) {\r\n instance.element = item\r\n instance.update()\r\n }\r\n })\r\n },\r\n 200\r\n )\r\n })\r\n }\r\n\r\n public static bootstrap = () => {\r\n DrawerComponent.createInstances('[data-kt-drawer=\"true\"]')\r\n DrawerComponent.initGlobalHandlers()\r\n DrawerComponent.handleDismiss()\r\n }\r\n\r\n public static reinitialization = () => {\r\n DrawerComponent.createInstances('[data-kt-drawer=\"true\"]')\r\n DrawerComponent.hideAll()\r\n DrawerComponent.updateAll()\r\n DrawerComponent.handleDismiss()\r\n }\r\n}\r\n\r\nexport {DrawerComponent, defaultDrawerOptions}\r\n","/* eslint-disable no-useless-escape */\r\n// DOCS: https://javascript.info/cookie\r\nexport class CookieComponent {\r\n /**\r\n * Returns the cookie with the given name, or undefined if not found\r\n *\r\n * @param {string} name - cookie name\r\n * @returns string | null\r\n */\r\n public static get(name: string): string | undefined {\r\n let matches = document.cookie.match(\r\n new RegExp('(?:^|; )' + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + '=([^;]*)')\r\n )\r\n return matches ? decodeURIComponent(matches[1]) : undefined\r\n }\r\n\r\n /**\r\n * Please note that a cookie value is encoded,\r\n * so getCookie uses a built-in decodeURIComponent function to decode it.\r\n *\r\n * @param {string} name - cookie name\r\n * @param {string | number | boolean} value - cookie value\r\n * @param {any} cookieOptions - cookie options\r\n * @returns void\r\n */\r\n public static set(name: string, value: string | number | boolean, cookieOptions: any): void {\r\n const options = {\r\n path: '/',\r\n // add other defaults here if necessary\r\n ...cookieOptions,\r\n }\r\n\r\n if (options.expires instanceof Date) {\r\n options.expires = options.expires.toUTCString()\r\n }\r\n\r\n let updatedCookie = encodeURIComponent(name) + '=' + encodeURIComponent(value)\r\n\r\n for (let optionKey in options) {\r\n updatedCookie += '; ' + optionKey\r\n let optionValue = options[optionKey]\r\n if (optionValue !== true) {\r\n updatedCookie += '=' + optionValue\r\n }\r\n }\r\n\r\n document.cookie = updatedCookie\r\n }\r\n\r\n /**\r\n * To delete a cookie, we can call it with a negative expiration date\r\n *\r\n * @param {string} name\r\n */\r\n public static delete(name: string): void {\r\n CookieComponent.set(name, '', {\r\n 'max-age': -1,\r\n })\r\n }\r\n}\r\n","import {\r\n DataUtil,\r\n getObjectPropertyValueByKey,\r\n stringSnakeToCamel,\r\n getAttributeValueByBreakpoint,\r\n getViewPort,\r\n isVisibleElement,\r\n throttle,\r\n getCSS,\r\n ElementStyleUtil,\r\n} from '../_utils/index'\r\nimport {CookieComponent} from './_CookieComponent'\r\n\r\nexport interface ScrollOptions {\r\n saveState?: boolean\r\n}\r\n\r\nconst defaultScrollOptions: ScrollOptions = {\r\n saveState: true,\r\n}\r\n\r\nclass ScrollComponent {\r\n element: HTMLElement\r\n options: ScrollOptions\r\n id: string\r\n\r\n constructor(_element: HTMLElement, options: ScrollOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultScrollOptions, options)\r\n this.id = this.element.getAttribute('id') || ''\r\n this.update()\r\n // this.element.setAttribute('data-kt-scrolltop', 'true')\r\n DataUtil.set(this.element, 'scroll', this)\r\n }\r\n\r\n private getOption = (name: string) => {\r\n if (this.element.hasAttribute('data-kt-scroll-' + name) === true) {\r\n const attr = this.element.getAttribute('data-kt-scroll-' + name) || ''\r\n let value: string | JSON | boolean = getAttributeValueByBreakpoint(attr)\r\n if (value !== null && String(value) === 'true') {\r\n value = true\r\n } else if (value !== null && String(value) === 'false') {\r\n value = false\r\n }\r\n\r\n return value\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n } else {\r\n return null\r\n }\r\n }\r\n }\r\n\r\n private getHeightType = () => {\r\n if (this.getOption('height')) {\r\n return 'height'\r\n }\r\n if (this.getOption('min-height')) {\r\n return 'min-height'\r\n }\r\n if (this.getOption('max-height')) {\r\n return 'max-height'\r\n }\r\n }\r\n\r\n private getAutoHeight = () => {\r\n let height: number | string = getViewPort().height\r\n const dependencies = this.getOption('dependencies')\r\n const wrappers = this.getOption('wrappers')\r\n const offset = this.getOption('offset')\r\n\r\n // Height dependencies\r\n if (dependencies !== null) {\r\n const elements = document.querySelectorAll(dependencies as string)\r\n if (elements && elements.length > 0) {\r\n for (let i = 0, len = elements.length; i < len; i++) {\r\n const element = elements[i] as HTMLElement\r\n if (isVisibleElement(element) === false) {\r\n continue\r\n }\r\n\r\n height = height - parseInt(getCSS(element, 'height'))\r\n height = height - parseInt(getCSS(element, 'margin-top'))\r\n height = height - parseInt(getCSS(element, 'margin-bottom'))\r\n\r\n const borderTop = getCSS(element, 'border-top')\r\n if (borderTop) {\r\n height = height - parseInt(borderTop)\r\n }\r\n\r\n const borderBottom = getCSS(element, 'border-bottom')\r\n if (borderBottom) {\r\n height = height - parseInt(borderBottom)\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Wrappers\r\n if (wrappers !== null) {\r\n var elements = document.querySelectorAll(wrappers as string)\r\n if (elements && elements.length > 0) {\r\n for (let i = 0, len = elements.length; i < len; i++) {\r\n const element = elements[i] as HTMLElement\r\n\r\n if (!isVisibleElement(element)) {\r\n continue\r\n }\r\n\r\n height = height - parseInt(getCSS(element, 'margin-top'))\r\n height = height - parseInt(getCSS(element, 'margin-bottom'))\r\n height = height - parseInt(getCSS(element, 'padding-top'))\r\n height = height - parseInt(getCSS(element, 'padding-bottom'))\r\n\r\n const borderTop = getCSS(element, 'border-top')\r\n if (borderTop) {\r\n height = height - parseInt(borderTop)\r\n }\r\n\r\n const borderBottom = getCSS(element, 'border-bottom')\r\n if (borderBottom) {\r\n height = height - parseInt(borderBottom)\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Custom offset\r\n if (offset !== null) {\r\n height = height - parseInt(offset as string)\r\n }\r\n\r\n height = height - parseInt(getCSS(this.element, 'margin-top'))\r\n height = height - parseInt(getCSS(this.element, 'margin-bottom'))\r\n\r\n const borderTop = getCSS(this.element, 'border-top')\r\n if (borderTop) {\r\n height = height - parseInt(borderTop)\r\n }\r\n\r\n const borderBottom = getCSS(this.element, 'border-bottom')\r\n if (borderBottom) {\r\n height = height - parseInt(borderBottom)\r\n }\r\n\r\n height = String(height) + 'px'\r\n\r\n return height\r\n }\r\n\r\n private setupHeight = () => {\r\n let height = this.getHeight()\r\n let heightType = this.getHeightType() as string\r\n\r\n // Set height\r\n if (height !== null && height.length > 0) {\r\n ElementStyleUtil.set(this.element, heightType, height)\r\n } else {\r\n ElementStyleUtil.set(this.element, heightType, '')\r\n }\r\n }\r\n\r\n private setupState = () => {\r\n if (this.getOption('save-state') === true && this.id) {\r\n const cookie = CookieComponent.get(this.id + 'st')\r\n if (cookie) {\r\n var pos = parseInt(cookie)\r\n\r\n if (pos > 0) {\r\n this.element.scrollTop = pos\r\n }\r\n }\r\n }\r\n }\r\n\r\n private setupScrollHandler = () => {\r\n if (this.getOption('save-state') === true && this.id) {\r\n this.element.addEventListener('scroll', this.scrollHandler)\r\n } else {\r\n this.element.removeEventListener('scroll', this.scrollHandler)\r\n }\r\n }\r\n\r\n private scrollHandler = () => {\r\n const cookieId = this.id + 'st'\r\n CookieComponent.set(cookieId, this.element.scrollTop, {})\r\n }\r\n\r\n private destroyScrollHandler = () => {\r\n this.element.removeEventListener('scroll', this.scrollHandler)\r\n }\r\n\r\n private resetHeight = () => {\r\n const heghtType = this.getHeightType()\r\n if (heghtType) {\r\n ElementStyleUtil.set(this.element, heghtType, '')\r\n }\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public update = () => {\r\n // Activate/deactivate\r\n if (\r\n this.getOption('activate') === true ||\r\n !this.element.hasAttribute('data-kt-scroll-activate')\r\n ) {\r\n this.setupHeight()\r\n this.setupScrollHandler()\r\n this.setupState()\r\n } else {\r\n this.resetHeight()\r\n this.destroyScrollHandler()\r\n }\r\n }\r\n\r\n public getHeight = () => {\r\n const heightType = this.getHeightType()\r\n const height = this.getOption(heightType || '')\r\n if (height instanceof Function) {\r\n return height.call(height)\r\n } else if (height !== null && typeof height === 'string' && height.toLowerCase() === 'auto') {\r\n return this.getAutoHeight()\r\n } else {\r\n return height\r\n }\r\n }\r\n\r\n public getElement = () => {\r\n return this.element\r\n }\r\n\r\n // Static methods\r\n public static hasInstace(element: HTMLElement) {\r\n return DataUtil.has(element, 'scroll')\r\n }\r\n\r\n public static getInstance(element: HTMLElement): ScrollComponent | undefined {\r\n if (element !== null && ScrollComponent.hasInstace(element)) {\r\n const data = DataUtil.get(element, 'scroll')\r\n if (data) {\r\n return data as ScrollComponent\r\n }\r\n }\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string) {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((element: Element) => {\r\n const item = element as HTMLElement\r\n let scroll = ScrollComponent.getInstance(item)\r\n if (!scroll) {\r\n scroll = new ScrollComponent(item, defaultScrollOptions)\r\n }\r\n })\r\n }\r\n\r\n public static destroyAll(attr: string = '[data-kt-scroll=\"true\"]') {}\r\n\r\n public static bootstrap(attr: string = '[data-kt-scroll=\"true\"]') {\r\n ScrollComponent.createInstances(attr)\r\n ScrollComponent.resize()\r\n }\r\n\r\n public static createInstance = (\r\n element: HTMLElement,\r\n options: ScrollOptions = defaultScrollOptions\r\n ): ScrollComponent | undefined => {\r\n let scroll = ScrollComponent.getInstance(element)\r\n if (!scroll) {\r\n scroll = new ScrollComponent(element, options)\r\n }\r\n return scroll\r\n }\r\n\r\n public static reinitialization(attr: string = '[data-kt-scroll=\"true\"]') {\r\n ScrollComponent.createInstances(attr)\r\n }\r\n\r\n public static updateAll() {\r\n const elements = document.body.querySelectorAll('[data-kt-scroll=\"true\"]')\r\n elements.forEach((element: Element) => {\r\n const instance = ScrollComponent.getInstance(element as HTMLElement)\r\n if (instance) {\r\n instance.update()\r\n }\r\n })\r\n }\r\n\r\n public static resize() {\r\n // Window Resize Handling\r\n window.addEventListener('resize', function () {\r\n let timer\r\n throttle(\r\n timer,\r\n () => {\r\n // Locate and update Drawer instances on window resize\r\n ScrollComponent.updateAll()\r\n },\r\n 200\r\n )\r\n })\r\n }\r\n}\r\n\r\nexport {ScrollComponent, defaultScrollOptions}\r\n","import {\r\n getScrollTop,\r\n getAttributeValueByBreakpoint,\r\n throttle,\r\n getObjectPropertyValueByKey,\r\n stringSnakeToCamel,\r\n getUniqueIdWithPrefix,\r\n DataUtil,\r\n ElementAnimateUtil,\r\n} from '../_utils/index'\r\n\r\nexport interface IScrollTopOptions {\r\n offset: number\r\n speed: number\r\n}\r\n\r\nconst defaultScrollTopOptions: IScrollTopOptions = {\r\n offset: 200,\r\n speed: 600,\r\n}\r\n\r\nclass ScrollTopComponent {\r\n element: HTMLElement\r\n options: IScrollTopOptions\r\n instanceUid: string\r\n\r\n constructor(_element: HTMLElement, options: IScrollTopOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultScrollTopOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('scrolltop')\r\n\r\n // Event Handlers\r\n this._handlers()\r\n\r\n // Bind Instance\r\n DataUtil.set(this.element, 'scrolltop', this)\r\n }\r\n\r\n private _handlers = () => {\r\n let timer: number\r\n window.addEventListener('scroll', () => {\r\n throttle(timer, () => {\r\n this._scroll()\r\n })\r\n })\r\n\r\n this.element.addEventListener('click', (e: Event) => {\r\n e.preventDefault()\r\n this._go()\r\n })\r\n }\r\n\r\n private _scroll = () => {\r\n const offset = parseInt(this._getOption('offset') as string)\r\n const pos = getScrollTop() // current vertical position\r\n if (pos > offset) {\r\n if (!document.body.hasAttribute('data-kt-scrolltop')) {\r\n document.body.setAttribute('data-kt-scrolltop', 'on')\r\n }\r\n } else {\r\n if (document.body.hasAttribute('data-kt-scrolltop')) {\r\n document.body.removeAttribute('data-kt-scrolltop')\r\n }\r\n }\r\n }\r\n\r\n private _go = () => {\r\n const speed = parseInt(this._getOption('speed') as string)\r\n ElementAnimateUtil.scrollTop(0, speed)\r\n }\r\n\r\n private _getOption = (name: string) => {\r\n const attr = this.element.getAttribute(`data-kt-scrolltop-${name}`)\r\n if (attr) {\r\n const value = getAttributeValueByBreakpoint(attr)\r\n return value !== null && String(value) === 'true'\r\n }\r\n\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n }\r\n\r\n return null\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n\r\n // Plugin API\r\n public go = () => {\r\n return this._go()\r\n }\r\n\r\n public getElement = () => {\r\n return this.element\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (el: HTMLElement): ScrollTopComponent | undefined => {\r\n const scrollTop = DataUtil.get(el, 'scrolltop')\r\n if (scrollTop) {\r\n return scrollTop as ScrollTopComponent\r\n }\r\n }\r\n\r\n public static createInstances = (selector: string) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let scrollTop = ScrollTopComponent.getInstance(item)\r\n if (!scrollTop) {\r\n scrollTop = new ScrollTopComponent(item, defaultScrollTopOptions)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string,\r\n options: IScrollTopOptions = defaultScrollTopOptions\r\n ): ScrollTopComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let scrollTop = ScrollTopComponent.getInstance(item)\r\n if (!scrollTop) {\r\n scrollTop = new ScrollTopComponent(item, options)\r\n }\r\n return scrollTop\r\n }\r\n\r\n public static bootstrap = () => {\r\n ScrollTopComponent.createInstances('[data-kt-scrolltop=\"true\"]')\r\n }\r\n\r\n public static reinitialization = () => {\r\n ScrollTopComponent.createInstances('[data-kt-scrolltop=\"true\"]')\r\n }\r\n\r\n public static goTop = () => {\r\n ElementAnimateUtil.scrollTop(0, defaultScrollTopOptions.speed)\r\n }\r\n}\r\nexport {ScrollTopComponent, defaultScrollTopOptions}\r\n","import {\r\n getElementOffset,\r\n getScrollTop,\r\n getAttributeValueByBreakpoint,\r\n getUniqueIdWithPrefix,\r\n getObjectPropertyValueByKey,\r\n stringSnakeToCamel,\r\n getCSS,\r\n DataUtil,\r\n ElementAnimateUtil,\r\n ElementStyleUtil,\r\n EventHandlerUtil,\r\n} from '../_utils/index'\r\n\r\nexport interface StickyOptions {\r\n offset: number\r\n reverse: boolean\r\n animation: boolean\r\n animationSpeed: string\r\n animationClass: string\r\n}\r\n\r\nconst defaultStickyOptions: StickyOptions = {\r\n offset: 200,\r\n reverse: false,\r\n animation: true,\r\n animationSpeed: '0.3s',\r\n animationClass: 'animation-slide-in-down',\r\n}\r\n\r\nclass StickyComponent {\r\n element: HTMLElement\r\n options: StickyOptions\r\n instanceUid: string\r\n instanceName: string | null = ''\r\n attributeName: string\r\n eventTriggerState: boolean\r\n lastScrollTop: number\r\n\r\n constructor(_element: HTMLElement, options: StickyOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultStickyOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('sticky')\r\n this.instanceName = this.element.getAttribute('data-kt-sticky-name')\r\n this.attributeName = 'data-kt-sticky-' + this.instanceName\r\n this.eventTriggerState = true\r\n this.lastScrollTop = 0\r\n\r\n // Event Handlers\r\n window.addEventListener('scroll', this.scroll)\r\n\r\n // Initial Launch\r\n this.scroll()\r\n\r\n DataUtil.set(this.element, 'sticky', this)\r\n }\r\n\r\n private scroll = () => {\r\n let offset = this.getOption('offset')\r\n let reverse = this.getOption('reverse')\r\n\r\n // Exit if false\r\n if (offset === false) {\r\n return\r\n }\r\n\r\n let offsetNum = 0\r\n if (typeof offset === 'string') {\r\n offsetNum = parseInt(offset)\r\n }\r\n\r\n const st = getScrollTop()\r\n\r\n // Reverse scroll mode\r\n if (reverse === true) {\r\n // Release on reverse scroll mode\r\n if (st > offsetNum && this.lastScrollTop < st) {\r\n if (document.body.hasAttribute(this.attributeName) === false) {\r\n this.enable()\r\n document.body.setAttribute(this.attributeName, 'on')\r\n }\r\n\r\n if (this.eventTriggerState === true) {\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.on')\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change')\r\n\r\n this.eventTriggerState = false\r\n }\r\n } else {\r\n // Back scroll mode\r\n if (document.body.hasAttribute(this.attributeName)) {\r\n this.disable()\r\n document.body.removeAttribute(this.attributeName)\r\n }\r\n\r\n if (this.eventTriggerState === false) {\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.off')\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change')\r\n\r\n this.eventTriggerState = true\r\n }\r\n }\r\n\r\n this.lastScrollTop = st\r\n return\r\n }\r\n\r\n // Classic scroll mode\r\n if (st > offsetNum) {\r\n if (document.body.hasAttribute(this.attributeName) === false) {\r\n this.enable()\r\n document.body.setAttribute(this.attributeName, 'on')\r\n }\r\n\r\n if (this.eventTriggerState === true) {\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.on')\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change')\r\n this.eventTriggerState = false\r\n }\r\n } else {\r\n // back scroll mode\r\n if (document.body.hasAttribute(this.attributeName) === true) {\r\n this.disable()\r\n document.body.removeAttribute(this.attributeName)\r\n }\r\n\r\n if (this.eventTriggerState === false) {\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.off')\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change')\r\n this.eventTriggerState = true\r\n }\r\n }\r\n }\r\n\r\n private getOption = (name: string) => {\r\n const dataStickyAttr = 'data-kt-sticky-' + name\r\n if (this.element.hasAttribute(dataStickyAttr) === true) {\r\n const attrValueInStr = this.element.getAttribute(dataStickyAttr)\r\n const attrValue = getAttributeValueByBreakpoint(attrValueInStr || '')\r\n if (attrValue !== null && String(attrValue) === 'true') {\r\n return true\r\n } else if (attrValue !== null && String(attrValue) === 'false') {\r\n return false\r\n }\r\n\r\n return attrValue\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n }\r\n }\r\n }\r\n\r\n private disable = () => {\r\n ElementStyleUtil.remove(this.element, 'top')\r\n ElementStyleUtil.remove(this.element, 'width')\r\n ElementStyleUtil.remove(this.element, 'left')\r\n ElementStyleUtil.remove(this.element, 'right')\r\n ElementStyleUtil.remove(this.element, 'z-index')\r\n ElementStyleUtil.remove(this.element, 'position')\r\n }\r\n\r\n private enable = (update: boolean = false) => {\r\n const top = this.getOption('top')\r\n const left = this.getOption('left')\r\n // const right = this.getOption(\"right\");\r\n let width = this.getOption('width')\r\n const zindex = this.getOption('zindex')\r\n\r\n if (update !== true && this.getOption('animation') === true) {\r\n ElementStyleUtil.set(this.element, 'animationDuration', this.getOption('animationSpeed'))\r\n ElementAnimateUtil.animateClass(this.element, 'animation ' + this.getOption('animationClass'))\r\n }\r\n\r\n if (zindex !== null) {\r\n ElementStyleUtil.set(this.element, 'z-index', zindex)\r\n ElementStyleUtil.set(this.element, 'position', 'fixed')\r\n }\r\n\r\n if (top !== null) {\r\n ElementStyleUtil.set(this.element, 'top', top)\r\n }\r\n\r\n if (width !== null && width !== undefined) {\r\n const widthTarget = getObjectPropertyValueByKey(width, 'target')\r\n if (widthTarget) {\r\n const targetElement = document.querySelector(widthTarget)\r\n if (targetElement) {\r\n width = getCSS(targetElement, 'width')\r\n }\r\n }\r\n ElementStyleUtil.set(this.element, 'width', width)\r\n }\r\n\r\n if (left !== null) {\r\n if (String(left).toLowerCase() === 'auto') {\r\n var offsetLeft = getElementOffset(this.element).left\r\n\r\n if (offsetLeft > 0) {\r\n ElementStyleUtil.set(this.element, 'left', String(offsetLeft) + 'px')\r\n }\r\n }\r\n }\r\n }\r\n\r\n public update = () => {\r\n if (document.body.hasAttribute(this.attributeName) === true) {\r\n this.disable()\r\n document.body.removeAttribute(this.attributeName)\r\n this.enable(true)\r\n document.body.setAttribute(this.attributeName, 'on')\r\n }\r\n }\r\n\r\n // Event API\r\n public on = (name: string, callBack: Function) => {\r\n return EventHandlerUtil.on(this.element, name, callBack)\r\n }\r\n\r\n public one = (name: string, callback: Function) => {\r\n return EventHandlerUtil.one(this.element, name, callback)\r\n }\r\n\r\n public off = (name: string, handlerId: string) => {\r\n return EventHandlerUtil.off(this.element, name, handlerId)\r\n }\r\n\r\n public trigger = (name: string) => {\r\n return EventHandlerUtil.trigger(this.element, name)\r\n }\r\n\r\n // Static methods\r\n public static hasInstace(element: HTMLElement) {\r\n return DataUtil.has(element, 'sticky')\r\n }\r\n\r\n public static getInstance(element: HTMLElement): StickyComponent | undefined {\r\n if (element !== null && StickyComponent.hasInstace(element)) {\r\n const data = DataUtil.get(element, 'sticky')\r\n if (data) {\r\n return data as StickyComponent\r\n }\r\n }\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string) {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((element) => {\r\n const item = element as HTMLElement\r\n let sticky = StickyComponent.getInstance(item)\r\n if (!sticky) {\r\n sticky = new StickyComponent(item, defaultStickyOptions)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string,\r\n options: StickyOptions = defaultStickyOptions\r\n ): StickyComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let sticky = StickyComponent.getInstance(item)\r\n if (!sticky) {\r\n sticky = new StickyComponent(item, options)\r\n }\r\n return sticky\r\n }\r\n\r\n public static bootstrap(attr: string = '[data-kt-sticky=\"true\"]') {\r\n StickyComponent.createInstances(attr)\r\n }\r\n\r\n public static reInitialization(attr: string = '[data-kt-sticky=\"true\"]') {\r\n StickyComponent.createInstances(attr)\r\n }\r\n}\r\n\r\nexport {StickyComponent, defaultStickyOptions}\r\n","import {\r\n DataUtil,\r\n getUniqueIdWithPrefix,\r\n EventHandlerUtil,\r\n} from '../_utils/index';\r\n// Helpers\r\nimport { CookieComponent } from './_CookieComponent';\r\n\r\nexport interface ToggleOptions {\r\n saveState: boolean;\r\n targetState?: string;\r\n toggleState?: string;\r\n targetToggleMode?: string;\r\n}\r\n\r\nconst defaultToggleOptions: ToggleOptions = {\r\n saveState: false,\r\n};\r\n\r\nclass ToggleComponent {\r\n element: HTMLElement;\r\n instanceUid: string;\r\n options: ToggleOptions;\r\n state: string = '';\r\n mode: string = '';\r\n target: HTMLElement | null = null;\r\n attribute: string = '';\r\n\r\n constructor(_element: HTMLElement, options: ToggleOptions) {\r\n this.options = Object.assign(defaultToggleOptions, options);\r\n this.instanceUid = getUniqueIdWithPrefix('toggle');\r\n this.element = _element;\r\n\r\n const elementTargetAttr = this.element.getAttribute(\r\n 'data-kt-toggle-target'\r\n );\r\n if (elementTargetAttr) {\r\n this.target = document.querySelector(elementTargetAttr);\r\n }\r\n const elementToggleAttr = this.element.getAttribute('data-kt-toggle-state');\r\n this.state = elementToggleAttr || '';\r\n const elementModeAttr = this.element.getAttribute('data-kt-toggle-mode');\r\n this.mode = elementModeAttr || '';\r\n this.attribute =\r\n 'data-kt-' + this.element.getAttribute('data-kt-toggle-name');\r\n\r\n // Event Handlers\r\n this._handlers();\r\n\r\n // Update Instance\r\n // Bind Instance\r\n DataUtil.set(this.element, 'toggle', this);\r\n }\r\n\r\n private _handlers = () => {\r\n this.element.addEventListener('click', (e: Event) => {\r\n e.preventDefault();\r\n\r\n if (this.mode === '') {\r\n this._toggle();\r\n return;\r\n }\r\n\r\n if (this.mode === 'off' && !this._isEnabled()) {\r\n this._toggle();\r\n } else if (this.mode === 'on' && this._isEnabled()) {\r\n this._toggle();\r\n }\r\n });\r\n };\r\n\r\n // Event handlers\r\n private _toggle = () => {\r\n // Trigger \"after.toggle\" event\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.change');\r\n\r\n if (this._isEnabled()) {\r\n this._disable();\r\n } else {\r\n this._enable();\r\n }\r\n\r\n // Trigger \"before.toggle\" event\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.changed');\r\n return this;\r\n };\r\n\r\n private _enable = () => {\r\n if (this._isEnabled()) {\r\n return;\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.enable');\r\n this.target?.setAttribute(this.attribute, 'on');\r\n if (this.state.length > 0) {\r\n this.element.classList.add(this.state);\r\n }\r\n\r\n if (this.options.saveState) {\r\n CookieComponent.set(this.attribute, 'on', {});\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.enabled');\r\n return this;\r\n };\r\n\r\n private _disable = () => {\r\n if (!this._isEnabled()) {\r\n return false;\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.disable');\r\n this.target?.removeAttribute(this.attribute);\r\n\r\n if (this.state.length > 0) {\r\n this.element.classList.remove(this.state);\r\n }\r\n\r\n if (this.options.saveState) {\r\n CookieComponent.delete(this.attribute);\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.disabled');\r\n return this;\r\n };\r\n\r\n private _isEnabled = () => {\r\n if (!this.target) {\r\n return false;\r\n }\r\n\r\n return (\r\n String(this.target.getAttribute(this.attribute)).toLowerCase() === 'on'\r\n );\r\n };\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n\r\n // Plugin API\r\n // Plugin API\r\n public toggle = () => {\r\n return this._toggle();\r\n };\r\n\r\n public enable = () => {\r\n return this._enable();\r\n };\r\n\r\n public disable = () => {\r\n return this._disable();\r\n };\r\n\r\n public isEnabled = () => {\r\n return this._isEnabled();\r\n };\r\n\r\n public goElement = () => {\r\n return this.element;\r\n };\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler);\r\n };\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler);\r\n };\r\n\r\n public off = (name: string, handlerId: string) => {\r\n return EventHandlerUtil.off(this.element, name, handlerId);\r\n };\r\n\r\n public trigger = (name: string, event?: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event);\r\n };\r\n\r\n // Static methods\r\n public static getInstance = (el: HTMLElement) => {\r\n const toggleElement = DataUtil.get(el, 'toggle');\r\n if (toggleElement) {\r\n return toggleElement;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n public static createInstances = (selector: string) => {\r\n const elements = document.body.querySelectorAll(selector);\r\n elements.forEach((el) => {\r\n let toggle = ToggleComponent.getInstance(el);\r\n if (!toggle) {\r\n toggle = new ToggleComponent(el, defaultToggleOptions);\r\n }\r\n });\r\n };\r\n\r\n public static reinitialization = () => {\r\n ToggleComponent.createInstances('[data-kt-toggle]');\r\n };\r\n\r\n public static bootstrap = () => {\r\n ToggleComponent.createInstances('[data-kt-toggle]');\r\n };\r\n}\r\n\r\nexport { ToggleComponent, defaultToggleOptions };\r\n","import {\r\n getAttributeValueByBreakpoint,\r\n stringSnakeToCamel,\r\n getObjectPropertyValueByKey,\r\n EventHandlerUtil,\r\n throttle,\r\n} from '../_utils/index'\r\n\r\nexport class SwapperStore {\r\n static store: Map = new Map()\r\n\r\n public static set(instanceId: string, drawerComponentObj: SwapperComponent): void {\r\n if (SwapperStore.has(instanceId)) {\r\n return\r\n }\r\n\r\n SwapperStore.store.set(instanceId, drawerComponentObj)\r\n }\r\n\r\n public static get(instanceId: string): SwapperComponent | undefined {\r\n if (!SwapperStore.has(instanceId)) {\r\n return\r\n }\r\n return SwapperStore.store.get(instanceId)\r\n }\r\n\r\n public static remove(instanceId: string): void {\r\n if (!SwapperStore.has(instanceId)) {\r\n return\r\n }\r\n\r\n SwapperStore.store.delete(instanceId)\r\n }\r\n\r\n public static has(instanceId: string): boolean {\r\n return SwapperStore.store.has(instanceId)\r\n }\r\n\r\n public static getAllInstances() {\r\n return SwapperStore.store\r\n }\r\n}\r\n\r\nexport interface ISwapperOptions {\r\n mode: string\r\n}\r\n\r\nexport interface ISwapperQueries {\r\n componentName: string\r\n instanseQuery: string\r\n attrQuery: string\r\n}\r\n\r\nconst defaultSwapperOptions: ISwapperOptions = {\r\n mode: 'append',\r\n}\r\n\r\nconst defaultSwapperQueires: ISwapperQueries = {\r\n componentName: 'swapper',\r\n instanseQuery: '[data-kt-swapper=\"true\"]',\r\n attrQuery: 'data-kt-swapper-',\r\n}\r\n\r\nclass SwapperComponent {\r\n element: HTMLElement\r\n options: ISwapperOptions\r\n queries: ISwapperQueries\r\n\r\n constructor(_element: HTMLElement, _options: ISwapperOptions, _queries: ISwapperQueries) {\r\n this.element = _element\r\n this.options = Object.assign(defaultSwapperOptions, _options)\r\n this.queries = _queries\r\n\r\n // Initial update\r\n this.update()\r\n\r\n SwapperStore.set(this.element.id, this)\r\n }\r\n\r\n private getOption(name: string) {\r\n const attr = this.element.getAttribute(`${this.queries.attrQuery}${name}`)\r\n if (attr) {\r\n let value = getAttributeValueByBreakpoint(attr)\r\n if (attr != null && String(value) === 'true') {\r\n return true\r\n } else if (value !== null && String(value) === 'false') {\r\n return false\r\n }\r\n return value\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n } else {\r\n return null\r\n }\r\n }\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public update = () => {\r\n const parentSelector = this.getOption('parent')?.toString()\r\n const mode = this.getOption('mode')\r\n const parentElement = parentSelector ? document.querySelector(parentSelector) : null\r\n\r\n if (parentElement && this.element.parentNode !== parentElement) {\r\n if (mode === 'prepend') {\r\n parentElement.prepend(this.element)\r\n } else if (mode === 'append') {\r\n parentElement.append(this.element)\r\n }\r\n }\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string, handlerId: string) => {\r\n return EventHandlerUtil.off(this.element, name, handlerId)\r\n }\r\n\r\n public trigger = (name: string, event: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (\r\n el: HTMLElement,\r\n componentName: string = defaultSwapperQueires.componentName\r\n ): SwapperComponent | null => {\r\n const place = SwapperStore.get(el.id)\r\n if (place) {\r\n return place as SwapperComponent\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (\r\n selector: string = defaultSwapperQueires.instanseQuery,\r\n options: ISwapperOptions = defaultSwapperOptions,\r\n queries: ISwapperQueries = defaultSwapperQueires\r\n ) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let place = SwapperComponent.getInstance(item)\r\n if (!place) {\r\n place = new SwapperComponent(item, options, queries)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string = defaultSwapperQueires.instanseQuery,\r\n options: ISwapperOptions = defaultSwapperOptions,\r\n queries: ISwapperQueries = defaultSwapperQueires\r\n ): SwapperComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let place = SwapperComponent.getInstance(item)\r\n if (!place) {\r\n place = new SwapperComponent(item, options, queries)\r\n }\r\n return place\r\n }\r\n\r\n public static bootstrap = (selector: string = defaultSwapperQueires.instanseQuery) => {\r\n SwapperComponent.createInstances(selector)\r\n }\r\n\r\n public static reinitialization = (selector: string = defaultSwapperQueires.instanseQuery) => {\r\n SwapperComponent.createInstances(selector)\r\n }\r\n}\r\n\r\n// Window resize handler\r\nwindow.addEventListener('resize', function () {\r\n let timer\r\n throttle(\r\n timer,\r\n () => {\r\n // Locate and update Offcanvas instances on window resize\r\n const elements = document.querySelectorAll(defaultSwapperQueires.instanseQuery)\r\n elements.forEach((el) => {\r\n const place = SwapperComponent.getInstance(el as HTMLElement)\r\n if (place) {\r\n place.update()\r\n }\r\n })\r\n },\r\n 200\r\n )\r\n})\r\n\r\nexport {SwapperComponent, defaultSwapperOptions, defaultSwapperQueires}\r\n","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","import {createPopper, VirtualElement} from '@popperjs/core'\r\nimport {\r\n getElementChild,\r\n getElementParents,\r\n getAttributeValueByBreakpoint,\r\n getUniqueIdWithPrefix,\r\n DataUtil,\r\n ElementStyleUtil,\r\n EventHandlerUtil,\r\n insertAfterElement,\r\n slideUp,\r\n slideDown,\r\n DOMEventHandlerUtil,\r\n throttle,\r\n getHighestZindex,\r\n} from '../_utils/index'\r\n\r\nexport interface MenuOptions {\r\n dropdown: {\r\n hoverTimeout: number\r\n zindex: number\r\n }\r\n accordion: {\r\n slideSpeed: number\r\n expand: boolean\r\n }\r\n}\r\n\r\nconst defaultMenuOptions: MenuOptions = {\r\n dropdown: {\r\n hoverTimeout: 200,\r\n zindex: 105,\r\n },\r\n accordion: {\r\n slideSpeed: 250,\r\n expand: false,\r\n },\r\n}\r\n\r\ntype PopperPlacement =\r\n | 'right'\r\n | 'auto'\r\n | 'auto-start'\r\n | 'auto-end'\r\n | 'top'\r\n | 'bottom'\r\n | 'left'\r\n | 'top-start'\r\n | 'top-end'\r\n | 'bottom-start'\r\n | 'bottom-end'\r\n | 'right-start'\r\n | 'right-end'\r\n | 'left-start'\r\n | 'left-end'\r\n | undefined\r\n\r\nclass MenuComponent {\r\n element: HTMLElement\r\n options: MenuOptions\r\n instanceUid: string\r\n triggerElement: HTMLElement | null = null\r\n\r\n constructor(_element: HTMLElement, options: MenuOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultMenuOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('menu')\r\n // this.element.setAttribute('data-kt-menu', 'true')\r\n this._setTriggerElement()\r\n this._update()\r\n DataUtil.set(this.element, 'menu', this)\r\n return this\r\n }\r\n\r\n // Set external trigger element\r\n private _setTriggerElement = () => {\r\n const target = document.querySelector(\r\n `[data-kt-menu-target=\"#${this.element.getAttribute('id')}\"`\r\n )\r\n\r\n if (target) {\r\n this.triggerElement = target as HTMLElement\r\n } else if (this.element.closest('[data-kt-menu-trigger]')) {\r\n this.triggerElement = this.element.closest('[data-kt-menu-trigger]') as HTMLElement\r\n } else if (\r\n this.element.parentNode &&\r\n getElementChild(this.element.parentNode as HTMLElement, '[data-kt-menu-trigger]')\r\n ) {\r\n const child = getElementChild(\r\n this.element.parentNode as HTMLElement,\r\n '[data-kt-menu-trigger]'\r\n )\r\n if (child) {\r\n this.triggerElement = child\r\n }\r\n }\r\n\r\n if (this.triggerElement) {\r\n DataUtil.set(this.triggerElement, 'menu', this)\r\n }\r\n }\r\n\r\n // Test if menu has external trigger element\r\n private _isTriggerElement = (item: HTMLElement) => {\r\n return this.triggerElement === item\r\n }\r\n\r\n // Get item option(through html attributes)\r\n private _getItemOption = (item: HTMLElement, name: string) => {\r\n let value: string | JSON | null | boolean = null\r\n if (item && item.hasAttribute('data-kt-menu-' + name)) {\r\n const attr = item.getAttribute('data-kt-menu-' + name) || ''\r\n value = getAttributeValueByBreakpoint(attr)\r\n if (value !== null && String(value) === 'true') {\r\n value = true\r\n } else if (value !== null && String(value) === 'false') {\r\n value = false\r\n }\r\n }\r\n return value\r\n }\r\n\r\n // Get item element\r\n private _getItemElement = (_element: HTMLElement): HTMLElement | undefined => {\r\n // Element is the external trigger element\r\n if (this._isTriggerElement(_element)) {\r\n return _element\r\n }\r\n\r\n // Element has item toggler attribute\r\n if (_element.hasAttribute('data-kt-menu-trigger')) {\r\n return _element\r\n }\r\n\r\n // Element has item DOM reference in it's data storage\r\n const itemElement = DataUtil.get(_element, 'item')\r\n if (itemElement) {\r\n return itemElement as HTMLElement\r\n }\r\n\r\n // Item is parent of element\r\n const item = _element.closest('.menu-item[data-kt-menu-trigger]')\r\n if (item) {\r\n return item\r\n }\r\n\r\n // Element's parent has item DOM reference in it's data storage\r\n const sub = _element.closest('.menu-sub')\r\n if (sub) {\r\n const subItem = DataUtil.get(sub as HTMLElement, 'item')\r\n if (subItem) {\r\n return subItem as HTMLElement\r\n }\r\n }\r\n }\r\n\r\n // Get item parent element\r\n private _getItemParentElement = (item: HTMLElement) => {\r\n const sub = item.closest('.menu-sub')\r\n if (!sub) {\r\n return null\r\n }\r\n\r\n const subItem = DataUtil.get(sub, 'item')\r\n if (subItem) {\r\n return subItem as HTMLElement\r\n }\r\n\r\n const parentItem = sub.closest('.menu-item[data-kt-menu-trigger]')\r\n if (sub && parentItem) {\r\n return parentItem\r\n }\r\n\r\n return null\r\n }\r\n\r\n // Get item parent elements\r\n private _getItemParentElements = (item: HTMLElement) => {\r\n const parents: Array = []\r\n let parent: HTMLElement | null\r\n let i = 0\r\n let buffer: HTMLElement = item\r\n\r\n do {\r\n parent = this._getItemParentElement(buffer)\r\n if (parent) {\r\n parents.push(parent)\r\n buffer = parent as HTMLElement\r\n }\r\n\r\n i++\r\n } while (parent !== null && i < 20)\r\n\r\n if (this.triggerElement) {\r\n parents.unshift(this.triggerElement)\r\n }\r\n\r\n return parents\r\n }\r\n\r\n // Prepare popper config for dropdown(see: https://popper.js.org/docs/v2/)\r\n private _getDropdownPopperConfig = (item: HTMLElement) => {\r\n // Placement\r\n const placementOption = this._getItemOption(item, 'placement')\r\n let placement: PopperPlacement = 'right'\r\n if (placementOption) {\r\n placement = placementOption as PopperPlacement\r\n }\r\n\r\n // Flip\r\n // const flipValue = this._getItemOption(item, 'flip')\r\n // const flip = flipValue ? flipValue.toString().split(',') : []\r\n\r\n // Offset\r\n const offsetValue = this._getItemOption(item, 'offset')\r\n const offset = offsetValue ? offsetValue.toString().split(',') : []\r\n\r\n // Strategy\r\n const strategy: 'absolute' | 'fixed' | undefined =\r\n this._getItemOption(item, 'overflow') === true ? 'absolute' : 'fixed'\r\n\r\n return {\r\n placement: placement,\r\n strategy: strategy,\r\n modifiers: [\r\n {\r\n name: 'offset',\r\n options: {\r\n offset: offset,\r\n },\r\n },\r\n {\r\n name: 'preventOverflow',\r\n },\r\n {\r\n name: 'flip',\r\n options: {\r\n // altBoundary: true,\r\n // fallbackPlacements: flip,\r\n flipVariations: false,\r\n },\r\n },\r\n ],\r\n }\r\n }\r\n\r\n // Get item child element\r\n private _getItemChildElement = (item: HTMLElement): HTMLElement | null => {\r\n let selector = item\r\n\r\n const subItem = DataUtil.get(item, 'sub')\r\n if (subItem) {\r\n selector = subItem as HTMLElement\r\n }\r\n\r\n if (selector) {\r\n //element = selector.querySelector('.show.menu-item[data-kt-menu-trigger]');\r\n const element = selector.querySelector('.menu-item[data-kt-menu-trigger]')\r\n if (element) {\r\n return element\r\n }\r\n }\r\n return null\r\n }\r\n\r\n // Get item child elements\r\n private _getItemChildElements = (item: HTMLElement) => {\r\n const children: Array = []\r\n let child: HTMLElement | null\r\n let i = 0\r\n let buffer = item\r\n do {\r\n child = this._getItemChildElement(buffer)\r\n if (child) {\r\n children.push(child)\r\n buffer = child as HTMLElement\r\n }\r\n\r\n i++\r\n } while (child !== null && i < 20)\r\n\r\n return children\r\n }\r\n\r\n // Get item sub element\r\n private _getItemSubElement = (item: HTMLElement): HTMLElement | null => {\r\n if (!item) {\r\n return null\r\n }\r\n\r\n if (this._isTriggerElement(item)) {\r\n return this.element\r\n }\r\n\r\n if (item.classList.contains('menu-sub')) {\r\n return item\r\n } else if (DataUtil.has(item, 'sub')) {\r\n const itemSub = DataUtil.get(item, 'sub')\r\n return itemSub ? (itemSub as HTMLElement) : null\r\n } else {\r\n return getElementChild(item, '.menu-sub')\r\n }\r\n }\r\n\r\n private _getCss = (el: HTMLElement, styleProp: string) => {\r\n const defaultView = (el.ownerDocument || document).defaultView\r\n if (!defaultView) {\r\n return ''\r\n }\r\n\r\n // sanitize property name to css notation\r\n // (hyphen separated words eg. font-Size)\r\n styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase()\r\n\r\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp)\r\n }\r\n\r\n // Get item sub type\r\n private _getItemSubType = (element: HTMLElement) => {\r\n const sub = this._getItemSubElement(element)\r\n if (sub && parseInt(this._getCss(sub as HTMLElement, 'z-index')) > 0) {\r\n return 'dropdown'\r\n } else {\r\n return 'accordion'\r\n }\r\n }\r\n\r\n // Test if item's sub is shown\r\n private _isItemSubShown = (item: HTMLElement) => {\r\n let sub = this._getItemSubElement(item)\r\n if (sub) {\r\n if (this._getItemSubType(item) === 'dropdown') {\r\n const subHTMLElement = sub as HTMLElement\r\n return (\r\n subHTMLElement.classList.contains('show') &&\r\n subHTMLElement.hasAttribute('data-popper-placement')\r\n )\r\n } else {\r\n return item.classList.contains('show')\r\n }\r\n }\r\n\r\n return false\r\n }\r\n\r\n // Test if item dropdown is permanent\r\n private _isItemDropdownPermanent = (item: HTMLElement) => {\r\n return this._getItemOption(item, 'permanent') === true\r\n }\r\n\r\n // Test if item's parent is shown\r\n private _isItemParentShown = (item: HTMLElement) => {\r\n return getElementParents(item, '.menu-item.show').length > 0\r\n }\r\n\r\n // Test of it is item sub element\r\n private _isItemSubElement = (item: HTMLElement) => {\r\n return item.classList.contains('menu-sub')\r\n }\r\n\r\n // Test if item has sub\r\n private _hasItemSub = (item: HTMLElement) => {\r\n return item.classList.contains('menu-item') && item.hasAttribute('data-kt-menu-trigger')\r\n }\r\n\r\n // Get link element\r\n private _getItemLinkElement = (item: HTMLElement) => {\r\n return getElementChild(item, '.menu-link')\r\n }\r\n\r\n // Get toggle element\r\n private _getItemToggleElement = (item: HTMLElement) => {\r\n if (this.triggerElement) {\r\n return this.triggerElement\r\n }\r\n\r\n return this._getItemLinkElement(item)\r\n }\r\n\r\n // Show item dropdown\r\n private _showDropdown = (item: HTMLElement) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.show') === false) {\r\n return\r\n }\r\n\r\n // Hide all currently shown dropdowns except current one\r\n MenuComponent.hideDropdowns(item)\r\n\r\n // const toggle = this._isTriggerElement(item) ? item : this._getItemLinkElement(item);\r\n const sub = this._getItemSubElement(item)\r\n const width = this._getItemOption(item, 'width')\r\n const height = this._getItemOption(item, 'height')\r\n\r\n let zindex = this.options.dropdown.zindex\r\n const parentZindex = getHighestZindex(item) // update\r\n // Apply a new z-index if dropdown's toggle element or it's parent has greater z-index // update\r\n if (parentZindex !== null && parentZindex >= zindex) {\r\n zindex = parentZindex + 1\r\n }\r\n\r\n if (zindex && sub) {\r\n ElementStyleUtil.set(sub, 'z-index', zindex)\r\n }\r\n\r\n if (width && sub) {\r\n ElementStyleUtil.set(sub, 'width', width)\r\n }\r\n\r\n if (height && sub) {\r\n ElementStyleUtil.set(sub, 'height', height)\r\n }\r\n\r\n this.initDropdownPopper(item, sub as HTMLElement)\r\n\r\n item.classList.add('show')\r\n item.classList.add('menu-dropdown')\r\n sub?.classList.add('show')\r\n\r\n // Append the sub the the root of the menu\r\n if (this._getItemOption(item, 'overflow') === true) {\r\n if (sub) {\r\n document.body.appendChild(sub)\r\n DataUtil.set(item, 'sub', sub)\r\n DataUtil.set(sub, 'item', item)\r\n DataUtil.set(sub, 'menu', this)\r\n }\r\n } else {\r\n if (sub) {\r\n DataUtil.set(sub, 'item', item)\r\n }\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.shown')\r\n }\r\n\r\n // Init dropdown popper(new)\r\n private initDropdownPopper = (item: HTMLElement, sub: HTMLElement) => {\r\n // Setup popper instance\r\n let reference\r\n const attach = this._getItemOption(item, 'attach') as string\r\n\r\n if (attach) {\r\n if (attach === 'parent') {\r\n reference = item.parentNode\r\n } else {\r\n reference = document.querySelector(attach)\r\n }\r\n } else {\r\n reference = item\r\n }\r\n\r\n if (reference) {\r\n const popper = createPopper(\r\n reference as Element | VirtualElement,\r\n sub,\r\n this._getDropdownPopperConfig(item)\r\n )\r\n DataUtil.set(item, 'popper', popper)\r\n }\r\n }\r\n\r\n // Hide item dropdown\r\n private _hideDropdown = (item: HTMLElement) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hide') === false) {\r\n return\r\n }\r\n\r\n const sub = this._getItemSubElement(item)\r\n if (sub) {\r\n ElementStyleUtil.set(sub, 'z-index', '')\r\n ElementStyleUtil.set(sub, 'width', '')\r\n ElementStyleUtil.set(sub, 'height', '')\r\n }\r\n\r\n item.classList.remove('show')\r\n item.classList.remove('menu-dropdown')\r\n if (sub) {\r\n sub.classList.remove('show')\r\n }\r\n\r\n // Append the sub back to it's parent\r\n if (this._getItemOption(item, 'overflow') === true) {\r\n if (item.classList.contains('menu-item')) {\r\n if (sub) {\r\n item.appendChild(sub)\r\n }\r\n } else {\r\n insertAfterElement(this.element, item)\r\n }\r\n\r\n if (sub) {\r\n DataUtil.remove(item, 'sub')\r\n DataUtil.remove(sub, 'item')\r\n DataUtil.remove(sub, 'menu')\r\n }\r\n }\r\n\r\n if (DataUtil.has(item, 'popper') === true) {\r\n // @ts-ignore\r\n DataUtil.get(item, 'popper').destroy()\r\n DataUtil.remove(item, 'popper')\r\n }\r\n\r\n // Destroy popper(new)\r\n this.destroyDropdownPopper(item)\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden')\r\n }\r\n\r\n // Destroy dropdown popper(new)\r\n private destroyDropdownPopper = (item: HTMLElement) => {\r\n if (DataUtil.has(item, 'popper') === true) {\r\n // @ts-ignore\r\n DataUtil.get(item, 'popper').destroy()\r\n DataUtil.remove(item, 'popper')\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden')\r\n }\r\n\r\n private _showAccordion = (item: HTMLElement) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.show') === false) {\r\n return\r\n }\r\n\r\n if (this.options.accordion.expand === false) {\r\n this._hideAccordions(item)\r\n }\r\n\r\n if (DataUtil.has(item, 'popper') === true) {\r\n this._hideDropdown(item)\r\n }\r\n\r\n item.classList.add('hover') // updateWW\r\n item.classList.add('showing')\r\n\r\n const subElement = this._getItemSubElement(item)\r\n if (subElement) {\r\n const sub = subElement as HTMLElement\r\n slideDown(sub, this.options.accordion.slideSpeed, () => {\r\n item.classList.remove('showing')\r\n item.classList.add('show')\r\n sub.classList.add('show')\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.shown')\r\n })\r\n }\r\n }\r\n\r\n private _hideAccordion = (item: HTMLElement) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hide') === false) {\r\n return\r\n }\r\n\r\n const sub = this._getItemSubElement(item)\r\n item.classList.add('hiding')\r\n\r\n if (sub) {\r\n slideUp(sub, this.options.accordion.slideSpeed, () => {\r\n item.classList.remove('hiding')\r\n item.classList.remove('show')\r\n sub.classList.remove('show')\r\n item.classList.remove('hover') // update\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hidden')\r\n })\r\n }\r\n }\r\n\r\n // Hide all shown accordions of item\r\n private _hideAccordions = (item: HTMLElement) => {\r\n const itemsToHide = this.element.querySelectorAll('.show[data-kt-menu-trigger]')\r\n if (itemsToHide && itemsToHide.length > 0) {\r\n for (var i = 0, len = itemsToHide.length; i < len; i++) {\r\n const itemToHide = itemsToHide[i] as HTMLElement\r\n\r\n if (\r\n this._getItemSubType(itemToHide) === 'accordion' &&\r\n itemToHide !== item &&\r\n item.contains(itemToHide) === false &&\r\n itemToHide.contains(item) === false\r\n ) {\r\n this._hideAccordion(itemToHide)\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Event Handlers\r\n // Reset item state classes if item sub type changed\r\n private _reset = (item: HTMLElement) => {\r\n if (this._hasItemSub(item) === false) {\r\n return\r\n }\r\n\r\n const sub = this._getItemSubElement(item)\r\n\r\n // Reset sub state if sub type is changed during the window resize\r\n if (DataUtil.has(item, 'type') && DataUtil.get(item, 'type') !== this._getItemSubType(item)) {\r\n // updated\r\n item.classList.remove('hover')\r\n item.classList.remove('show')\r\n item.classList.remove('show')\r\n if (sub) {\r\n sub.classList.remove('show')\r\n }\r\n } // updated\r\n }\r\n\r\n // TODO: not done\r\n private _destroy = () => {}\r\n\r\n // Update all item state classes if item sub type changed\r\n private _update = () => {\r\n const items = this.element.querySelectorAll('.menu-item[data-kt-menu-trigger]')\r\n items.forEach((el) => this._reset(el as HTMLElement))\r\n }\r\n\r\n // Hide item sub\r\n private _hide = (item: HTMLElement) => {\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._isItemSubShown(item) === false) {\r\n return\r\n }\r\n\r\n if (this._getItemSubType(item) === 'dropdown') {\r\n this._hideDropdown(item)\r\n } else if (this._getItemSubType(item) === 'accordion') {\r\n this._hideAccordion(item)\r\n }\r\n }\r\n\r\n // Show item sub\r\n private _show = (item: HTMLElement) => {\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._isItemSubShown(item) === true) {\r\n return\r\n }\r\n\r\n if (this._getItemSubType(item) === 'dropdown') {\r\n this._showDropdown(item) // // show current dropdown\r\n } else if (this._getItemSubType(item) === 'accordion') {\r\n this._showAccordion(item)\r\n }\r\n\r\n // Remember last submenu type\r\n\r\n DataUtil.set(item, 'type', this._getItemSubType(item)) // updated\r\n }\r\n\r\n // Toggle item sub\r\n private _toggle = (item: HTMLElement) => {\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._isItemSubShown(item) === true) {\r\n this._hide(item)\r\n } else {\r\n this._show(item)\r\n }\r\n }\r\n\r\n // Mouseout handle\r\n private _mouseout = (element: HTMLElement, e: MouseEvent) => {\r\n const item = this._getItemElement(element)\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._getItemOption(item, 'trigger') !== 'hover') {\r\n return\r\n }\r\n\r\n const timeout = setTimeout(() => {\r\n if (DataUtil.get(item, 'hover') === '1') {\r\n this._hide(item)\r\n }\r\n }, this.options.dropdown.hoverTimeout)\r\n\r\n DataUtil.set(item, 'hover', '1')\r\n DataUtil.set(item, 'timeout', timeout)\r\n }\r\n\r\n // Mouseover handle\r\n private _mouseover = (element: HTMLElement, e: MouseEvent) => {\r\n const item = this._getItemElement(element)\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._getItemOption(item, 'trigger') !== 'hover') {\r\n return\r\n }\r\n\r\n if (DataUtil.get(item, 'hover') === '1') {\r\n const timeout = DataUtil.get(item, 'timeout')\r\n if (timeout) {\r\n clearTimeout(timeout as number)\r\n }\r\n DataUtil.remove(item, 'hover')\r\n DataUtil.remove(item, 'timeout')\r\n }\r\n\r\n this._show(item)\r\n }\r\n\r\n // Dismiss handler\r\n private _dismiss = (element: HTMLElement, e: Event) => {\r\n const item = this._getItemElement(element)\r\n if (!item) {\r\n return\r\n }\r\n const items = this._getItemChildElements(item)\r\n //if ( item !== null && _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {\r\n const itemSubType = this._getItemSubType(item)\r\n if (item !== null && itemSubType === 'dropdown') {\r\n this._hide(item) // hide items dropdown\r\n\r\n // Hide all child elements as well\r\n if (items.length > 0) {\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n //if ( _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {\r\n if (items[i] !== null && this._getItemSubType(items[i] as HTMLElement) === 'dropdown') {\r\n this._hide(items[i] as HTMLElement)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Link handler\r\n private _link = (element: HTMLElement, e: Event) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.link.click') === false) {\r\n return\r\n }\r\n\r\n // Dismiss all shown dropdowns\r\n MenuComponent.hideDropdowns(undefined)\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.link.clicked')\r\n }\r\n\r\n private _click = (element: HTMLElement, e: Event) => {\r\n e.preventDefault()\r\n const item = this._getItemElement(element)\r\n if (item) {\r\n if (this._getItemOption(item, 'trigger') !== 'click') {\r\n return\r\n }\r\n\r\n if (this._getItemOption(item, 'toggle') === false) {\r\n this._show(item)\r\n } else {\r\n this._toggle(item)\r\n }\r\n }\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public click = (element: HTMLElement, e: Event) => {\r\n return this._click(element, e)\r\n }\r\n\r\n public link = (element: HTMLElement, e: Event) => {\r\n return this._link(element, e)\r\n }\r\n\r\n public dismiss = (element: HTMLElement, e: Event) => {\r\n return this._dismiss(element, e)\r\n }\r\n\r\n public mouseover = (element: HTMLElement, e: Event) => {\r\n return this._mouseover(element, e as MouseEvent)\r\n }\r\n\r\n public mouseout = (element: HTMLElement, e: Event) => {\r\n return this._mouseout(element, e as MouseEvent)\r\n }\r\n\r\n // General Methods\r\n public getItemTriggerType = (item: HTMLElement) => {\r\n return this._getItemOption(item, 'trigger')\r\n }\r\n\r\n public getItemSubType = (element: HTMLElement) => {\r\n return this._getItemSubType(element)\r\n }\r\n\r\n public show = (item: HTMLElement) => {\r\n return this._show(item)\r\n }\r\n\r\n public hide = (item: HTMLElement) => {\r\n return this._hide(item)\r\n }\r\n\r\n public reset = (item: HTMLElement) => {\r\n return this._reset(item)\r\n }\r\n\r\n public update = () => {\r\n return this._update()\r\n }\r\n\r\n public getElement = () => {\r\n return this.element\r\n }\r\n\r\n public getItemLinkElement = (item: HTMLElement) => {\r\n return this._getItemLinkElement(item)\r\n }\r\n\r\n public getItemToggleElement = (item: HTMLElement) => {\r\n return this._getItemToggleElement(item)\r\n }\r\n\r\n public getItemSubElement = (item: HTMLElement) => {\r\n return this._getItemSubElement(item)\r\n }\r\n\r\n public getItemParentElements = (item: HTMLElement) => {\r\n return this._getItemParentElements(item)\r\n }\r\n\r\n public isItemSubShown = (item: HTMLElement) => {\r\n return this._isItemSubShown(item)\r\n }\r\n\r\n public isItemParentShown = (item: HTMLElement) => {\r\n return this._isItemParentShown(item)\r\n }\r\n\r\n public getTriggerElement = () => {\r\n return this.triggerElement\r\n }\r\n\r\n public isItemDropdownPermanent = (item: HTMLElement) => {\r\n return this._isItemDropdownPermanent(item)\r\n }\r\n\r\n // Accordion Mode Methods\r\n public hideAccordions = (item: HTMLElement) => {\r\n return this._hideAccordions(item)\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: any) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: any) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string, handlerId: string) => {\r\n return EventHandlerUtil.off(this.element, name, handlerId)\r\n }\r\n\r\n // public static methods\r\n // Get KTMenu instance by element\r\n public static getInstance = (element: HTMLElement): MenuComponent | null => {\r\n // Element has menu DOM reference in it's DATA storage\r\n const elementMenu = DataUtil.get(element, 'menu')\r\n if (elementMenu) {\r\n return elementMenu as MenuComponent\r\n }\r\n\r\n // Element has .menu parent\r\n const menu = element.closest('.menu')\r\n if (menu) {\r\n const menuData = DataUtil.get(menu as HTMLElement, 'menu')\r\n if (menuData) {\r\n return menuData as MenuComponent\r\n }\r\n }\r\n\r\n // Element has a parent with DOM reference to .menu in it's DATA storage\r\n if (element.classList.contains('menu-link')) {\r\n const sub = element.closest('.menu-sub')\r\n if (sub) {\r\n const subMenu = DataUtil.get(sub as HTMLElement, 'menu')\r\n if (subMenu) {\r\n return subMenu as MenuComponent\r\n }\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n // Hide all dropdowns and skip one if provided\r\n public static hideDropdowns = (skip: HTMLElement | undefined) => {\r\n const items = document.querySelectorAll(\r\n '.show.menu-dropdown[data-kt-menu-trigger]'\r\n )\r\n\r\n if (items && items.length > 0) {\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n const item = items[i]\r\n const menu = MenuComponent.getInstance(item as HTMLElement)\r\n\r\n if (menu && menu.getItemSubType(item) === 'dropdown') {\r\n if (skip) {\r\n if (\r\n // @ts-ignore\r\n menu.getItemSubElement(item).contains(skip) === false &&\r\n item.contains(skip) === false &&\r\n item !== skip\r\n ) {\r\n menu.hide(item)\r\n }\r\n } else {\r\n menu.hide(item)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public static updateDropdowns = () => {\r\n const items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]')\r\n if (items && items.length > 0) {\r\n for (var i = 0, len = items.length; i < len; i++) {\r\n var item = items[i]\r\n\r\n if (DataUtil.has(item as HTMLElement, 'popper')) {\r\n // @ts-ignore\r\n DataUtil.get(item as HTMLElement, 'popper').forceUpdate()\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Global handlers\r\n public static createInstances = (selector: string) => {\r\n // Initialize menus\r\n document.querySelectorAll(selector).forEach((el) => {\r\n const menuItem = el as HTMLElement\r\n let menuInstance = MenuComponent.getInstance(menuItem)\r\n if (!menuInstance) {\r\n menuInstance = new MenuComponent(el as HTMLElement, defaultMenuOptions)\r\n }\r\n })\r\n }\r\n\r\n public static initGlobalHandlers = () => {\r\n // Dropdown handler\r\n document.addEventListener('click', (e) => {\r\n const menuItems = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]')\r\n if (menuItems && menuItems.length > 0) {\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const item = menuItems[i] as HTMLElement\r\n const menuObj = MenuComponent.getInstance(item) as MenuComponent\r\n if (menuObj && menuObj.getItemSubType(item) === 'dropdown') {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const menu = menuObj.getElement()\r\n const sub = menuObj.getItemSubElement(item) as HTMLElement\r\n if (item === e.target || item.contains(e.target as HTMLElement)) {\r\n continue\r\n }\r\n\r\n if (sub && (sub === e.target || sub.contains(e.target as HTMLElement))) {\r\n continue\r\n }\r\n menuObj.hide(item)\r\n }\r\n }\r\n }\r\n })\r\n\r\n // Sub toggle handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '.menu-item[data-kt-menu-trigger] > .menu-link, [data-kt-menu-trigger]:not(.menu-item):not([data-kt-menu-trigger=\"auto\"])',\r\n 'click',\r\n function (this: HTMLElement, e: Event) {\r\n const menu = MenuComponent.getInstance(this) as MenuComponent\r\n if (menu) {\r\n return menu.click(this, e)\r\n }\r\n }\r\n )\r\n\r\n // // Link handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '.menu-item:not([data-kt-menu-trigger]) > .menu-link',\r\n 'click',\r\n function (this: HTMLElement, e: Event) {\r\n e.stopPropagation()\r\n const menu = MenuComponent.getInstance(this)\r\n if (menu && menu.link) {\r\n return menu.link(this, e)\r\n }\r\n }\r\n )\r\n\r\n // Dismiss handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '[data-kt-menu-dismiss=\"true\"]',\r\n 'click',\r\n function (this: HTMLElement, e: Event) {\r\n const menu = MenuComponent.getInstance(this) as MenuComponent\r\n if (menu) {\r\n return menu.dismiss(this, e)\r\n }\r\n }\r\n )\r\n\r\n // Mouseover handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '[data-kt-menu-trigger], .menu-sub',\r\n 'mouseover',\r\n function (this: HTMLElement, e: Event) {\r\n const menu = MenuComponent.getInstance(this) as MenuComponent\r\n if (menu && menu.getItemSubType(this) === 'dropdown') {\r\n return menu.mouseover(this, e)\r\n }\r\n }\r\n )\r\n\r\n // Mouseout handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '[data-kt-menu-trigger], .menu-sub',\r\n 'mouseout',\r\n function (this: HTMLElement, e: Event) {\r\n const menu = MenuComponent.getInstance(this) as MenuComponent\r\n if (menu && menu.getItemSubType(this) === 'dropdown') {\r\n return menu.mouseout(this, e)\r\n }\r\n }\r\n )\r\n\r\n // Resize handler\r\n window.addEventListener('resize', () => {\r\n let timer\r\n throttle(\r\n timer,\r\n () => {\r\n // Locate and update Drawer instances on window resize\r\n const elements = document.querySelectorAll('[data-kt-menu=\"true\"]')\r\n elements.forEach((el) => {\r\n const menu = MenuComponent.getInstance(el as HTMLElement)\r\n if (menu) {\r\n menu.update()\r\n }\r\n })\r\n },\r\n 200\r\n )\r\n })\r\n }\r\n\r\n public static bootstrap = () => {\r\n MenuComponent.initGlobalHandlers()\r\n MenuComponent.createInstances('[data-kt-menu=\"true\"]')\r\n }\r\n\r\n public static reinitialization = () => {\r\n MenuComponent.createInstances('[data-kt-menu=\"true\"]')\r\n }\r\n\r\n public static createInsance = (\r\n selector: string,\r\n options: MenuOptions = defaultMenuOptions\r\n ): MenuComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let menu = MenuComponent.getInstance(item)\r\n if (!menu) {\r\n menu = new MenuComponent(item, options)\r\n }\r\n return menu\r\n }\r\n}\r\n\r\nexport {MenuComponent, defaultMenuOptions}\r\n","import { Component, Injector, Inject } from '@angular/core';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport {\r\n TenantLoginInfoDto,\r\n EditionPaymentType,\r\n SubscriptionStartType,\r\n SubscriptionPaymentType,\r\n} from '@shared/service-proxies/service-proxies';\r\n\r\n@Component({ template: '' })\r\nexport class ThemesLayoutBaseComponent extends AppComponentBase {\r\n tenant: TenantLoginInfoDto = new TenantLoginInfoDto();\r\n subscriptionStartType = SubscriptionStartType;\r\n editionPaymentType: typeof EditionPaymentType = EditionPaymentType;\r\n installationMode = true;\r\n\r\n defaultLogo =\r\n AppConsts.appBaseUrl +\r\n '/assets/common/images/app-logo-on-' +\r\n this.currentTheme.baseSettings.menu.asideSkin +\r\n '.svg';\r\n\r\n constructor(injector: Injector, private _dateTimeService: DateTimeService) {\r\n super(injector);\r\n }\r\n\r\n subscriptionStatusBarVisible(): boolean {\r\n return (\r\n this.appSession.tenantId > 0 &&\r\n this.appSession.tenant.subscriptionPaymentType !== SubscriptionPaymentType.RecurringAutomatic &&\r\n (this.appSession.tenant.isInTrialPeriod || this.subscriptionIsExpiringSoon())\r\n );\r\n }\r\n\r\n subscriptionIsExpiringSoon(): boolean {\r\n if (this.appSession.tenant?.subscriptionEndDateUtc) {\r\n let today = this._dateTimeService.getUTCDate();\r\n let daysFromNow = this._dateTimeService.plusDays(today, AppConsts.subscriptionExpireNootifyDayCount);\r\n return daysFromNow >= this.appSession.tenant.subscriptionEndDateUtc;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getSubscriptionExpiringDayCount(): number {\r\n if (!this.appSession.tenant.subscriptionEndDateUtc) {\r\n return 0;\r\n }\r\n\r\n let todayUTC = this._dateTimeService.getUTCDate();\r\n let duration = this.appSession.tenant.subscriptionEndDateUtc.diff(todayUTC, 'days');\r\n return Math.round(duration.days);\r\n }\r\n\r\n getTrialSubscriptionNotification(): string {\r\n return this.l(\r\n 'TrialSubscriptionNotification',\r\n `${this.appSession.tenant.edition.displayName}`,\r\n `${this.l('ClickHere')}`\r\n );\r\n }\r\n\r\n getExpireNotification(localizationKey: string): string {\r\n return this.l(localizationKey, this.getSubscriptionExpiringDayCount());\r\n }\r\n\r\n isMobileDevice(): boolean {\r\n return KTUtil.isMobileDevice();\r\n }\r\n\r\n isDarkModeActive(): boolean {\r\n return this.appSession.theme.baseSettings.layout.darkMode;\r\n }\r\n\r\n getSkin(): string{\r\n return this.isDarkModeActive() ? 'dark': 'light';\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DateTime } from 'luxon';\r\n\r\n@Pipe({ name: 'luxonFromNow' })\r\nexport class LuxonFromNowPipe implements PipeTransform {\r\n transform(value: DateTime) {\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n return value.toRelative();\r\n }\r\n}\r\n","\r\n
\r\n \r\n \r\n {{ unreadNotificationCount }}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n \r\n \r\n

\r\n \r\n {{ 'Notifications' | localize }}\r\n \r\n {{ unreadNotificationCount }} {{ 'New' | localize }}\r\n \r\n \r\n \r\n \r\n \r\n

\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {{ notification.text }}\r\n \r\n
\r\n \r\n {{ notification.creationTime | luxonFromNow }}\r\n \r\n \r\n {{ 'SetAsRead' | localize }}\r\n \r\n
\r\n
\r\n\r\n \r\n {{ 'ThereAreNoNotifications' | localize }}\r\n \r\n \r\n
\r\n \r\n \r\n {{ 'SetAllAsRead' | localize }}\r\n \r\n\r\n \r\n {{ 'SeeAllNotifications' | localize }}\r\n \r\n \r\n \r\n
\r\n
\r\n","import { Component, Injector, OnInit, ViewEncapsulation, NgZone, Input } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { NotificationServiceProxy, UserNotification } from '@shared/service-proxies/service-proxies';\r\nimport { IFormattedUserNotification, UserNotificationHelper } from './UserNotificationHelper';\r\nimport { forEach as _forEach } from 'lodash-es';\r\nimport { UrlHelper } from '@shared/helpers/UrlHelper';\r\n\r\n@Component({\r\n templateUrl: './header-notifications.component.html',\r\n selector: 'header-notifications',\r\n styleUrls: ['./header-notifications.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class HeaderNotificationsComponent extends AppComponentBase implements OnInit {\r\n @Input() customStyle = 'btn btn-active-color-primary btn-active-light btn-custom btn-icon btn-icon-muted h-35px h-md-40px position-relative w-35px w-md-40px';\r\n @Input() iconStyle = 'flaticon-alert-2 unread-notification fs-4';\r\n @Input() isRight = true;\r\n\r\n notifications: IFormattedUserNotification[] = [];\r\n unreadNotificationCount = 0;\r\n\r\n constructor(\r\n injector: Injector,\r\n private _notificationService: NotificationServiceProxy,\r\n private _userNotificationHelper: UserNotificationHelper,\r\n public _zone: NgZone\r\n ) {\r\n super(injector);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loadNotifications();\r\n this.registerToEvents();\r\n }\r\n\r\n loadNotifications(): void {\r\n if (UrlHelper.isInstallUrl(location.href)) {\r\n return;\r\n }\r\n\r\n if (UrlHelper.isDownloadUrl(location.href)) {\r\n return;\r\n }\r\n\r\n this._notificationService.getUserNotifications(undefined, undefined, undefined, 3, 0).subscribe((result) => {\r\n this.unreadNotificationCount = result.unreadCount;\r\n this.notifications = [];\r\n _forEach(result.items, (item: UserNotification) => {\r\n this.notifications.push(this._userNotificationHelper.format(item));\r\n });\r\n });\r\n\r\n this.shouldUserUpdateApp();\r\n }\r\n\r\n registerToEvents() {\r\n let self = this;\r\n\r\n function onNotificationReceived(userNotification) {\r\n self._userNotificationHelper.show(userNotification);\r\n self.loadNotifications();\r\n }\r\n\r\n this.subscribeToEvent('abp.notifications.received', (userNotification) => {\r\n self._zone.run(() => {\r\n onNotificationReceived(userNotification);\r\n });\r\n });\r\n\r\n function onNotificationsRefresh() {\r\n self.loadNotifications();\r\n }\r\n\r\n this.subscribeToEvent('app.notifications.refresh', () => {\r\n self._zone.run(() => {\r\n onNotificationsRefresh();\r\n });\r\n });\r\n\r\n function onNotificationsRead(userNotificationId, success) {\r\n for (let i = 0; i < self.notifications.length; i++) {\r\n if (self.notifications[i].userNotificationId === userNotificationId) {\r\n self.notifications[i].state = 'READ';\r\n self.notifications[i].isUnread = false;\r\n }\r\n }\r\n\r\n if (success){\r\n self.unreadNotificationCount -= 1;\r\n }\r\n }\r\n\r\n this.subscribeToEvent('app.notifications.read', (userNotificationId, success) => {\r\n self._zone.run(() => {\r\n onNotificationsRead(userNotificationId, success);\r\n });\r\n });\r\n }\r\n\r\n shouldUserUpdateApp(): void{\r\n this._userNotificationHelper.shouldUserUpdateApp();\r\n }\r\n\r\n setAllNotificationsAsRead(): void {\r\n this._userNotificationHelper.setAllAsRead();\r\n }\r\n\r\n openNotificationSettingsModal(): void {\r\n this._userNotificationHelper.openSettingsModal();\r\n }\r\n\r\n setNotificationAsRead(userNotification: IFormattedUserNotification): void {\r\n if (userNotification.state !== 'READ') {\r\n this._userNotificationHelper.setAsRead(userNotification.userNotificationId);\r\n }\r\n }\r\n\r\n gotoUrl(url): void {\r\n if (url) {\r\n location.href = url;\r\n }\r\n }\r\n}\r\n","\r\n","import { Component, Injector } from '@angular/core';\r\nimport { NameValuePair } from '@shared/utils/name-value-pair';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { AppNavigationService } from '../app-navigation.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'menu-search-bar',\r\n templateUrl: './menu-search-bar.component.html',\r\n styleUrls: ['./menu-search-bar.component.css'],\r\n})\r\nexport class MenuSearchBarComponent extends AppComponentBase {\r\n allMenuItems: any[];\r\n\r\n searchMenuResults: NameValuePair[];\r\n\r\n isMenuSearchActive = false;\r\n\r\n selected: '';\r\n\r\n constructor(injector: Injector, private _appNavigationService: AppNavigationService, private router: Router) {\r\n super(injector);\r\n this.initializeMenuSearch();\r\n }\r\n\r\n showMenuItem(menuItem): boolean {\r\n return this._appNavigationService.showMenuItem(menuItem);\r\n }\r\n\r\n searchMenuItem(event) {\r\n this.searchMenuResults = this.allMenuItems\r\n .filter(\r\n (item) =>\r\n item.name.toLowerCase().includes(event.query.toLowerCase()) ||\r\n item.route.toLowerCase().includes(event.query.toLowerCase())\r\n )\r\n .map(\r\n (menuItem) =>\r\n new NameValuePair({\r\n name: menuItem.name,\r\n value: menuItem.route,\r\n })\r\n );\r\n }\r\n\r\n selectMenuItem(event) {\r\n if (event && event.value) {\r\n this.router.navigate([event.value]).then((navigated) => {\r\n this.selected = '';\r\n });\r\n }\r\n }\r\n\r\n private getAllMenuItems() {\r\n return this._appNavigationService\r\n .getAllMenuItems()\r\n .filter((item) => this.showMenuItem(item) && item.route)\r\n .map((menuItem) => ({\r\n name: this.l(menuItem.name),\r\n route: menuItem.route,\r\n }));\r\n }\r\n\r\n private initializeMenuSearch() {\r\n this.isMenuSearchActive = false;\r\n let themeSettings = this.currentTheme.baseSettings;\r\n\r\n if (themeSettings && themeSettings.menu && themeSettings.menu.searchActive) {\r\n this.allMenuItems = this.getAllMenuItems();\r\n this.isMenuSearchActive = true;\r\n }\r\n }\r\n}\r\n","
\r\n \r\n \r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {{ item.name | localize }}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n {{ item.name | localize }}\r\n \r\n \r\n {{ item.badge.value }}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n\r\n","import { PermissionCheckerService } from 'abp-ng2-module';\r\nimport {\r\n Injector,\r\n ElementRef,\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n Renderer2,\r\n AfterViewInit,\r\n Input,\r\n} from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { AppMenu } from './app-menu';\r\nimport { AppNavigationService } from './app-navigation.service';\r\nimport { NavigationEnd, NavigationCancel, Router } from '@angular/router';\r\nimport { filter } from 'rxjs/operators';\r\nimport { FormattedStringValueExtracter } from '@shared/helpers/FormattedStringValueExtracter';\r\nimport * as objectPath from 'object-path';\r\nimport { AppMenuItem } from './app-menu-item';\r\nimport { MenuComponent, DrawerComponent, ToggleComponent, ScrollComponent } from '@metronic/app/kt/components';\r\n\r\n@Component({\r\n templateUrl: './side-bar-menu.component.html',\r\n selector: 'side-bar-menu',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SideBarMenuComponent extends AppComponentBase implements OnInit, AfterViewInit {\r\n @Input() iconMenu = false;\r\n @Input() menuClass = 'menu menu-column menu-rounded menu-sub-indention px-3';\r\n\r\n menu: AppMenu = null;\r\n currentRouteUrl = '';\r\n insideTm: any;\r\n outsideTm: any;\r\n\r\n constructor(\r\n injector: Injector,\r\n private el: ElementRef,\r\n private router: Router,\r\n public permission: PermissionCheckerService,\r\n private _appNavigationService: AppNavigationService,\r\n private render: Renderer2\r\n ) {\r\n super(injector);\r\n }\r\n\r\n ngOnInit() {\r\n this.menu = this._appNavigationService.getMenu();\r\n\r\n this.currentRouteUrl = this.router.url.split(/[?#]/)[0];\r\n\r\n this.router.events\r\n .pipe(filter((event) => event instanceof NavigationEnd))\r\n .subscribe((event) => (this.currentRouteUrl = this.router.url.split(/[?#]/)[0]));\r\n\r\n this.router.events\r\n .pipe(filter((event) => event instanceof NavigationEnd || event instanceof NavigationCancel))\r\n .subscribe((event) => {\r\n this.reinitializeMenu();\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.scrollToCurrentMenuElement();\r\n }\r\n\r\n reinitializeMenu(): void {\r\n this.menu = this._appNavigationService.getMenu();\r\n this.currentRouteUrl = this.router.url.split(/[?#]/)[0];\r\n\r\n setTimeout(() => {\r\n MenuComponent.reinitialization();\r\n DrawerComponent.reinitialization();\r\n ToggleComponent.reinitialization();\r\n ScrollComponent.reinitialization();\r\n }, 50);\r\n }\r\n\r\n showMenuItem(menuItem): boolean {\r\n return this._appNavigationService.showMenuItem(menuItem);\r\n }\r\n\r\n isMenuItemIsActive(item): boolean {\r\n if (item.items.length) {\r\n return this.isMenuRootItemIsActive(item);\r\n }\r\n\r\n if (!item.route) {\r\n return false;\r\n }\r\n\r\n let urlTree = this.router.parseUrl(this.currentRouteUrl.replace(/\\/$/, ''));\r\n let urlString = '/' + urlTree.root.children.primary.segments.map((segment) => segment.path).join('/');\r\n let exactMatch = urlString === item.route.replace(/\\/$/, '');\r\n if (!exactMatch && item.routeTemplates) {\r\n for (let i = 0; i < item.routeTemplates.length; i++) {\r\n let result = new FormattedStringValueExtracter().Extract(urlString, item.routeTemplates[i]);\r\n if (result.IsMatch) {\r\n return true;\r\n }\r\n }\r\n }\r\n return exactMatch;\r\n }\r\n\r\n isMenuRootItemIsActive(item): boolean {\r\n let result = false;\r\n\r\n for (const subItem of item.items) {\r\n result = this.isMenuItemIsActive(subItem);\r\n if (result) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n scrollToCurrentMenuElement(): void {\r\n const path = location.pathname;\r\n const menuItem = document.querySelector('a[href=\\'' + path + '\\']');\r\n if (menuItem) {\r\n menuItem.scrollIntoView({ block: 'center' });\r\n }\r\n }\r\n\r\n getItemCssClasses(item: AppMenuItem, parentItem: AppMenuItem) {\r\n let classes = 'menu-item';\r\n\r\n if (item.items.length) {\r\n if (!this.iconMenu) {\r\n classes += ' menu-accordion';\r\n } else {\r\n if (parentItem == null) {\r\n classes += ' menu-dropdown';\r\n } else {\r\n classes += ' menu-accordion';\r\n }\r\n }\r\n }\r\n\r\n // custom class for menu item\r\n const customClass = objectPath.get(item, 'custom-class');\r\n if (customClass) {\r\n classes += ' ' + customClass;\r\n }\r\n\r\n if (this.iconMenu && parentItem == null) {\r\n classes += ' pb-3';\r\n }\r\n\r\n if (!this.iconMenu && this.isMenuItemIsActive(item)) {\r\n classes += ' show';\r\n }\r\n\r\n return classes;\r\n }\r\n\r\n getSubMenuItemCssClass(item: AppMenuItem, parentItem: AppMenuItem): string {\r\n let classes = 'menu-sub';\r\n\r\n if (!this.iconMenu) {\r\n classes += ' menu-sub-accordion';\r\n } else {\r\n if (parentItem == null) {\r\n classes += ' menu-sub-dropdown px-1 py-4';\r\n } else {\r\n classes += ' menu-sub-accordion';\r\n }\r\n }\r\n\r\n return classes;\r\n }\r\n}\r\n","\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n\r\n\r\n \r\n \r\n\r\n \r\n \r\n {{ item.name | localize }}\r\n \r\n\r\n","import { PermissionCheckerService } from 'abp-ng2-module';\r\nimport { Component, Injector, Input, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { NavigationEnd, NavigationCancel, Router } from '@angular/router';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { AppMenu } from './app-menu';\r\nimport { AppNavigationService } from './app-navigation.service';\r\nimport * as objectPath from 'object-path';\r\nimport { filter } from 'rxjs/operators';\r\nimport { ThemeAssetContributorFactory } from '@shared/helpers/ThemeAssetContributorFactory';\r\nimport { MenuComponent, DrawerComponent, ToggleComponent, ScrollComponent } from '@metronic/app/kt/components';\r\n\r\n@Component({\r\n templateUrl: './top-bar-menu.component.html',\r\n selector: 'top-bar-menu',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class TopBarMenuComponent extends AppComponentBase implements OnInit {\r\n menu: AppMenu = null;\r\n currentRouteUrl: any = '';\r\n menuDepth: 0;\r\n menuWrapperStyle = '';\r\n\r\n @Input() menuClass = 'menu menu-lg-rounded menu-column menu-lg-row menu-state-bg menu-title-gray-700 menu-state-title-primary menu-state-icon-primary menu-state-bullet-primary menu-arrow-gray-400 fw-bold my-5 my-lg-0 align-items-stretch';\r\n\r\n constructor(\r\n injector: Injector,\r\n private router: Router,\r\n public permission: PermissionCheckerService,\r\n private _appNavigationService: AppNavigationService\r\n ) {\r\n super(injector);\r\n }\r\n\r\n ngOnInit() {\r\n this.menu = this._appNavigationService.getMenu();\r\n this.currentRouteUrl = this.router.url;\r\n this.menuWrapperStyle = ThemeAssetContributorFactory.getCurrent().getMenuWrapperStyle();\r\n\r\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe((event) => {\r\n this.currentRouteUrl = this.router.url;\r\n });\r\n\r\n this.router.events\r\n .pipe(filter((event) => event instanceof NavigationEnd || event instanceof NavigationCancel))\r\n .subscribe((event) => {\r\n this.reinitializeMenu();\r\n });\r\n }\r\n\r\n reinitializeMenu(): void {\r\n setTimeout(() => {\r\n MenuComponent.reinitialization();\r\n DrawerComponent.reinitialization();\r\n ToggleComponent.reinitialization();\r\n ScrollComponent.reinitialization();\r\n }, 50);\r\n }\r\n\r\n showMenuItem(menuItem): boolean {\r\n return this._appNavigationService.showMenuItem(menuItem);\r\n }\r\n\r\n getItemCssClasses(item, parentItem, depth) {\r\n let cssClasses = 'menu-item';\r\n\r\n if (objectPath.get(item, 'icon-only')) {\r\n cssClasses += ' menu-item-icon-only';\r\n }\r\n\r\n return cssClasses;\r\n }\r\n\r\n getAnchorItemCssClasses(item, parentItem): string {\r\n let cssClasses = 'menu-link without-sub';\r\n\r\n return cssClasses;\r\n }\r\n\r\n getSubmenuCssClasses(item, parentItem, depth): string {\r\n return 'menu-sub menu-sub-lg-down-accordion menu-sub-lg-dropdown menu-rounded-0 py-lg-4 w-lg-225px';\r\n }\r\n\r\n isMenuItemIsActive(item): boolean {\r\n if (item.items.length) {\r\n return this.isMenuRootItemIsActive(item);\r\n }\r\n\r\n if (!item.route) {\r\n return false;\r\n }\r\n\r\n return this.currentRouteUrl.replace(/\\/$/, '') === item.route.replace(/\\/$/, '');\r\n }\r\n\r\n isMenuRootItemIsActive(item): boolean {\r\n if (item.items) {\r\n for (const subItem of item.items) {\r\n if (this.isMenuItemIsActive(subItem)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getItemAttrSubmenuToggle(menuItem, parentItem, depth) {\r\n if (depth && depth >= 1) {\r\n return 'hover';\r\n } else {\r\n return 'click';\r\n }\r\n }\r\n\r\n isMobileDevice(): any {\r\n return KTUtil.isMobileDevice();\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n WordPlay\r\n \r\n {{ appSession.tenant.edition.displayName }}\r\n \r\n | API: v{{ appSession.application.version }} | Client: v{{ webAppGuiVersion }} [{{ releaseDate }}]\r\n \r\n
\r\n
    \r\n \r\n
\r\n
\r\n
","import { Component, Injector, OnInit, Input } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { ThemeAssetContributorFactory } from '@shared/helpers/ThemeAssetContributorFactory';\r\n\r\n@Component({\r\n templateUrl: './footer.component.html',\r\n selector: 'footer-bar',\r\n})\r\nexport class FooterComponent extends AppComponentBase implements OnInit {\r\n @Input() useBottomDiv = true;\r\n\r\n releaseDate: string;\r\n webAppGuiVersion: string;\r\n footerStyle = 'footer py-4 d-flex flex-lg-column';\r\n\r\n constructor(injector: Injector) {\r\n super(injector);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.releaseDate = this.appSession.application.releaseDate.toFormat('yyyyLLdd');\r\n this.webAppGuiVersion = AppConsts.WebAppGuiVersion;\r\n\r\n let themeAssetContributor = ThemeAssetContributorFactory.getCurrent();\r\n if (themeAssetContributor) {\r\n this.footerStyle = themeAssetContributor.getFooterStyle();\r\n }\r\n }\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n","import { Component, Injector, Input } from '@angular/core';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\nimport { ThemesLayoutBaseComponent } from '../themes/themes-layout-base.component';\r\n\r\n@Component({\r\n selector: 'quick-theme-selection',\r\n templateUrl: './quick-theme-selection.component.html',\r\n})\r\nexport class QuickThemeSelectionComponent extends ThemesLayoutBaseComponent {\r\n @Input() customStyle = 'btn btn-icon btn-custom btn-icon-muted btn-active-light btn-active-color-primary w-35px h-35px w-md-40px h-md-40px position-relative';\r\n @Input() iconStyle = 'flaticon-interface-7 fs-4';\r\n\r\n isQuickThemeSelectEnabled: boolean = this.setting.getBoolean('App.UserManagement.IsQuickThemeSelectEnabled');\r\n\r\n public constructor(injector: Injector, _dateTimeService: DateTimeService) {\r\n super(injector, _dateTimeService);\r\n }\r\n}\r\n","
1\">\r\n
\r\n \r\n
\r\n
\r\n","import { Component, Injector, OnInit, Input } from '@angular/core';\r\nimport { ThemesLayoutBaseComponent } from '../themes/themes-layout-base.component';\r\nimport { ChangeUserLanguageDto, ProfileServiceProxy } from '@shared/service-proxies/service-proxies';\r\nimport { filter as _filter } from 'lodash-es';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\n\r\n@Component({\r\n selector: 'language-switch-dropdown',\r\n templateUrl: './language-switch-dropdown.component.html',\r\n})\r\nexport class LanguageSwitchDropdownComponent extends ThemesLayoutBaseComponent implements OnInit {\r\n @Input() isDropup = false;\r\n @Input() customStyle = 'btn btn-icon btn-custom btn-icon-muted btn-active-light btn-active-color-primary w-35px h-35px w-md-40px h-md-40px position-relative';\r\n\r\n languages: abp.localization.ILanguageInfo[];\r\n currentLanguage: abp.localization.ILanguageInfo;\r\n\r\n public constructor(\r\n injector: Injector,\r\n private _profileServiceProxy: ProfileServiceProxy,\r\n _dateTimeService: DateTimeService\r\n ) {\r\n super(injector, _dateTimeService);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.languages = _filter(this.localization.languages, (l) => l.isDisabled === false);\r\n this.currentLanguage = this.localization.currentLanguage;\r\n }\r\n\r\n changeLanguage(languageName: string): void {\r\n const input = new ChangeUserLanguageDto();\r\n input.languageName = languageName;\r\n \r\n this._profileServiceProxy.changeLanguage(input).subscribe(() => {\r\n abp.utils.setCookieValue(\r\n 'Abp.Localization.CultureName',\r\n languageName,\r\n new Date(new Date().getTime() + 5 * 365 * 86400000), //5 year\r\n abp.appPath\r\n );\r\n\r\n window.location.reload();\r\n });\r\n }\r\n}\r\n","import { Injector, Pipe, PipeTransform } from '@angular/core';\r\nimport { FeatureCheckerService } from 'abp-ng2-module';\r\n\r\n@Pipe({\r\n name: 'checkFeature',\r\n})\r\nexport class FeatureCheckerPipe implements PipeTransform {\r\n featureCheckerService: FeatureCheckerService;\r\n\r\n constructor(injector: Injector) {\r\n this.featureCheckerService = injector.get(FeatureCheckerService);\r\n }\r\n\r\n transform(feature: string): boolean {\r\n return this.featureCheckerService.isEnabled(feature);\r\n }\r\n}\r\n","\r\n \r\n\r\n\r\n \r\n\r\n","import { Component, Injector, OnInit, Input } from '@angular/core';\r\nimport { ThemesLayoutBaseComponent } from '../themes/themes-layout-base.component';\r\nimport { AbpSessionService } from 'abp-ng2-module';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\n\r\n@Component({\r\n selector: 'chat-toggle-button',\r\n templateUrl: './chat-toggle-button.component.html',\r\n})\r\nexport class ChatToggleButtonComponent extends ThemesLayoutBaseComponent implements OnInit {\r\n @Input() customStyle = 'btn btn-active-color-primary btn-active-light btn-custom btn-icon btn-icon-muted h-35px h-md-40px position-relative w-35px w-md-40px';\r\n @Input() iconStyle = 'flaticon-chat-2 fs-4';\r\n\r\n unreadChatMessageCount = 0;\r\n chatConnected = false;\r\n isHost = false;\r\n\r\n public constructor(\r\n injector: Injector,\r\n private _abpSessionService: AbpSessionService,\r\n _dateTimeService: DateTimeService\r\n ) {\r\n super(injector, _dateTimeService);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.registerToEvents();\r\n this.isHost = !this._abpSessionService.tenantId;\r\n }\r\n\r\n registerToEvents() {\r\n this.subscribeToEvent('app.chat.unreadMessageCountChanged', (messageCount) => {\r\n this.unreadChatMessageCount = messageCount;\r\n });\r\n\r\n this.subscribeToEvent('app.chat.connected', () => {\r\n this.chatConnected = true;\r\n });\r\n }\r\n}\r\n","\r\n","import { Component, Injector, Input } from '@angular/core';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\nimport { ThemesLayoutBaseComponent } from '../themes/themes-layout-base.component';\r\n\r\n@Component({\r\n selector: 'subscription-notification-bar',\r\n templateUrl: './subscription-notification-bar.component.html',\r\n})\r\nexport class SubscriptionNotificationBarComponent extends ThemesLayoutBaseComponent {\r\n\r\n @Input() customStyle = 'btn btn-icon btn-custom btn-icon-muted btn-active-light btn-active-color-primary w-35px h-35px w-md-40px h-md-40px position-relative';\r\n\r\n public constructor(injector: Injector, _dateTimeService: DateTimeService) {\r\n super(injector, _dateTimeService);\r\n }\r\n}\r\n","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n \"user\"\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n \"Logo\"\r\n
\r\n
\r\n
\r\n {{ tenancyName }}\\\r\n {{ userName }}\r\n
\r\n \r\n {{ emailAddress }}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {{ 'ManageLinkedAccounts' | localize }}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {{ getShownUserName(linkedUser) }}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {{ 'ChangeProfilePicture' | localize }}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {{ 'DownloadCollectedData' | localize }}\r\n \r\n
\r\n
\r\n \r\n \r\n\r\n","import { Component, Injector, OnInit, Input } from '@angular/core';\r\nimport { ThemesLayoutBaseComponent } from '../themes/themes-layout-base.component';\r\nimport { LinkedUserDto, ProfileServiceProxy, UserLinkServiceProxy } from '@shared/service-proxies/service-proxies';\r\nimport { LinkedAccountService } from '@app/shared/layout/linked-account.service';\r\nimport { AbpMultiTenancyService, AbpSessionService } from 'abp-ng2-module';\r\nimport { AppAuthService } from '@app/shared/common/auth/app-auth.service';\r\nimport { ImpersonationService } from '@app/admin/users/impersonation.service';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'user-menu',\r\n templateUrl: './user-menu.component.html',\r\n})\r\nexport class UserMenuComponent extends ThemesLayoutBaseComponent implements OnInit {\r\n @Input() iconOnly = false;\r\n\r\n @Input() togglerCssClass = 'cursor-pointer symbol symbol-35px symbol-md-40px';\r\n @Input() profileImageCssClass = '';\r\n //TODO@Metronic8 -> we may delete this.\r\n @Input() textCssClass = 'text-dark-50 fw-bolder fs-base d-none d-md-inline me-3';\r\n @Input() symbolCssClass = 'symbol symbol-lg-30px symbol-20px';\r\n @Input() symbolTextCssClass = 'symbol-label fs-2 fw-bold bg-success text-inverse-success';\r\n\r\n usernameFirstLetter = '';\r\n\r\n profilePicture = AppConsts.appBaseUrl + '/assets/common/images/default-profile-picture.png';\r\n shownLoginName = '';\r\n tenancyName = '';\r\n userName = '';\r\n emailAddress = '';\r\n\r\n recentlyLinkedUsers: LinkedUserDto[];\r\n isImpersonatedLogin = false;\r\n isMultiTenancyEnabled = false;\r\n\r\n mQuickUserOffcanvas: any;\r\n\r\n public constructor(\r\n injector: Injector,\r\n private _router: Router,\r\n private _linkedAccountService: LinkedAccountService,\r\n private _abpMultiTenancyService: AbpMultiTenancyService,\r\n private _profileServiceProxy: ProfileServiceProxy,\r\n private _userLinkServiceProxy: UserLinkServiceProxy,\r\n private _authService: AppAuthService,\r\n private _impersonationService: ImpersonationService,\r\n private _abpSessionService: AbpSessionService,\r\n _dateTimeService: DateTimeService\r\n ) {\r\n super(injector, _dateTimeService);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.isImpersonatedLogin = this._abpSessionService.impersonatorUserId > 0;\r\n this.isMultiTenancyEnabled = this._abpMultiTenancyService.isEnabled;\r\n this.setCurrentLoginInformations();\r\n this.getProfilePicture();\r\n this.getRecentlyLinkedUsers();\r\n this.registerToEvents();\r\n this.usernameFirstLetter = this.appSession.user.userName.substring(0, 1).toUpperCase();\r\n }\r\n\r\n setCurrentLoginInformations(): void {\r\n this.shownLoginName = this.appSession.getShownLoginName();\r\n this.tenancyName = this.appSession.tenancyName;\r\n this.userName = this.appSession.user.userName;\r\n this.emailAddress = this.appSession.user.emailAddress;\r\n }\r\n\r\n getShownUserName(linkedUser: LinkedUserDto): string {\r\n if (!this._abpMultiTenancyService.isEnabled) {\r\n return linkedUser.username;\r\n }\r\n\r\n return (linkedUser.tenantId ? linkedUser.tenancyName : '.') + '\\\\' + linkedUser.username;\r\n }\r\n\r\n getProfilePicture(): void {\r\n this._profileServiceProxy.getProfilePicture().subscribe((result) => {\r\n if (result && result.profilePicture) {\r\n this.profilePicture = 'data:image/jpeg;base64,' + result.profilePicture;\r\n }\r\n });\r\n }\r\n\r\n getRecentlyLinkedUsers(): void {\r\n this._userLinkServiceProxy.getRecentlyUsedLinkedUsers().subscribe((result) => {\r\n this.recentlyLinkedUsers = result.items;\r\n });\r\n }\r\n\r\n showLoginAttempts(): void {\r\n this._router.navigate(['/app/admin/login-attempts']);\r\n }\r\n\r\n showLinkedAccounts(): void {\r\n abp.event.trigger('app.show.linkedAccountsModal');\r\n }\r\n\r\n showUserDelegations(): void {\r\n abp.event.trigger('app.show.userDelegationsModal');\r\n }\r\n\r\n changePassword(): void {\r\n abp.event.trigger('app.show.changePasswordModal');\r\n }\r\n\r\n changeProfilePicture(): void {\r\n abp.event.trigger('app.show.changeProfilePictureModal');\r\n }\r\n\r\n changeMySettings(): void {\r\n abp.event.trigger('app.show.mySettingsModal');\r\n }\r\n\r\n registerToEvents() {\r\n this.subscribeToEvent('profilePictureChanged', () => {\r\n this.getProfilePicture();\r\n });\r\n\r\n this.subscribeToEvent('app.getRecentlyLinkedUsers', () => {\r\n this.getRecentlyLinkedUsers();\r\n });\r\n\r\n this.subscribeToEvent('app.onMySettingsModalSaved', () => {\r\n this.onMySettingsModalSaved();\r\n });\r\n }\r\n\r\n logout(): void {\r\n this._authService.logout();\r\n }\r\n\r\n onMySettingsModalSaved(): void {\r\n this.shownLoginName = this.appSession.getShownLoginName();\r\n }\r\n\r\n backToMyAccount(): void {\r\n this._impersonationService.backToImpersonator();\r\n }\r\n\r\n switchToLinkedUser(linkedUser: LinkedUserDto): void {\r\n this._linkedAccountService.switchToAccount(linkedUser.id, linkedUser.tenantId);\r\n }\r\n\r\n downloadCollectedData(): void {\r\n this._profileServiceProxy.prepareCollectedData().subscribe(() => {\r\n this.message.success(this.l('GdprDataPrepareStartedNotification'));\r\n });\r\n }\r\n}\r\n","\r\n \r\n \r\n \r\n \r\n\r\n","import { Component, Injector, OnInit, forwardRef, HostBinding, Input } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { UserDelegationServiceProxy, UserDelegationDto } from '@shared/service-proxies/service-proxies';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ImpersonationService } from '@app/admin/users/impersonation.service';\r\n\r\n@Component({\r\n selector: 'active-delegated-users-combo',\r\n template: `\r\n
\r\n
\r\n \r\n \r\n \r\n {{ delegation.username }} ({{\r\n 'ExpiresAt' | localize: (delegation.endTime | luxonFormat: 'F')\r\n }})\r\n \r\n \r\n
\r\n
\r\n `,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ActiveDelegatedUsersComboComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class ActiveDelegatedUsersComboComponent extends AppComponentBase implements OnInit {\r\n @HostBinding('style.display') public display = 'flex';\r\n @Input() customStyle = 'btn btn-clean btn-lg me-1 mt-2';\r\n\r\n delegations: UserDelegationDto[] = [];\r\n selectedUserDelegationId = 0;\r\n currentSelectedUserDelegationId = 0;\r\n\r\n constructor(\r\n private _userDelegationService: UserDelegationServiceProxy,\r\n private _impersonationService: ImpersonationService,\r\n injector: Injector\r\n ) {\r\n super(injector);\r\n }\r\n\r\n ngOnInit(): void {\r\n this._userDelegationService.getActiveUserDelegations().subscribe((result) => {\r\n this.delegations = result;\r\n });\r\n }\r\n\r\n switchToDelegatedUser($event): void {\r\n let username = $event.target.selectedOptions[0].getAttribute('data-username');\r\n\r\n this.message.confirm(\r\n this.l('SwitchToDelegatedUserWarningMessage', username),\r\n this.l('AreYouSure'),\r\n (isConfirmed) => {\r\n if (isConfirmed) {\r\n this.currentSelectedUserDelegationId = this.selectedUserDelegationId;\r\n this._impersonationService.delegatedImpersonate(\r\n this.selectedUserDelegationId,\r\n this.appSession.tenantId\r\n );\r\n } else {\r\n this.selectedUserDelegationId = this.currentSelectedUserDelegationId;\r\n }\r\n }\r\n );\r\n }\r\n}\r\n","\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n","import { Component, Input } from '@angular/core';\r\nimport { UiCustomizationSettingsServiceProxy } from '@shared/service-proxies/service-proxies';\r\n\r\n@Component({\r\n selector: 'toggle-dark-mode',\r\n templateUrl: './toggle-dark-mode.component.html'\r\n})\r\nexport class ToggleDarkModeComponent {\r\n @Input() isDarkModeActive = false;\r\n @Input() customStyle = 'btn btn-icon btn-icon-muted btn-active-light btn-active-color-primary w-30px h-30px w-md-40px h-md-40px';\r\n\r\n constructor(private _uiCustomizationAppService: UiCustomizationSettingsServiceProxy) {\r\n\r\n }\r\n\r\n toggleDarkMode(isDarkModeActive: boolean): void {\r\n this._uiCustomizationAppService.changeDarkModeOfCurrentTheme(isDarkModeActive).subscribe(() => {\r\n window.location.reload();\r\n });\r\n }\r\n}\r\n","
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
 
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n","import { Injector, Component, OnInit, Inject } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { ThemesLayoutBaseComponent } from '@app/shared/layout/themes/themes-layout-base.component';\r\nimport { UrlHelper } from '@shared/helpers/UrlHelper';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\n\r\n@Component({\r\n templateUrl: './default-layout.component.html',\r\n selector: 'default-layout',\r\n animations: [appModuleAnimation()],\r\n})\r\nexport class DefaultLayoutComponent extends ThemesLayoutBaseComponent implements OnInit {\r\n\r\n remoteServiceBaseUrl: string = AppConsts.remoteServiceBaseUrl;\r\n\r\n constructor(\r\n injector: Injector,\r\n _dateTimeService: DateTimeService,\r\n @Inject(DOCUMENT) private document: Document) {\r\n super(injector, _dateTimeService);\r\n }\r\n\r\n ngOnInit() {\r\n this.installationMode = UrlHelper.isInstallUrl(location.href);\r\n if (this.currentTheme.baseSettings.menu.defaultMinimizedAside) {\r\n this.document.body.setAttribute('data-kt-aside-minimize', 'on');\r\n }\r\n }\r\n\r\n getMobileMenuSkin(): string {\r\n return this.appSession.theme.baseSettings.layout.darkMode ? \"dark\" : \"light\";\r\n }\r\n}\r\n","
\r\n \"flag\"\r\n {{tenantLanguageName$ | async}}\r\n
\r\n\r\n
\r\n
Languages
\r\n \r\n \r\n
\r\n
\r\n
\r\n \"flag\"\r\n
{{language.name}}
\r\n
\r\n
","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { Language, LanguageData } from './LanguageConsts';\r\nimport { LanguageService } from './language-picker-local.service';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Component({\r\n templateUrl: './language-picker-local.component.html',\r\n styleUrls: ['./language-picker-local.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'language-picker-local',\r\n})\r\n\r\nexport class LanguagePickerLocalComponent extends AppComponentBase {\r\n\r\n languages: Language[] = LanguageData.languages;\r\n imageSrc: string = this.languages[2]?.flagUrl;\r\n isUserLoggedIn: boolean = true;\r\n islanguageListShown:boolean=false;\r\n languagesForDropDown: Language[] = LanguageData.languages.filter((x)=>x.id!==7 && x.id!==8);\r\n\r\n constructor(\r\n injector: Injector,\r\n private _languageService: LanguageService,\r\n\r\n ) {\r\n super(injector)\r\n this.isUserLoggedIn = abp.session.userId > 0;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.tenantLanguageName$.subscribe();\r\n }\r\n\r\n readonly tenantLanguageName$ = this._languageService.tetantLanguageName$;\r\n\r\n readonly flagUrl$ = this.tenantLanguageName$.pipe(\r\n map((languageName)=>\r\n {\r\n return this.languages.find((language) => language.name === languageName).flagUrl;\r\n }\r\n )\r\n );\r\n\r\n showLanguageList(){\r\n this.islanguageListShown=!this.islanguageListShown;\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n \r\n \"logo\"\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
","import { Component, Injector, Renderer2, ViewEncapsulation } from '@angular/core';\r\nimport { AppAuthService } from '@app/shared/common/auth/app-auth.service';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { LanguageService } from '../language-picker-local/language-picker-local.service';\r\n\r\n@Component({\r\n templateUrl: './site-nav.component.html',\r\n styleUrls: ['./site-nav.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'site-nav',\r\n})\r\nexport class SiteNavbarComponent extends AppComponentBase {\r\n\r\n burgerSrc: string = \"/assets/images/icons/burger.png\";\r\n myLinksId: string = \"myLinksNone\";\r\n userName: string = this.appSession.user?.userName;\r\n isUserLoggedIn: boolean = true;\r\n showPicker: boolean = false;\r\n menuBtnClick: boolean = false;\r\n \r\n constructor(\r\n injector: Injector,\r\n private _authService: AppAuthService,\r\n private _languageService: LanguageService,\r\n private renderer: Renderer2,\r\n\r\n ) {\r\n super(injector);\r\n this.isUserLoggedIn = abp.session.userId > 0;\r\n }\r\n\r\n ngOnInit(){\r\n this.removeBurgerMenu(); \r\n }\r\n\r\n toggleBurger(): void {\r\n if (this.myLinksId === \"myLinks\") {\r\n this.myLinksId = \"myLinksNone\";\r\n }\r\n else {\r\n this.myLinksId = \"myLinks\";\r\n }\r\n }\r\n\r\n removeBurgerMenu(){\r\n this.renderer.listen('window', 'click', (e: HTMLElementEvent) => {\r\n \r\n var classList=e.target.classList;\r\n \r\n if(!classList.contains(\"ng-tns-c606-2\") && !classList.contains(\"navbar-burger\"))\r\n {\r\n this.myLinksId = \"myLinksNone\";\r\n }\r\n });\r\n\r\n type HTMLElementEvent = Event & {\r\n target: T;\r\n }\r\n }\r\n\r\n logout(): void {\r\n this._authService.logout();\r\n }\r\n}\r\n","\r\n\r\n
\r\n
\r\n \r\n
\r\n [{{item.date | date:'HH:mm:ss'}}]:\r\n \r\n {{ argument | json }}\r\n \r\n
\r\n
\r\n
\r\n","import { ChangeDetectorRef, Component, Injector, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { DateTime } from 'luxon';\r\nimport { Paginator } from 'primeng/paginator';\r\nimport { Table } from 'primeng/table';\r\nimport { Subject } from 'rxjs';\r\nimport { map, tap, distinctUntilChanged, filter } from 'rxjs/operators';\r\n\r\n@Component({\r\n templateUrl: './site-theme.component.html',\r\n styleUrls: ['./site-theme.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'site-layout',\r\n})\r\nexport class SiteLayoutComponent extends AppComponentBase implements OnInit {\r\n @ViewChild('dataTable', { static: true }) dataTable: Table;\r\n @ViewChild('paginator', { static: true }) paginator: Paginator;\r\n\r\n readStateFilter = 'ALL';\r\n dateRange: DateTime[] = [this._dateTimeService.getStartOfDay(), this._dateTimeService.getEndOfDay()];\r\n loading = false;\r\n\r\n constructor(\r\n injector: Injector,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n private _dateTimeService: DateTimeService\r\n ) {\r\n super(injector);\r\n }\r\n\r\n get logs(): any[] {\r\n return window['_logs'];\r\n }\r\n\r\n private _showLogsTapCount = 0;\r\n private _showLogsSubject = new Subject();\r\n readonly showLogs$ = this._showLogsSubject.asObservable().pipe(\r\n tap(() => ++this._showLogsTapCount),\r\n map(() => this._showLogsTapCount >= 5),\r\n distinctUntilChanged(),\r\n filter(show => show),\r\n tap(() => {\r\n let _logsDate = window['_logsDate'];\r\n this.changeDetectorRef.detectChanges();\r\n \r\n setInterval(() => {\r\n const logsDate = window['_logsDate'];\r\n if (_logsDate == logsDate) {\r\n return;\r\n }\r\n\r\n _logsDate = logsDate;\r\n this.changeDetectorRef.detectChanges();\r\n }, 2000);\r\n\r\n setTimeout(() => {\r\n window.scrollTo(0, document.body.scrollHeight);\r\n }, 1000);\r\n })\r\n );\r\n\r\n copyLogs(): void {\r\n const logs = document.getElementById('console-logs');\r\n this.copyToClipboard(logs.innerText);\r\n }\r\n\r\n private copyToClipboard(text) {\r\n var textArea = document.createElement(\"textarea\");\r\n textArea.value = text;\r\n document.body.appendChild(textArea);\r\n textArea.select();\r\n document.execCommand(\"Copy\");\r\n textArea.remove();\r\n };\r\n\r\n\r\n ngOnInit(): void {\r\n var invervalId = setInterval(() => {\r\n var element = document.querySelector(\"#footerHarry\");\r\n if (!element) {\r\n return;\r\n }\r\n clearInterval(invervalId);\r\n element.onclick = () => {\r\n this._showLogsSubject.next(void 0);\r\n };\r\n }, 1000);\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{ 'LinkNewAccount' | localize }}\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n {{ 'Cancel' | localize }}\r\n \r\n \r\n \r\n {{ 'Save' | localize }}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n","import { Component, ElementRef, EventEmitter, Injector, Output, ViewChild } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { LinkToUserInput, UserLinkServiceProxy } from '@shared/service-proxies/service-proxies';\r\nimport { ModalDirective } from 'ngx-bootstrap/modal';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'linkAccountModal',\r\n templateUrl: './link-account-modal.component.html',\r\n})\r\nexport class LinkAccountModalComponent extends AppComponentBase {\r\n @ViewChild('linkAccountModal', { static: true }) modal: ModalDirective;\r\n\r\n @Output() modalSave: EventEmitter = new EventEmitter();\r\n\r\n active = false;\r\n saving = false;\r\n\r\n linkUser: LinkToUserInput = new LinkToUserInput();\r\n\r\n constructor(injector: Injector, private _userLinkService: UserLinkServiceProxy) {\r\n super(injector);\r\n }\r\n\r\n show(): void {\r\n this.active = true;\r\n this.linkUser = new LinkToUserInput();\r\n this.linkUser.tenancyName = this.appSession.tenancyName;\r\n this.modal.show();\r\n }\r\n\r\n onShown(): void {\r\n document.getElementById('TenancyName').focus();\r\n }\r\n\r\n save(): void {\r\n this.saving = true;\r\n this._userLinkService\r\n .linkToUser(this.linkUser)\r\n .pipe(\r\n finalize(() => {\r\n this.saving = false;\r\n })\r\n )\r\n .subscribe(() => {\r\n this.notify.info(this.l('SavedSuccessfully'));\r\n this.close();\r\n this.modalSave.emit(null);\r\n });\r\n }\r\n\r\n close(): void {\r\n this.active = false;\r\n this.modal.hide();\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n

\r\n {{ 'LinkedAccounts' | localize }}\r\n

\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {{ 'Actions' | localize }}\r\n \r\n \r\n {{ 'UserName' | localize }}\r\n \r\n \r\n \r\n {{ 'Delete' | localize }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ 'UserName' | localize }}\r\n {{ getShownLinkedUserName(record) }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{ 'NoData' | localize }}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n","import { AbpMultiTenancyService } from 'abp-ng2-module';\r\nimport { Component, EventEmitter, Injector, Output, ViewChild } from '@angular/core';\r\nimport { LinkedAccountService } from '@app/shared/layout/linked-account.service';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { LinkedUserDto, UnlinkUserInput, UserLinkServiceProxy } from '@shared/service-proxies/service-proxies';\r\nimport { ModalDirective } from 'ngx-bootstrap/modal';\r\nimport { LazyLoadEvent } from 'primeng/api';\r\nimport { Paginator } from 'primeng/paginator';\r\nimport { Table } from 'primeng/table';\r\nimport { LinkAccountModalComponent } from './link-account-modal.component';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'linkedAccountsModal',\r\n templateUrl: './linked-accounts-modal.component.html',\r\n})\r\nexport class LinkedAccountsModalComponent extends AppComponentBase {\r\n @ViewChild('linkedAccountsModal', { static: true }) modal: ModalDirective;\r\n @ViewChild('linkAccountModal', { static: true }) linkAccountModal: LinkAccountModalComponent;\r\n @ViewChild('dataTable', { static: true }) dataTable: Table;\r\n @ViewChild('paginator', { static: true }) paginator: Paginator;\r\n\r\n @Output() modalClose: EventEmitter = new EventEmitter();\r\n\r\n constructor(\r\n injector: Injector,\r\n private abpMultiTenancyService: AbpMultiTenancyService,\r\n private _userLinkService: UserLinkServiceProxy,\r\n private _linkedAccountService: LinkedAccountService\r\n ) {\r\n super(injector);\r\n }\r\n\r\n getLinkedUsers(event?: LazyLoadEvent) {\r\n this.primengTableHelper.showLoadingIndicator();\r\n\r\n this._userLinkService\r\n .getLinkedUsers(\r\n this.primengTableHelper.getMaxResultCount(this.paginator, event),\r\n this.primengTableHelper.getSkipCount(this.paginator, event),\r\n this.primengTableHelper.getSorting(this.dataTable)\r\n )\r\n .pipe(finalize(() => this.primengTableHelper.hideLoadingIndicator()))\r\n .subscribe((result) => {\r\n this.primengTableHelper.totalRecordsCount = result.totalCount;\r\n this.primengTableHelper.records = result.items;\r\n this.primengTableHelper.hideLoadingIndicator();\r\n });\r\n }\r\n\r\n getShownLinkedUserName(linkedUser: LinkedUserDto): string {\r\n if (!this.abpMultiTenancyService.isEnabled) {\r\n return linkedUser.username;\r\n }\r\n\r\n return (linkedUser.tenantId ? linkedUser.tenancyName : '.') + '\\\\' + linkedUser.username;\r\n }\r\n\r\n deleteLinkedUser(linkedUser: LinkedUserDto): void {\r\n this.message.confirm(\r\n this.l('LinkedUserDeleteWarningMessage', linkedUser.username),\r\n this.l('AreYouSure'),\r\n (isConfirmed) => {\r\n if (isConfirmed) {\r\n const unlinkUserInput = new UnlinkUserInput();\r\n unlinkUserInput.userId = linkedUser.id;\r\n unlinkUserInput.tenantId = linkedUser.tenantId;\r\n\r\n this._userLinkService.unlinkUser(unlinkUserInput).subscribe(() => {\r\n this.reloadPage();\r\n this.notify.success(this.l('SuccessfullyUnlinked'));\r\n });\r\n }\r\n }\r\n );\r\n }\r\n\r\n reloadPage(): void {\r\n this.paginator.changePage(this.paginator.getPage());\r\n }\r\n\r\n manageLinkedAccounts(): void {\r\n this.linkAccountModal.show();\r\n }\r\n\r\n switchToUser(linkedUser: LinkedUserDto): void {\r\n this._linkedAccountService.switchToAccount(linkedUser.id, linkedUser.tenantId);\r\n }\r\n\r\n show(): void {\r\n this.modal.show();\r\n }\r\n\r\n close(): void {\r\n this.modal.hide();\r\n this.modalClose.emit(null);\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{ 'DelegateNewUser' | localize }}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {{ 'Cancel' | localize }}\r\n \r\n \r\n \r\n {{ 'Save' | localize }}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n","import { Component, EventEmitter, Injector, Output, ViewChild } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport {\r\n CreateUserDelegationDto,\r\n NameValueDto,\r\n FindUsersInput,\r\n CommonLookupServiceProxy,\r\n UserDelegationServiceProxy,\r\n} from '@shared/service-proxies/service-proxies';\r\nimport { ModalDirective } from 'ngx-bootstrap/modal';\r\nimport { CommonLookupModalComponent } from '@app/shared/common/lookup/common-lookup-modal.component';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { DateTime } from 'luxon';\r\nimport { DateTimeService } from '../common/timing/date-time.service';\r\n\r\n@Component({\r\n selector: 'createNewUserDelegation',\r\n templateUrl: './create-new-user-delegation-modal.component.html',\r\n})\r\nexport class CreateNewUserDelegationModalComponent extends AppComponentBase {\r\n @ViewChild('userDelegationModal', { static: true }) modal: ModalDirective;\r\n @ViewChild('userLookupModal', { static: true }) userLookupModal: CommonLookupModalComponent;\r\n @Output() modalSave: EventEmitter = new EventEmitter();\r\n\r\n active = false;\r\n saving = false;\r\n selectedUsername = '';\r\n\r\n userDelegation: CreateUserDelegationDto = new CreateUserDelegationDto();\r\n\r\n constructor(\r\n injector: Injector,\r\n private _userDelegationService: UserDelegationServiceProxy,\r\n private _commonLookupService: CommonLookupServiceProxy,\r\n private _dateTimeService: DateTimeService\r\n ) {\r\n super(injector);\r\n }\r\n\r\n show(): void {\r\n this.active = true;\r\n this.userDelegation = new CreateUserDelegationDto();\r\n\r\n this.userLookupModal.configure({\r\n title: this.l('SelectAUser'),\r\n dataSource: (skipCount: number, maxResultCount: number, filter: string, tenantId?: number) => {\r\n let input = new FindUsersInput();\r\n input.filter = filter;\r\n input.excludeCurrentUser = true;\r\n input.maxResultCount = maxResultCount;\r\n input.skipCount = skipCount;\r\n input.tenantId = tenantId;\r\n return this._commonLookupService.findUsers(input);\r\n },\r\n });\r\n\r\n this.modal.show();\r\n }\r\n\r\n showCommonLookupModal(): void {\r\n this.userLookupModal.show();\r\n }\r\n\r\n userSelected(user: NameValueDto): void {\r\n this.userDelegation.targetUserId = parseInt(user.value);\r\n this.selectedUsername = user.name;\r\n }\r\n\r\n save(): void {\r\n this.saving = true;\r\n\r\n let input = new CreateUserDelegationDto();\r\n input.targetUserId = this.userDelegation.targetUserId;\r\n input.startTime = this._dateTimeService.getStartOfDayForDate(this.userDelegation.startTime);\r\n input.endTime = this._dateTimeService.getEndOfDayForDate(this.userDelegation.endTime);\r\n\r\n this._userDelegationService\r\n .delegateNewUser(input)\r\n .pipe(\r\n finalize(() => {\r\n this.saving = false;\r\n })\r\n )\r\n .subscribe(() => {\r\n this.notify.info(this.l('SavedSuccessfully'));\r\n this.close();\r\n this.modalSave.emit(null);\r\n });\r\n }\r\n\r\n close(): void {\r\n this.active = false;\r\n this.selectedUsername = '';\r\n this.modal.hide();\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n

\r\n {{ 'UserDelegations' | localize }}\r\n

\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {{ 'UserName' | localize }}\r\n \r\n \r\n \r\n {{ 'StartTime' | localize }}\r\n \r\n \r\n {{ 'EndTime' | localize }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ 'UserName' | localize }}\r\n {{ record.username }}\r\n \r\n \r\n {{ 'StartTime' | localize }}\r\n {{ record.startTime | luxonFormat: 'F\t' }}\r\n \r\n \r\n {{ 'EndTime' | localize }}\r\n {{ record.endTime | luxonFormat: 'F\t' }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{ 'NoData' | localize }}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n","import { Component, EventEmitter, Injector, Output, ViewChild } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { UserDelegationServiceProxy, UserDelegationDto } from '@shared/service-proxies/service-proxies';\r\nimport { ModalDirective } from 'ngx-bootstrap/modal';\r\nimport { LazyLoadEvent } from 'primeng/api';\r\nimport { Paginator } from 'primeng/paginator';\r\nimport { Table } from 'primeng/table';\r\nimport { CreateNewUserDelegationModalComponent } from './create-new-user-delegation-modal.component';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'userDelegationsModal',\r\n templateUrl: './user-delegations-modal.component.html',\r\n})\r\nexport class UserDelegationsModalComponent extends AppComponentBase {\r\n @ViewChild('userDelegationsModal', { static: true }) modal: ModalDirective;\r\n @ViewChild('createNewUserDelegation', { static: true })\r\n createNewUserDelegation: CreateNewUserDelegationModalComponent;\r\n @ViewChild('dataTable', { static: true }) dataTable: Table;\r\n @ViewChild('paginator', { static: true }) paginator: Paginator;\r\n\r\n @Output() modalClose: EventEmitter = new EventEmitter();\r\n\r\n constructor(injector: Injector, private _userDelegationService: UserDelegationServiceProxy) {\r\n super(injector);\r\n }\r\n\r\n getUserDelegations(event?: LazyLoadEvent) {\r\n this.primengTableHelper.showLoadingIndicator();\r\n\r\n this._userDelegationService\r\n .getDelegatedUsers(\r\n this.primengTableHelper.getMaxResultCount(this.paginator, event),\r\n this.primengTableHelper.getSkipCount(this.paginator, event),\r\n this.primengTableHelper.getSorting(this.dataTable)\r\n )\r\n .pipe(finalize(() => this.primengTableHelper.hideLoadingIndicator()))\r\n .subscribe((result) => {\r\n this.primengTableHelper.totalRecordsCount = result.totalCount;\r\n this.primengTableHelper.records = result.items;\r\n this.primengTableHelper.hideLoadingIndicator();\r\n });\r\n }\r\n\r\n deleteUserDelegation(userDelegation: UserDelegationDto): void {\r\n this.message.confirm(\r\n this.l('UserDelegationDeleteWarningMessage', userDelegation.username),\r\n this.l('AreYouSure'),\r\n (isConfirmed) => {\r\n if (isConfirmed) {\r\n this._userDelegationService.removeDelegation(userDelegation.id).subscribe(() => {\r\n this.reloadPage();\r\n this.notify.success(this.l('SuccessfullyDeleted'));\r\n });\r\n }\r\n }\r\n );\r\n }\r\n\r\n reloadPage(): void {\r\n this.paginator.changePage(this.paginator.getPage());\r\n }\r\n\r\n manageUserDelegations(): void {\r\n this.createNewUserDelegation.show();\r\n }\r\n\r\n show(): void {\r\n this.modal.show();\r\n }\r\n\r\n onShown(): void {\r\n this.getUserDelegations(null);\r\n }\r\n\r\n close(): void {\r\n this.modal.hide();\r\n this.modalClose.emit(null);\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{ 'ChangePassword' | localize }}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
    \r\n
  • \r\n {{ 'PasswordComplexity_RequireDigit_Hint' | localize }}\r\n
  • \r\n
  • \r\n {{ 'PasswordComplexity_RequireLowercase_Hint' | localize }}\r\n
  • \r\n
  • \r\n {{ 'PasswordComplexity_RequireUppercase_Hint' | localize }}\r\n
  • \r\n
  • \r\n {{ 'PasswordComplexity_RequireNonAlphanumeric_Hint' | localize }}\r\n
  • \r\n
  • \r\n {{\r\n 'PasswordComplexity_RequiredLength_Hint'\r\n | localize: passwordComplexitySetting.requiredLength\r\n }}\r\n
  • \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
    \r\n
  • \r\n {{ 'PasswordComplexity_RequireDigit_Hint' | localize }}\r\n
  • \r\n
  • \r\n {{ 'PasswordComplexity_RequireLowercase_Hint' | localize }}\r\n
  • \r\n
  • \r\n {{ 'PasswordComplexity_RequireUppercase_Hint' | localize }}\r\n
  • \r\n
  • \r\n {{ 'PasswordComplexity_RequireNonAlphanumeric_Hint' | localize }}\r\n
  • \r\n
  • \r\n {{\r\n 'PasswordComplexity_RequiredLength_Hint'\r\n | localize: passwordComplexitySetting.requiredLength\r\n }}\r\n
  • \r\n
  • {{ 'PasswordsDontMatch' | localize }}
  • \r\n
\r\n
\r\n
\r\n
\r\n \r\n {{ 'Cancel' | localize }}\r\n \r\n \r\n \r\n {{ 'Save' | localize }}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n","import { Component, ElementRef, Injector, ViewChild } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport {\r\n ChangePasswordInput,\r\n PasswordComplexitySetting,\r\n ProfileServiceProxy,\r\n} from '@shared/service-proxies/service-proxies';\r\nimport { ModalDirective } from 'ngx-bootstrap/modal';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'changePasswordModal',\r\n templateUrl: './change-password-modal.component.html',\r\n styleUrls: ['./change-password-modal.component.less'],\r\n})\r\nexport class ChangePasswordModalComponent extends AppComponentBase {\r\n @ViewChild('currentPasswordInput', { static: true }) currentPasswordInput: ElementRef;\r\n @ViewChild('changePasswordModal', { static: true }) modal: ModalDirective;\r\n\r\n passwordComplexitySetting: PasswordComplexitySetting = new PasswordComplexitySetting();\r\n currentPassword: string;\r\n password: string;\r\n confirmPassword: string;\r\n\r\n saving = false;\r\n active = false;\r\n\r\n constructor(injector: Injector, private _profileService: ProfileServiceProxy) {\r\n super(injector);\r\n }\r\n\r\n show(): void {\r\n this.active = true;\r\n this.currentPassword = '';\r\n this.password = '';\r\n this.confirmPassword = '';\r\n\r\n this._profileService.getPasswordComplexitySetting().subscribe((result) => {\r\n this.passwordComplexitySetting = result.setting;\r\n this.modal.show();\r\n });\r\n }\r\n\r\n onShown(): void {\r\n document.getElementById('CurrentPassword').focus();\r\n }\r\n\r\n close(): void {\r\n this.active = false;\r\n this.modal.hide();\r\n }\r\n\r\n save(): void {\r\n let input = new ChangePasswordInput();\r\n input.currentPassword = this.currentPassword;\r\n input.newPassword = this.password;\r\n\r\n this.saving = true;\r\n this._profileService\r\n .changePassword(input)\r\n .pipe(\r\n finalize(() => {\r\n this.saving = false;\r\n })\r\n )\r\n .subscribe(() => {\r\n this.notify.info(this.l('YourPasswordHasChangedSuccessfully'));\r\n this.close();\r\n });\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{ 'VerifyYourCode' | localize }}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n {{ 'Verify' | localize }}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n","import { Component, ElementRef, EventEmitter, Injector, Output, ViewChild, Input } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { ProfileServiceProxy, VerifySmsCodeInputDto } from '@shared/service-proxies/service-proxies';\r\nimport { ModalDirective } from 'ngx-bootstrap/modal';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'smsVerificationModal',\r\n templateUrl: './sms-verification-modal.component.html',\r\n})\r\nexport class SmsVerificationModalComponent extends AppComponentBase {\r\n @ViewChild('nameInput', { static: true }) nameInput: ElementRef;\r\n @ViewChild('smsVerificationModal', { static: true }) modal: ModalDirective;\r\n\r\n @Input() newPhoneNumber: string;\r\n\r\n @Output() modalSave: EventEmitter = new EventEmitter();\r\n\r\n public active = false;\r\n public saving = false;\r\n public verifyCodeInput: VerifySmsCodeInputDto = new VerifySmsCodeInputDto();\r\n\r\n constructor(injector: Injector, private _profileService: ProfileServiceProxy) {\r\n super(injector);\r\n }\r\n\r\n show(): void {\r\n this.active = true;\r\n this.modal.show();\r\n }\r\n\r\n close(): void {\r\n this.active = false;\r\n this.modal.hide();\r\n }\r\n\r\n save(): void {\r\n this.saving = true;\r\n this.verifyCodeInput.phoneNumber = this.newPhoneNumber;\r\n this._profileService\r\n .verifySmsCode(this.verifyCodeInput)\r\n .pipe(\r\n finalize(() => {\r\n this.saving = false;\r\n })\r\n )\r\n .subscribe(() => {\r\n this.close();\r\n this.modalSave.emit();\r\n });\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{ 'MySettings' | localize }}\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n\r\n \r\n \r\n \r\n {{ 'Verify' | localize }}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n {{ 'CanNotChangeAdminUserName' | localize }}\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n

Google Authenticator

\r\n\r\n
\r\n
\r\n {{ 'ScanQrCodeWithYourMobileApp' | localize }}\r\n
\r\n
\r\n \r\n
\r\n \r\n {{ 'GoogleAuthenticatorReferrerLink' | localize }}:\r\n \r\n Google Authenticator\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n {{ 'Cancel' | localize }}\r\n \r\n \r\n \r\n {{ 'Save' | localize }}\r\n \r\n
\r\n \r\n
\r\n \r\n\r\n\r\n","import { Component, EventEmitter, Injector, Output, ViewChild, OnInit } from '@angular/core';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport {\r\n CurrentUserProfileEditDto,\r\n SettingScopes,\r\n ProfileServiceProxy,\r\n UpdateGoogleAuthenticatorKeyOutput,\r\n SendVerificationSmsInputDto,\r\n} from '@shared/service-proxies/service-proxies';\r\nimport { ModalDirective } from 'ngx-bootstrap/modal';\r\nimport { SmsVerificationModalComponent } from './sms-verification-modal.component';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'mySettingsModal',\r\n templateUrl: './my-settings-modal.component.html',\r\n})\r\nexport class MySettingsModalComponent extends AppComponentBase implements OnInit {\r\n @ViewChild('mySettingsModal', { static: true }) modal: ModalDirective;\r\n @ViewChild('smsVerificationModal') smsVerificationModal: SmsVerificationModalComponent;\r\n @Output() modalSave: EventEmitter = new EventEmitter();\r\n\r\n public active = false;\r\n public saving = false;\r\n public isGoogleAuthenticatorEnabled = false;\r\n public isPhoneNumberConfirmed: boolean;\r\n public smsEnabled: boolean;\r\n public user: CurrentUserProfileEditDto;\r\n public showTimezoneSelection: boolean = abp.clock.provider.supportsMultipleTimezone;\r\n public canChangeUserName: boolean;\r\n public defaultTimezoneScope: SettingScopes = SettingScopes.User;\r\n public savedPhoneNumber: string;\r\n public newPhoneNumber: string;\r\n\r\n isMultiTenancyEnabled: boolean = this.multiTenancy.isEnabled;\r\n isTwoFactorLoginEnabledForApplication = false;\r\n\r\n private _initialTimezone: string = undefined;\r\n\r\n constructor(injector: Injector, private _profileService: ProfileServiceProxy) {\r\n super(injector);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.isTwoFactorLoginEnabledForApplication = abp.setting.getBoolean(\r\n 'Abp.Zero.UserManagement.TwoFactorLogin.IsEnabled'\r\n );\r\n }\r\n\r\n show(): void {\r\n this.active = true;\r\n this._profileService.getCurrentUserProfileForEdit().subscribe((result) => {\r\n this.smsEnabled = this.setting.getBoolean('App.UserManagement.SmsVerificationEnabled');\r\n this.user = result;\r\n this._initialTimezone = result.timezone;\r\n this.canChangeUserName = this.user.userName !== AppConsts.userManagement.defaultAdminUserName;\r\n this.modal.show();\r\n this.isGoogleAuthenticatorEnabled = result.isGoogleAuthenticatorEnabled;\r\n this.isPhoneNumberConfirmed = result.isPhoneNumberConfirmed;\r\n this.savedPhoneNumber = result.phoneNumber;\r\n });\r\n }\r\n\r\n updateQrCodeSetupImageUrl(): void {\r\n this._profileService.updateGoogleAuthenticatorKey().subscribe((result: UpdateGoogleAuthenticatorKeyOutput) => {\r\n this.user.qrCodeSetupImageUrl = result.qrCodeSetupImageUrl;\r\n this.isGoogleAuthenticatorEnabled = true;\r\n });\r\n }\r\n\r\n disableGoogleAuthenticator(): void {\r\n this._profileService.disableGoogleAuthenticator().subscribe(() => {\r\n this.isGoogleAuthenticatorEnabled = false;\r\n });\r\n }\r\n\r\n smsVerify(): void {\r\n let input = new SendVerificationSmsInputDto();\r\n input.phoneNumber = this.user.phoneNumber;\r\n this._profileService.sendVerificationSms(input).subscribe(() => {\r\n this.smsVerificationModal.show();\r\n });\r\n }\r\n\r\n changePhoneNumberToVerified(): void {\r\n this.isPhoneNumberConfirmed = true;\r\n this.savedPhoneNumber = this.user.phoneNumber;\r\n }\r\n\r\n onShown(): void {\r\n document.getElementById('Name').focus();\r\n }\r\n\r\n close(): void {\r\n this.active = false;\r\n this.modal.hide();\r\n }\r\n\r\n save(): void {\r\n this.saving = true;\r\n this._profileService\r\n .updateCurrentUserProfile(this.user)\r\n .pipe(\r\n finalize(() => {\r\n this.saving = false;\r\n })\r\n )\r\n .subscribe(() => {\r\n this.appSession.user.name = this.user.name;\r\n this.appSession.user.surname = this.user.surname;\r\n this.appSession.user.userName = this.user.userName;\r\n this.appSession.user.emailAddress = this.user.emailAddress;\r\n this.notify.info(this.l('SavedSuccessfully'));\r\n this.close();\r\n this.modalSave.emit(null);\r\n\r\n if (abp.clock.provider.supportsMultipleTimezone && this._initialTimezone !== this.user.timezone) {\r\n this.message.info(this.l('TimeZoneSettingChangedRefreshPageNotification')).then(() => {\r\n window.location.reload();\r\n });\r\n }\r\n });\r\n }\r\n}\r\n","import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nexport default baseExtremum;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nexport default baseLt;\n","import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nexport default min;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nexport default arrayReduce;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nexport default baseReduce;\n","import { ChatMessageDto, FriendDto } from '@shared/service-proxies/service-proxies';\r\n\r\nexport class ChatFriendDto extends FriendDto {\r\n messages: ChatMessageDto[];\r\n allPreviousMessagesLoaded = false;\r\n messagesLoaded = false;\r\n}\r\n","import { AfterViewInit, Component, Input } from '@angular/core';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { ProfileServiceProxy } from '@shared/service-proxies/service-proxies';\r\n\r\n@Component({\r\n selector: 'friend-profile-picture',\r\n template: `\r\n \"...\"\r\n `,\r\n})\r\nexport class FriendProfilePictureComponent implements AfterViewInit {\r\n @Input() userId: number;\r\n @Input() tenantId: number;\r\n\r\n profilePicture = AppConsts.appBaseUrl + '/assets/common/images/default-profile-picture.png';\r\n\r\n constructor(private _profileService: ProfileServiceProxy) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.setProfileImage();\r\n }\r\n\r\n private setProfileImage(): void {\r\n if (!this.tenantId) {\r\n this.tenantId = undefined;\r\n }\r\n\r\n this._profileService.getFriendProfilePicture(this.userId, this.tenantId).subscribe((result) => {\r\n if (result && result.profilePicture) {\r\n this.profilePicture = 'data:image/jpeg;base64,' + result.profilePicture;\r\n }\r\n });\r\n }\r\n}\r\n","
\r\n
\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n {{ friend.friendUserName }}\r\n
\r\n \r\n {{ friend.friendTenancyName }}\r\n \r\n Host\r\n
\r\n
\r\n
\r\n
\r\n \r\n {{ friend.unreadMessageCount }}\r\n \r\n \r\n {{ friend.unreadMessageCount }}\r\n \r\n
","import { AbpMultiTenancyService } from 'abp-ng2-module';\r\nimport { Component, EventEmitter, Injector, Input, Output } from '@angular/core';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { ChatFriendDto } from './ChatFriendDto';\r\n\r\n@Component({\r\n templateUrl: './chat-friend-list-item.component.html',\r\n selector: 'chat-friend-list-item',\r\n})\r\nexport class ChatFriendListItemComponent {\r\n @Input() friend: ChatFriendDto;\r\n @Output() selectChatFriend: EventEmitter = new EventEmitter();\r\n\r\n remoteServiceUrl: string = AppConsts.remoteServiceBaseUrl;\r\n appPath: string = AppConsts.appBaseUrl;\r\n multiTenancy: AbpMultiTenancyService;\r\n\r\n constructor(injector: Injector) {\r\n this.multiTenancy = injector.get(AbpMultiTenancyService);\r\n }\r\n\r\n getShownUserName(tenanycName: string, userName: string): string {\r\n if (!this.multiTenancy.isEnabled) {\r\n return userName;\r\n }\r\n return (tenanycName ? tenanycName : '.') + '\\\\' + userName;\r\n }\r\n\r\n getRemoteImageUrl(profilePictureId: string, userId: number, tenantId?: number): string {\r\n return (\r\n this.remoteServiceUrl +\r\n '/Profile/GetFriendProfilePictureById?id=' +\r\n profilePictureId +\r\n '&userId=' +\r\n userId +\r\n '&tenantId=' +\r\n tenantId\r\n );\r\n }\r\n}\r\n","\r\n \r\n\r\n\r\n \r\n {{ fileName }}\r\n \r\n\r\n\r\n \r\n {{ chatMessage }}\r\n\r\n\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { ChatMessageDto, ChatServiceProxy } from '@shared/service-proxies/service-proxies';\r\nimport { AppConsts } from 'shared/AppConsts';\r\nimport { LocalStorageService } from '@shared/utils/local-storage.service';\r\n\r\n@Component({\r\n selector: 'chat-message',\r\n templateUrl: './chat-message.component.html',\r\n})\r\nexport class ChatMessageComponent implements OnInit {\r\n @Input()\r\n message: ChatMessageDto;\r\n\r\n chatMessage: string;\r\n chatMessageType: string;\r\n fileName: string;\r\n fileContentType: string;\r\n\r\n constructor(private _chatService: ChatServiceProxy, private _localStorageService: LocalStorageService) {}\r\n\r\n ngOnInit(): void {\r\n this.setChatMessageType();\r\n }\r\n\r\n private setChatMessageType(): void {\r\n const self = this;\r\n this._localStorageService.getItem(AppConsts.authorization.encrptedAuthTokenName, function (err, value) {\r\n let encryptedAuthToken = value?.token;\r\n if (self.message.message.startsWith('[image]')) {\r\n self.chatMessageType = 'image';\r\n\r\n let image = JSON.parse(self.message.message.substring('[image]'.length));\r\n self.chatMessage =\r\n AppConsts.remoteServiceBaseUrl +\r\n '/Chat/GetUploadedObject?fileId=' +\r\n image.id +\r\n '&fileName=' +\r\n image.name +\r\n '&contentType=' +\r\n image.contentType +\r\n '&' +\r\n AppConsts.authorization.encrptedAuthTokenName +\r\n '=' +\r\n encodeURIComponent(encryptedAuthToken);\r\n } else if (self.message.message.startsWith('[file]')) {\r\n self.chatMessageType = 'file';\r\n\r\n let file = JSON.parse(self.message.message.substring('[file]'.length));\r\n self.chatMessage =\r\n AppConsts.remoteServiceBaseUrl +\r\n '/Chat/GetUploadedObject?fileId=' +\r\n file.id +\r\n '&fileName=' +\r\n file.name +\r\n '&contentType=' +\r\n file.contentType +\r\n '&' +\r\n AppConsts.authorization.encrptedAuthTokenName +\r\n '=' +\r\n encodeURIComponent(encryptedAuthToken);\r\n\r\n self.fileName = file.name;\r\n } else if (self.message.message.startsWith('[link]')) {\r\n self.chatMessageType = 'link';\r\n let linkMessage = JSON.parse(self.message.message.substring('[link]'.length));\r\n self.chatMessage = linkMessage.message == null ? '' : linkMessage.message;\r\n } else {\r\n self.chatMessageType = 'text';\r\n self.chatMessage = self.message.message;\r\n }\r\n });\r\n }\r\n}\r\n","\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n

\r\n {{ 'YouDontHaveAnyFriend' | localize }}\r\n

\r\n
\r\n
\r\n
\r\n {{ 'BlockedUsers' | localize }}\r\n
\r\n \r\n
\r\n \r\n
\r\n

\r\n {{ 'YouDontHaveAnyBlockedFriend' | localize }}\r\n

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {{ getShownUserName(selectedUser.friendTenancyName, selectedUser.friendUserName) }}\r\n \r\n
\r\n \r\n \r\n {{ 'Online' | localize }}\r\n \r\n \r\n \r\n {{ 'Offline' | localize }}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \"Pic\"\r\n
\r\n
\r\n \r\n {{ currentUser.userName }}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n {{ selectedUser.friendUserName }}\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n EventEmitter,\r\n Injector,\r\n OnInit,\r\n Input,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n NgZone,\r\n HostBinding,\r\n ElementRef,\r\n HostListener,\r\n} from '@angular/core';\r\nimport { CommonLookupModalComponent } from '@app/shared/common/lookup/common-lookup-modal.component';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { DomHelper } from '@shared/helpers/DomHelper';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { FileUpload } from 'primeng/fileupload';\r\nimport { finalize } from 'rxjs/operators';\r\nimport {\r\n BlockUserInput,\r\n ChatSide,\r\n ChatServiceProxy,\r\n CommonLookupServiceProxy,\r\n CreateFriendshipRequestByUserNameInput,\r\n CreateFriendshipRequestInput,\r\n FindUsersInput,\r\n FriendDto,\r\n FriendshipState,\r\n FriendshipServiceProxy,\r\n MarkAllUnreadMessagesOfUserAsReadInput,\r\n NameValueDto,\r\n ProfileServiceProxy,\r\n UnblockUserInput,\r\n UserLoginInfoDto,\r\n ChatMessageReadState,\r\n ChatMessageDto,\r\n} from '@shared/service-proxies/service-proxies';\r\nimport { LocalStorageService } from '@shared/utils/local-storage.service';\r\nimport { filter as _filter, map as _map, forEach as _forEach, min as _min, reduce as _reduce } from 'lodash-es';\r\nimport { DateTime } from 'luxon';\r\nimport { ChatFriendDto } from './ChatFriendDto';\r\nimport { ChatSignalrService } from './chat-signalr.service';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\nimport { DrawerComponent, ScrollComponent } from '@metronic/app/kt/components';\r\n\r\n@Component({\r\n templateUrl: './chat-bar.component.html',\r\n selector: 'chat-bar',\r\n styleUrls: ['./chat-bar.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ChatBarComponent extends AppComponentBase implements OnInit, AfterViewInit {\r\n @Output() onProgress: EventEmitter = new EventEmitter();\r\n @Input() userLookupModal: CommonLookupModalComponent;\r\n @HostBinding('attr.ktOffcanvas')\r\n @HostBinding('style.overflow')\r\n @ViewChild('ChatMessage', { static: true })\r\n chatMessageInput: ElementRef;\r\n @ViewChild('chatScrollBar', { static: true }) chatScrollBar;\r\n @ViewChild('chatImageUpload', { static: false }) chatImageUpload: FileUpload;\r\n @ViewChild('chatFileUpload', { static: false }) chatFileUpload: FileUpload;\r\n\r\n public progress = 0;\r\n styleOverflow: any = 'hidden';\r\n friendDtoState: typeof FriendshipState = FriendshipState;\r\n uploadUrl: string;\r\n isFileSelected = false;\r\n friends: ChatFriendDto[];\r\n currentUser: UserLoginInfoDto = this.appSession.user;\r\n profilePicture = AppConsts.appBaseUrl + '/assets/common/images/default-profile-picture.png';\r\n chatMessage = '';\r\n chatDrawer: DrawerComponent;\r\n tenantToTenantChatAllowed = false;\r\n tenantToHostChatAllowed = false;\r\n interTenantChatAllowed = false;\r\n sendingMessage = false;\r\n loadingPreviousUserMessages = false;\r\n userNameFilter = '';\r\n serverClientTimeDifference = 0;\r\n isMultiTenancyEnabled: boolean = this.multiTenancy.isEnabled;\r\n appChatSide: typeof ChatSide = ChatSide;\r\n appChatMessageReadState: typeof ChatMessageReadState = ChatMessageReadState;\r\n\r\n _isOpen: boolean;\r\n _pinned = false;\r\n _selectedUser: ChatFriendDto = new ChatFriendDto();\r\n\r\n constructor(\r\n private el: ElementRef,\r\n injector: Injector,\r\n private _friendshipService: FriendshipServiceProxy,\r\n private _chatService: ChatServiceProxy,\r\n private _commonLookupService: CommonLookupServiceProxy,\r\n private _localStorageService: LocalStorageService,\r\n private _chatSignalrService: ChatSignalrService,\r\n private _profileService: ProfileServiceProxy,\r\n private _httpClient: HttpClient,\r\n private _dateTimeService: DateTimeService,\r\n public _zone: NgZone\r\n ) {\r\n super(injector);\r\n this.uploadUrl = AppConsts.remoteServiceBaseUrl + '/Chat/UploadFile';\r\n }\r\n\r\n get chatUserSearchHint(): string {\r\n return this.l('ChatUserSearch_Hint');\r\n }\r\n\r\n get selectedUser(): ChatFriendDto {\r\n return this._selectedUser;\r\n }\r\n\r\n get isOpen(): boolean {\r\n return this._isOpen;\r\n }\r\n\r\n get pinned(): boolean {\r\n return this._pinned;\r\n }\r\n\r\n set isOpen(newValue: boolean) {\r\n if (newValue === this._isOpen) {\r\n return;\r\n }\r\n\r\n this._localStorageService.setItem('app.chat.isOpen', newValue);\r\n this._isOpen = newValue;\r\n\r\n if (newValue) {\r\n this.markAllUnreadMessagesOfUserAsRead(this.selectedUser);\r\n }\r\n }\r\n\r\n set pinned(newValue: boolean) {\r\n if (newValue === this._pinned) {\r\n return;\r\n }\r\n\r\n this._pinned = newValue;\r\n this._localStorageService.setItem('app.chat.pinned', newValue);\r\n }\r\n\r\n set selectedUser(newValue: ChatFriendDto) {\r\n if (newValue === this._selectedUser) {\r\n return;\r\n }\r\n\r\n this._selectedUser = newValue;\r\n\r\n //NOTE: this is a fix for localForage is not able to store user with messages array filled\r\n if (newValue.messages) {\r\n newValue.messages = [];\r\n newValue.messagesLoaded = false;\r\n }\r\n this._localStorageService.setItem('app.chat.selectedUser', newValue);\r\n }\r\n\r\n @HostListener('mouseleave') mouseleave() {\r\n if (!this.pinned && this.chatDrawer) {\r\n this.chatDrawer.hide();\r\n }\r\n }\r\n\r\n shareCurrentLink() {\r\n this.chatMessage = '[link]{\"message\":\"' + window.location.href + '\"}';\r\n this.sendMessage();\r\n }\r\n\r\n uploadImage(data: { files: File }): void {\r\n const formData: FormData = new FormData();\r\n const file = data.files[0];\r\n formData.append('file', file, file.name);\r\n\r\n this._httpClient\r\n .post(this.uploadUrl, formData)\r\n .pipe(finalize(() => this.chatImageUpload.clear()))\r\n .subscribe((response) => {\r\n this.chatMessage =\r\n '[image]{\"id\":\"' +\r\n response.result.id +\r\n '\", \"name\":\"' +\r\n response.result.name +\r\n '\", \"contentType\":\"' +\r\n response.result.contentType +\r\n '\"}';\r\n this.sendMessage();\r\n\r\n this.isFileSelected = false;\r\n this.progress = 0;\r\n });\r\n }\r\n\r\n uploadFile(data: { files: File }): void {\r\n const formData: FormData = new FormData();\r\n const file = data.files[0];\r\n formData.append('file', file, file.name);\r\n\r\n this._httpClient\r\n .post(this.uploadUrl, formData)\r\n .pipe(finalize(() => this.chatFileUpload.clear()))\r\n .subscribe((response) => {\r\n this.chatMessage =\r\n '[file]{\"id\":\"' +\r\n response.result.id +\r\n '\", \"name\":\"' +\r\n response.result.name +\r\n '\", \"contentType\":\"' +\r\n response.result.contentType +\r\n '\"}';\r\n this.sendMessage();\r\n\r\n this.isFileSelected = false;\r\n this.progress = 0;\r\n });\r\n }\r\n\r\n onBeforeSend(event): void {\r\n this.isFileSelected = true;\r\n event.xhr.upload.addEventListener(\r\n 'progress',\r\n (e: ProgressEvent) => {\r\n if (e.lengthComputable) {\r\n this.progress = Math.round((e.loaded * 100) / e.total);\r\n }\r\n\r\n this.onProgress.emit({ originalEvent: e, progress: this.progress });\r\n },\r\n false\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n this.init();\r\n }\r\n\r\n getShownUserName(tenanycName: string, userName: string): string {\r\n if (!this.isMultiTenancyEnabled) {\r\n return userName;\r\n }\r\n\r\n return (tenanycName ? tenanycName : '.') + '\\\\' + userName;\r\n }\r\n\r\n getProfilePicture(): void {\r\n this._profileService.getProfilePicture().subscribe((result) => {\r\n if (result && result.profilePicture) {\r\n this.profilePicture = 'data:image/jpeg;base64,' + result.profilePicture;\r\n }\r\n });\r\n }\r\n\r\n block(user: FriendDto): void {\r\n const blockUserInput = new BlockUserInput();\r\n blockUserInput.tenantId = user.friendTenantId;\r\n blockUserInput.userId = user.friendUserId;\r\n\r\n this._friendshipService.blockUser(blockUserInput).subscribe(() => {\r\n this.notify.info(this.l('UserBlocked'));\r\n });\r\n }\r\n\r\n unblock(user: FriendDto): void {\r\n const unblockUserInput = new UnblockUserInput();\r\n unblockUserInput.tenantId = user.friendTenantId;\r\n unblockUserInput.userId = user.friendUserId;\r\n\r\n this._friendshipService.unblockUser(unblockUserInput).subscribe(() => {\r\n this.notify.info(this.l('UserUnblocked'));\r\n });\r\n }\r\n\r\n removeFriendUI(user: FriendDto): void {\r\n this.friends = this.friends.filter((item) => {\r\n if (item.friendUserId === user.friendUserId && item.friendTenantId === user.friendTenantId) {\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n this.quickSideBarBackClick();\r\n }\r\n\r\n remove(user: FriendDto): void {\r\n this.message.confirm(this.l('AreYouSureToRemoveFromFriends'), null, (isConfirmed) => {\r\n if (isConfirmed) {\r\n this._friendshipService\r\n .removeFriend(user.friendUserId, user.friendTenantId ? user.friendTenantId : undefined)\r\n .subscribe(() => {\r\n this.removeFriendUI(user);\r\n this.notify.info(this.l('FriendRemoved'));\r\n });\r\n }\r\n });\r\n }\r\n\r\n markAllUnreadMessagesOfUserAsRead(user: ChatFriendDto): void {\r\n if (!user || !this.isOpen) {\r\n return;\r\n }\r\n\r\n const unreadMessages = _filter(user.messages, (m) => m.readState === ChatMessageReadState.Unread);\r\n const unreadMessageIds = _map(unreadMessages, 'id');\r\n\r\n if (!unreadMessageIds.length) {\r\n return;\r\n }\r\n\r\n const input = new MarkAllUnreadMessagesOfUserAsReadInput();\r\n input.tenantId = user.friendTenantId;\r\n input.userId = user.friendUserId;\r\n\r\n this._chatService.markAllUnreadMessagesOfUserAsRead(input).subscribe(() => {\r\n _forEach(user.messages, (message) => {\r\n if (unreadMessageIds.indexOf(message.id) >= 0) {\r\n message.readState = ChatMessageReadState.Read;\r\n }\r\n });\r\n });\r\n }\r\n\r\n loadPreviousMesssagesOfSelectedUser(): void {\r\n this._zone.run(() => {\r\n this.loadMessages(this.selectedUser, null);\r\n });\r\n }\r\n\r\n loadMessages(user: ChatFriendDto, callback: any): void {\r\n this.loadingPreviousUserMessages = true;\r\n\r\n let minMessageId;\r\n if (user.messages && user.messages.length) {\r\n minMessageId = _min(_map(user.messages, (m) => m.id));\r\n }\r\n\r\n this._chatService\r\n .getUserChatMessages(user.friendTenantId ? user.friendTenantId : undefined, user.friendUserId, minMessageId)\r\n .subscribe((result) => {\r\n if (!user.messages) {\r\n user.messages = [];\r\n }\r\n\r\n user.messages = result.items.concat(user.messages);\r\n\r\n this.markAllUnreadMessagesOfUserAsRead(user);\r\n\r\n if (!result.items.length) {\r\n user.allPreviousMessagesLoaded = true;\r\n }\r\n\r\n this.loadingPreviousUserMessages = false;\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n openSearchModal(userName: string, tenantId?: number): void {\r\n this.userLookupModal.filterText = userName;\r\n this.userLookupModal.show();\r\n }\r\n\r\n addFriendSelected(item: NameValueDto): void {\r\n const userId = item.value;\r\n const input = new CreateFriendshipRequestInput();\r\n input.userId = parseInt(userId);\r\n input.tenantId = this.appSession.tenant ? this.appSession.tenant.id : null;\r\n\r\n this._friendshipService.createFriendshipRequest(input).subscribe(() => {\r\n this.userNameFilter = '';\r\n });\r\n }\r\n\r\n search(): void {\r\n const input = new CreateFriendshipRequestByUserNameInput();\r\n\r\n if (this.userNameFilter.indexOf('\\\\') === -1) {\r\n input.userName = this.userNameFilter;\r\n } else {\r\n const tenancyAndUserNames = this.userNameFilter.split('\\\\');\r\n input.tenancyName = tenancyAndUserNames[0];\r\n input.userName = tenancyAndUserNames[1];\r\n }\r\n\r\n if (!input.tenancyName || !this.interTenantChatAllowed) {\r\n const tenantId = this.appSession.tenant ? this.appSession.tenant.id : null;\r\n this.openSearchModal(input.userName, tenantId);\r\n } else {\r\n this._friendshipService.createFriendshipRequestByUserName(input).subscribe(() => {\r\n this.userNameFilter = '';\r\n });\r\n }\r\n }\r\n\r\n getFriendOrNull(userId: number, tenantId?: number): ChatFriendDto {\r\n const friends = _filter(\r\n this.friends,\r\n (friend) => friend.friendUserId === userId && friend.friendTenantId === tenantId\r\n );\r\n if (friends.length) {\r\n return friends[0];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getFilteredFriends(state: FriendshipState, userNameFilter: string): FriendDto[] {\r\n const foundFriends = _filter(\r\n this.friends,\r\n (friend) =>\r\n friend.state === state &&\r\n this.getShownUserName(friend.friendTenancyName, friend.friendUserName)\r\n .toLocaleLowerCase()\r\n .indexOf(userNameFilter.toLocaleLowerCase()) >= 0\r\n );\r\n\r\n return foundFriends;\r\n }\r\n\r\n getFilteredFriendsCount(state: FriendshipState): number {\r\n return _filter(this.friends, (friend) => friend.state === state).length;\r\n }\r\n\r\n getUserNameByChatSide(chatSide: ChatSide): string {\r\n return chatSide === ChatSide.Sender ? this.currentUser.userName : this.selectedUser.friendUserName;\r\n }\r\n\r\n getFixedMessageTime(messageTime: DateTime): DateTime {\r\n if (typeof messageTime === 'string') {\r\n messageTime = this._dateTimeService.fromISODateString(messageTime);\r\n }\r\n\r\n return this._dateTimeService.plusSeconds(messageTime, -1 * this.serverClientTimeDifference);\r\n }\r\n\r\n getFriendsAndSettings(callback: any): void {\r\n this._chatService.getUserChatFriendsWithSettings().subscribe((result) => {\r\n this.friends = result.friends as ChatFriendDto[];\r\n this.serverClientTimeDifference = this._dateTimeService.getDiffInSeconds(\r\n this._dateTimeService.getDate(),\r\n result.serverTime\r\n );\r\n\r\n this.triggerUnreadMessageCountChangeEvent();\r\n callback();\r\n });\r\n }\r\n\r\n scrollToBottom(): void {\r\n setTimeout(() => {\r\n let height = ScrollComponent.getInstance(\r\n document.querySelector('#kt_drawer_chat_messenger_body')\r\n ).getHeight();\r\n let heightInt = parseInt(height.replace('px', ''));\r\n document.getElementById('kt_drawer_chat_messenger_body').scrollTop = heightInt;\r\n });\r\n }\r\n\r\n loadLastState(): void {\r\n const self = this;\r\n self._localStorageService.getItem('app.chat.isOpen', (err, isOpen) => {\r\n self.isOpen = isOpen;\r\n\r\n self._localStorageService.getItem('app.chat.pinned', (err, pinned) => {\r\n self.pinned = pinned;\r\n });\r\n\r\n if (isOpen) {\r\n this.chatDrawer.show();\r\n self._localStorageService.getItem('app.chat.selectedUser', (err, selectedUser) => {\r\n if (selectedUser && selectedUser.friendUserId) {\r\n self.selectFriend(selectedUser);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n selectFriend(friend: ChatFriendDto): void {\r\n const chatUser = this.getFriendOrNull(friend.friendUserId, friend.friendTenantId);\r\n this.selectedUser = chatUser;\r\n\r\n if (!chatUser) {\r\n return;\r\n }\r\n\r\n this.chatMessage = '';\r\n\r\n if (!chatUser.messagesLoaded) {\r\n this.loadMessages(chatUser, () => {\r\n chatUser.messagesLoaded = true;\r\n this.scrollToBottom();\r\n });\r\n } else {\r\n this.markAllUnreadMessagesOfUserAsRead(this.selectedUser);\r\n this.scrollToBottom();\r\n }\r\n\r\n window.dispatchEvent(new Event('resize'));\r\n }\r\n\r\n sendMessage(event?: any): void {\r\n if (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n if (!this.chatMessage) {\r\n return;\r\n }\r\n\r\n this.sendingMessage = true;\r\n const tenancyName = this.appSession.tenant ? this.appSession.tenant.tenancyName : null;\r\n this._chatSignalrService.sendMessage(\r\n {\r\n tenantId: this.selectedUser.friendTenantId,\r\n userId: this.selectedUser.friendUserId,\r\n message: this.chatMessage,\r\n tenancyName: tenancyName,\r\n userName: this.appSession.user.userName,\r\n profilePictureId: this.appSession.user.profilePictureId,\r\n },\r\n () => {\r\n this.chatMessage = '';\r\n this.sendingMessage = false;\r\n }\r\n );\r\n }\r\n\r\n reversePinned(): void {\r\n this.pinned = !this.pinned;\r\n }\r\n\r\n quickSideBarBackClick(): void {\r\n this.selectedUser = new ChatFriendDto();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.chatDrawer = new DrawerComponent(document.getElementById('kt_drawer_chat'), {\r\n overlay: true,\r\n baseClass: 'drawer',\r\n overlayClass: 'drawer-overlay',\r\n direction: 'end',\r\n });\r\n\r\n setTimeout(() => {\r\n this.chatDrawer.on('kt.drawer.after.hidden', (e: Event) => {\r\n this.isOpen = false;\r\n });\r\n }, 100);\r\n\r\n this.chatDrawer.on('kt.drawer.shown', (e: Event) => {\r\n this.isOpen = true;\r\n });\r\n\r\n this.userLookupModal.configure({\r\n title: this.l('SelectAUser'),\r\n dataSource: (skipCount: number, maxResultCount: number, filter: string, tenantId?: number, excludeCurrentUser?: boolean) => {\r\n const input = new FindUsersInput();\r\n input.filter = filter;\r\n input.maxResultCount = maxResultCount;\r\n input.skipCount = skipCount;\r\n input.tenantId = tenantId;\r\n input.excludeCurrentUser = excludeCurrentUser;\r\n return this._commonLookupService.findUsers(input);\r\n },\r\n });\r\n }\r\n\r\n triggerUnreadMessageCountChangeEvent(): void {\r\n let totalUnreadMessageCount = 0;\r\n\r\n if (this.friends) {\r\n totalUnreadMessageCount = _reduce(this.friends, (memo, friend) => memo + friend.unreadMessageCount, 0);\r\n }\r\n\r\n abp.event.trigger('app.chat.unreadMessageCountChanged', totalUnreadMessageCount);\r\n }\r\n\r\n registerEvents(): void {\r\n const self = this;\r\n\r\n function onMessageReceived(message) {\r\n const user = self.getFriendOrNull(message.targetUserId, message.targetTenantId);\r\n if (!user) {\r\n return;\r\n }\r\n\r\n user.messages = user.messages || [];\r\n user.messages.push(message);\r\n\r\n if (message.side === ChatSide.Receiver) {\r\n user.unreadMessageCount += 1;\r\n message.readState = ChatMessageReadState.Unread;\r\n self.triggerUnreadMessageCountChangeEvent();\r\n\r\n if (\r\n self.isOpen &&\r\n self.selectedUser !== null &&\r\n user.friendTenantId === self.selectedUser.friendTenantId &&\r\n user.friendUserId === self.selectedUser.friendUserId\r\n ) {\r\n self.markAllUnreadMessagesOfUserAsRead(user);\r\n } else {\r\n self.notify.info(\r\n abp.utils.formatString(\r\n '{0}: {1}',\r\n user.friendUserName,\r\n abp.utils.truncateString(message.message, 100)\r\n ),\r\n null,\r\n {\r\n onclick() {\r\n if (document.body.className.indexOf('offcanvas-on') < 0) {\r\n self.showChatPanel();\r\n self.isOpen = true;\r\n }\r\n\r\n self.selectFriend(user);\r\n self.pinned = true;\r\n },\r\n }\r\n );\r\n }\r\n }\r\n\r\n self.scrollToBottom();\r\n }\r\n\r\n this.subscribeToEvent('app.chat.messageReceived', (message) => {\r\n self._zone.run(() => {\r\n onMessageReceived(message);\r\n });\r\n });\r\n\r\n function onFriendshipRequestReceived(data, isOwnRequest) {\r\n if (!isOwnRequest) {\r\n abp.notify.info(self.l('UserSendYouAFriendshipRequest', data.friendUserName));\r\n }\r\n\r\n if (\r\n !_filter(\r\n self.friends,\r\n (f) => f.friendUserId === data.friendUserId && f.friendTenantId === data.friendTenantId\r\n ).length\r\n ) {\r\n self.friends.push(data);\r\n }\r\n }\r\n\r\n this.subscribeToEvent('app.chat.friendshipRequestReceived', (data, isOwnRequest) => {\r\n self._zone.run(() => {\r\n onFriendshipRequestReceived(data, isOwnRequest);\r\n });\r\n });\r\n\r\n function onUserConnectionStateChanged(data) {\r\n const user = self.getFriendOrNull(data.friend.userId, data.friend.tenantId);\r\n if (!user) {\r\n return;\r\n }\r\n\r\n user.isOnline = data.isConnected;\r\n }\r\n\r\n this.subscribeToEvent('app.chat.userConnectionStateChanged', (data) => {\r\n self._zone.run(() => {\r\n onUserConnectionStateChanged(data);\r\n });\r\n });\r\n\r\n function onUserStateChanged(data) {\r\n const user = self.getFriendOrNull(data.friend.userId, data.friend.tenantId);\r\n if (!user) {\r\n return;\r\n }\r\n\r\n user.state = data.state;\r\n }\r\n\r\n this.subscribeToEvent('app.chat.userStateChanged', (data) => {\r\n self._zone.run(() => {\r\n onUserStateChanged(data);\r\n });\r\n });\r\n\r\n function onAllUnreadMessagesOfUserRead(data) {\r\n const user = self.getFriendOrNull(data.friend.userId, data.friend.tenantId);\r\n if (!user) {\r\n return;\r\n }\r\n\r\n user.unreadMessageCount = 0;\r\n self.triggerUnreadMessageCountChangeEvent();\r\n }\r\n\r\n this.subscribeToEvent('app.chat.allUnreadMessagesOfUserRead', (data) => {\r\n self._zone.run(() => {\r\n onAllUnreadMessagesOfUserRead(data);\r\n });\r\n });\r\n\r\n function onReadStateChange(data) {\r\n const user = self.getFriendOrNull(data.friend.userId, data.friend.tenantId);\r\n if (!user) {\r\n return;\r\n }\r\n\r\n _forEach(user.messages, (message) => {\r\n message.receiverReadState = ChatMessageReadState.Read;\r\n });\r\n }\r\n\r\n this.subscribeToEvent('app.chat.readStateChange', (data) => {\r\n self._zone.run(() => {\r\n onReadStateChange(data);\r\n });\r\n });\r\n\r\n function onConnected() {\r\n self.getFriendsAndSettings(() => {\r\n DomHelper.waitUntilElementIsReady('#kt_drawer_chat', () => {\r\n self.loadLastState();\r\n });\r\n });\r\n }\r\n\r\n this.subscribeToEvent('app.chat.connected', () => {\r\n self._zone.run(() => {\r\n onConnected();\r\n });\r\n });\r\n }\r\n\r\n getReadStateHtml(message: ChatMessageDto): string {\r\n let readStateClass = message.receiverReadState === ChatMessageReadState.Read ? ' text-primary' : ' text-muted';\r\n return message.side === ChatSide.Sender\r\n ? ''\r\n : '';\r\n }\r\n\r\n showChatPanel(): void {\r\n document.body.setAttribute('data-kt-drawer-chat', 'on');\r\n document.body.setAttribute('data-kt-drawer', 'on');\r\n document.getElementById('kt_drawer_chat').className += ' drawer-on';\r\n }\r\n\r\n init(): void {\r\n this.registerEvents();\r\n this.getProfilePicture();\r\n\r\n this.tenantToTenantChatAllowed = this.feature.isEnabled('App.ChatFeature.TenantToTenant');\r\n this.tenantToHostChatAllowed = this.feature.isEnabled('App.ChatFeature.TenantToHost');\r\n this.interTenantChatAllowed =\r\n this.feature.isEnabled('App.ChatFeature.TenantToTenant') ||\r\n this.feature.isEnabled('App.ChatFeature.TenantToHost') ||\r\n !this.appSession.tenant;\r\n }\r\n}\r\n","import arrayReduce from './_arrayReduce.js';\nimport baseEach from './_baseEach.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseReduce from './_baseReduce.js';\nimport isArray from './isArray.js';\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nexport default reduce;\n","\r\n\r\n
\r\n
\r\n

\r\n {{ 'SelectATheme' | localize }}\r\n

\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n\r\n","import { Component, Injector, ViewEncapsulation, ElementRef, HostBinding, OnInit } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { UiCustomizationSettingsServiceProxy } from '@shared/service-proxies/service-proxies';\r\n\r\n@Component({\r\n templateUrl: './theme-selection-panel.component.html',\r\n selector: 'theme-selection-panel',\r\n styleUrls: ['./theme-selection-panel.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ThemeSelectionPanelComponent extends AppComponentBase implements OnInit {\r\n currentThemeName = '';\r\n\r\n constructor(injector: Injector, private _uiCustomizationService: UiCustomizationSettingsServiceProxy) {\r\n super(injector);\r\n }\r\n\r\n ngOnInit() {\r\n this.currentThemeName = this.currentTheme.baseSettings.theme;\r\n }\r\n\r\n getLocalizedThemeName(str: string): string {\r\n return this.l('Theme_' + abp.utils.toPascalCase(str));\r\n }\r\n\r\n changeTheme(themeName: string) {\r\n this._uiCustomizationService.changeThemeWithDefaultValues(themeName).subscribe(() => {\r\n window.location.reload();\r\n });\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{ 'NotificationSettings' | localize }}\r\n
\r\n \r\n
\r\n
\r\n

{{ 'ReceiveNotifications' | localize }}

\r\n \r\n

{{ 'NotificationTypes' | localize }}

\r\n

\r\n {{ 'ReceiveNotifications_DisableInfo' | localize }}\r\n

\r\n \r\n
\r\n
\r\n \r\n {{ 'Cancel' | localize }}\r\n \r\n \r\n \r\n {{ 'Save' | localize }}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n","import { Component, Injector, ViewChild } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport {\r\n GetNotificationSettingsOutput,\r\n NotificationServiceProxy,\r\n NotificationSubscriptionDto,\r\n UpdateNotificationSettingsInput,\r\n} from '@shared/service-proxies/service-proxies';\r\nimport { map as _map } from 'lodash-es';\r\nimport { ModalDirective } from 'ngx-bootstrap/modal';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'notificationSettingsModal',\r\n templateUrl: './notification-settings-modal.component.html',\r\n})\r\nexport class NotificationSettingsModalComponent extends AppComponentBase {\r\n @ViewChild('modal', { static: true }) modal: ModalDirective;\r\n\r\n saving = false;\r\n\r\n settings: GetNotificationSettingsOutput;\r\n\r\n constructor(injector: Injector, private _notificationService: NotificationServiceProxy) {\r\n super(injector);\r\n }\r\n\r\n show() {\r\n this.getSettings(() => {\r\n this.modal.show();\r\n });\r\n }\r\n\r\n save(): void {\r\n const input = new UpdateNotificationSettingsInput();\r\n input.receiveNotifications = this.settings.receiveNotifications;\r\n input.notifications = _map(this.settings.notifications, (n) => {\r\n let subscription = new NotificationSubscriptionDto();\r\n subscription.name = n.name;\r\n subscription.isSubscribed = n.isSubscribed;\r\n return subscription;\r\n });\r\n\r\n this.saving = true;\r\n this._notificationService\r\n .updateNotificationSettings(input)\r\n .pipe(finalize(() => (this.saving = false)))\r\n .subscribe(() => {\r\n this.notify.info(this.l('SavedSuccessfully'));\r\n this.close();\r\n });\r\n }\r\n\r\n close(): void {\r\n this.modal.hide();\r\n }\r\n\r\n private getSettings(callback: () => void) {\r\n this._notificationService.getNotificationSettings().subscribe((result: GetNotificationSettingsOutput) => {\r\n this.settings = result;\r\n callback();\r\n });\r\n }\r\n}\r\n","import { Component, Injector, ViewChild, OnDestroy } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { ModalDirective } from 'ngx-bootstrap/modal';\r\nimport { timer, Subscription } from 'rxjs';\r\nimport { AppAuthService } from '../auth/app-auth.service';\r\nimport { SessionServiceProxy } from '@shared/service-proxies/service-proxies';\r\nimport { UrlHelper } from '@shared/helpers/UrlHelper';\r\n\r\n@Component({\r\n selector: 'session-timeout-modal',\r\n templateUrl: './session-timeout-modal.component.html',\r\n})\r\nexport class SessionTimeoutModalComponent extends AppComponentBase implements OnDestroy {\r\n @ViewChild('modal', { static: true }) modal: ModalDirective;\r\n\r\n timeOutSecond = parseInt(this.s('App.UserManagement.SessionTimeOut.ShowTimeOutNotificationSecond')); // show inactivity modal when TimeOutSecond passed\r\n currentSecond: number;\r\n progresbarWidth = '100%';\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n injector: Injector,\r\n private _appAuthService: AppAuthService,\r\n private _sessionService: SessionServiceProxy\r\n ) {\r\n super(injector);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n\r\n start(): void {\r\n this.currentSecond = this.timeOutSecond;\r\n this.subscription = timer(0, 1000).subscribe(() => {\r\n this.changeNotifyContent();\r\n });\r\n this.modal.show();\r\n }\r\n\r\n stop(): void {\r\n this.currentSecond = this.timeOutSecond;\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n this.modal.hide();\r\n }\r\n\r\n private done(): void {\r\n this.stop();\r\n\r\n let isSessionLockScreenEnabled = abp.setting.getBoolean(\r\n 'App.UserManagement.SessionTimeOut.ShowLockScreenWhenTimedOut'\r\n );\r\n if (isSessionLockScreenEnabled) {\r\n this.redirectToLockScreen();\r\n } else {\r\n this._appAuthService.logout(true);\r\n }\r\n }\r\n\r\n private changeNotifyContent(): void {\r\n this.currentSecond--;\r\n if (this.currentSecond <= 0) {\r\n this.progresbarWidth = '0%';\r\n this.done();\r\n } else {\r\n this.progresbarWidth = (this.currentSecond / this.timeOutSecond) * 100 + '%';\r\n }\r\n }\r\n\r\n private redirectToLockScreen(): void {\r\n this._sessionService.getCurrentLoginInformations().subscribe(\r\n (info) => {\r\n if (info) {\r\n abp.utils.setCookieValue(\r\n 'userInfo',\r\n JSON.stringify({\r\n userName: info.user.userName,\r\n profilePictureId: info.user.profilePictureId,\r\n tenant: info.tenant ? info.tenant.tenancyName : 'Host',\r\n }),\r\n null,\r\n abp.appPath\r\n );\r\n\r\n const path = window.location.pathname;\r\n const returnUrl = encodeURI(path);\r\n\r\n this._appAuthService.logout(true, '/account/session-locked?returnUrl=' + returnUrl);\r\n } else {\r\n this._appAuthService.logout(true);\r\n }\r\n },\r\n () => {\r\n this._appAuthService.logout(true);\r\n }\r\n );\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n
\r\n {{ 'YourSessionIsAboutToExpire' | localize }}\r\n
\r\n \r\n
\r\n
\r\n

{{ l('SessionExpireRedirectingInXSecond', currentSecond) }}

\r\n
\r\n \r\n {{ currentSecond }}\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n","import { Component, Injector, ViewChild, AfterViewInit, OnDestroy } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { SessionTimeoutModalComponent } from './session-timeout-modal-component';\r\nimport { timer, fromEvent, Subject, Subscription } from 'rxjs';\r\nimport { takeUntil, debounceTime } from 'rxjs/operators';\r\nimport { LocalStorageService } from '@shared/utils/local-storage.service';\r\n\r\n@Component({\r\n selector: 'session-timeout',\r\n template: '',\r\n})\r\nexport class SessionTimeoutComponent extends AppComponentBase implements AfterViewInit, OnDestroy {\r\n @ViewChild(SessionTimeoutModalComponent)\r\n private sessionTimeOutModal: SessionTimeoutModalComponent;\r\n\r\n destroy$ = new Subject();\r\n\r\n private timeOutSecond = parseInt(this.s('App.UserManagement.SessionTimeOut.TimeOutSecond')); // show inactivity modal when TimeOutSecond passed\r\n private lastActivityTimeStorageKey = 'Abp.SessionTimeOut.UserLastActivityTime';\r\n\r\n private IsUserActive = true;\r\n private notifierIsOpened = false;\r\n private subscriptions: Subscription[] = [];\r\n\r\n constructor(injector: Injector, private _localStorageService: LocalStorageService) {\r\n super(injector);\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.bindActions();\r\n this.writeToStorage(); // initialize store\r\n this.subscriptions.push(\r\n timer(1000, 1000).subscribe(() => {\r\n this.control();\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.subscriptions.forEach((subscription) => subscription.unsubscribe());\r\n }\r\n\r\n private bindActions(): void {\r\n this.subscriptions.push(\r\n fromEvent(window, 'mousemove')\r\n .pipe(takeUntil(this.destroy$), debounceTime(350))\r\n .subscribe(() => {\r\n this.setUserActivity();\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n fromEvent(window, 'mousedown')\r\n .pipe(takeUntil(this.destroy$), debounceTime(350))\r\n .subscribe(() => {\r\n this.setUserActivity();\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n fromEvent(window, 'click')\r\n .pipe(takeUntil(this.destroy$), debounceTime(350))\r\n .subscribe(() => {\r\n this.setUserActivity();\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n fromEvent(window, 'scroll')\r\n .pipe(takeUntil(this.destroy$), debounceTime(350))\r\n .subscribe(() => {\r\n this.setUserActivity();\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n fromEvent(window, 'keypress')\r\n .pipe(takeUntil(this.destroy$), debounceTime(350))\r\n .subscribe(() => {\r\n this.setUserActivity();\r\n })\r\n );\r\n }\r\n\r\n private setUserActivity(): void {\r\n this.IsUserActive = true;\r\n }\r\n\r\n private control(): void {\r\n this.writeToStorage();\r\n this.controlStorage();\r\n }\r\n\r\n private writeToStorage(): void {\r\n if (this.IsUserActive) {\r\n if (localStorage) {\r\n this._localStorageService.setItem(this.lastActivityTimeStorageKey, Date.now().toString());\r\n } else {\r\n abp.utils.setCookieValue(this.lastActivityTimeStorageKey, Date.now().toString());\r\n }\r\n }\r\n this.IsUserActive = false;\r\n }\r\n\r\n private controlStorage(): void {\r\n if (localStorage) {\r\n this._localStorageService.getItem(this.lastActivityTimeStorageKey, (err, data) => {\r\n if (data) {\r\n let lastActivityTime = parseInt(data);\r\n this.controlValue(lastActivityTime);\r\n }\r\n });\r\n } else {\r\n let lastActivityTime = parseInt(abp.utils.getCookieValue(this.lastActivityTimeStorageKey));\r\n this.controlValue(lastActivityTime);\r\n }\r\n }\r\n private controlValue(lastActivityTime) {\r\n if (Date.now() - lastActivityTime <= this.timeOutSecond * 1000) {\r\n if (this.notifierIsOpened) {\r\n this.sessionTimeOutModal.stop();\r\n this.notifierIsOpened = false;\r\n }\r\n return;\r\n }\r\n\r\n if (!this.notifierIsOpened) {\r\n this.sessionTimeOutModal.start();\r\n this.notifierIsOpened = true;\r\n }\r\n }\r\n}\r\n","
\r\n \r\n \r\n \r\n
\r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n","import { Component, Injector, OnInit, ViewChild } from '@angular/core';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { UrlHelper } from '@shared/helpers/UrlHelper';\r\nimport { SubscriptionStartType } from '@shared/service-proxies/service-proxies';\r\nimport { ChatSignalrService } from 'app/shared/layout/chat/chat-signalr.service';\r\nimport { AppComponentBase } from 'shared/common/app-component-base';\r\nimport { SignalRHelper } from 'shared/helpers/SignalRHelper';\r\nimport { LinkedAccountsModalComponent } from '@app/shared/layout/linked-accounts-modal.component';\r\nimport { UserDelegationsModalComponent } from '@app/shared/layout/user-delegations-modal.component';\r\nimport { ChangePasswordModalComponent } from '@app/shared/layout/profile/change-password-modal.component';\r\nimport { ChangeProfilePictureModalComponent } from '@app/shared/layout/profile/change-profile-picture-modal.component';\r\nimport { MySettingsModalComponent } from '@app/shared/layout/profile/my-settings-modal.component';\r\nimport { NotificationSettingsModalComponent } from '@app/shared/layout/notifications/notification-settings-modal.component';\r\nimport { UserNotificationHelper } from '@app/shared/layout/notifications/UserNotificationHelper';\r\nimport { DateTimeService } from './shared/common/timing/date-time.service';\r\n\r\nimport {\r\n ToggleComponent,\r\n ScrollTopComponent,\r\n DrawerComponent,\r\n StickyComponent,\r\n MenuComponent,\r\n ScrollComponent,\r\n} from '@metronic/app/kt/components';\r\nimport { Router } from '@angular/router';\r\nimport { RouteService } from './router-service';\r\nimport { SessionService } from './session-service';\r\n\r\n@Component({\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.less'],\r\n})\r\nexport class AppComponent extends AppComponentBase implements OnInit {\r\n @ViewChild('linkedAccountsModal') linkedAccountsModal: LinkedAccountsModalComponent;\r\n @ViewChild('userDelegationsModal', { static: true }) userDelegationsModal: UserDelegationsModalComponent;\r\n @ViewChild('changePasswordModal', { static: true }) changePasswordModal: ChangePasswordModalComponent;\r\n @ViewChild('changeProfilePictureModal', { static: true })\r\n changeProfilePictureModal: ChangeProfilePictureModalComponent;\r\n @ViewChild('mySettingsModal', { static: true }) mySettingsModal: MySettingsModalComponent;\r\n @ViewChild('notificationSettingsModal', { static: true })\r\n notificationSettingsModal: NotificationSettingsModalComponent;\r\n @ViewChild('chatBarComponent') chatBarComponent;\r\n\r\n subscriptionStartType = SubscriptionStartType;\r\n theme: string;\r\n installationMode = true;\r\n isQuickThemeSelectEnabled: boolean = this.setting.getBoolean('App.UserManagement.IsQuickThemeSelectEnabled');\r\n IsSessionTimeOutEnabled: boolean =\r\n this.setting.getBoolean('App.UserManagement.SessionTimeOut.IsEnabled') && this.appSession.userId != null;\r\n loggedInEasily: boolean =this.appSession.user?.easilyLoggedIn\r\n loggedIn: boolean =abp.session.userId > 0;\r\n backgroundImageName =this.appSession.theme.baseSettings.layout.darkMode ? 'login-dark' : 'login';\r\n \r\n flag: boolean=true;\r\n public constructor(\r\n injector: Injector,\r\n private _chatSignalrService: ChatSignalrService,\r\n private _userNotificationHelper: UserNotificationHelper,\r\n private _dateTimeService: DateTimeService,\r\n private _scrollService: RouteService,\r\n private _router: Router,\r\n private _sessionService: SessionService,\r\n ) {\r\n super(injector);\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this.SessionCheck();\r\n this._scrollService;\r\n this._userNotificationHelper.settingsModal = this.notificationSettingsModal;\r\n this.theme = abp.setting.get('App.UiManagement.Theme').toLocaleLowerCase();\r\n this.installationMode = UrlHelper.isInstallUrl(location.href);\r\n\r\n if (this._router.url=='/app/home' && this.appSession.user?.userName=='admin' && this.flag) {\r\n this._router.navigate(['app/main/dashboard']);\r\n this.flag=false;\r\n }\r\n this.registerModalOpenEvents();\r\n\r\n if (this.appSession.application) {\r\n SignalRHelper.initSignalR(() => {\r\n this._chatSignalrService.init();\r\n });\r\n }\r\n\r\n this.pluginsInitialization();\r\n \r\n abp.localization.defaultSourceName = 'WordPlay';\r\n }\r\n\r\n SessionCheck():void{\r\n setInterval(() => {\r\n var prevToken=this._sessionService.getData();\r\n\r\n setTimeout(() => { \r\n if (this._sessionService.getData()!==prevToken) {\r\n this.reload();\r\n }\r\n }, 700);\r\n \r\n }, 800);\r\n }\r\n\r\n pluginsInitialized(): boolean {\r\n let menuItems = document.querySelectorAll('[data-kt-menu=\"true\"]');\r\n for (let i = 0; i < menuItems.length; i++) {\r\n let el = menuItems[i];\r\n const menuItem = el as HTMLElement;\r\n let menuInstance = MenuComponent.getInstance(menuItem);\r\n if (menuInstance) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n pluginsInitialization() {\r\n setTimeout(() => {\r\n if (this.pluginsInitialized()) {\r\n return;\r\n }\r\n\r\n ToggleComponent.bootstrap();\r\n ScrollTopComponent.bootstrap();\r\n DrawerComponent.bootstrap();\r\n StickyComponent.bootstrap();\r\n MenuComponent.bootstrap();\r\n ScrollComponent.bootstrap();\r\n }, 200);\r\n }\r\n\r\n subscriptionStatusBarVisible(): boolean {\r\n return (\r\n this.appSession.tenantId > 0 &&\r\n (this.appSession.tenant.isInTrialPeriod || this.subscriptionIsExpiringSoon())\r\n );\r\n }\r\n\r\n subscriptionIsExpiringSoon(): boolean {\r\n if (this.appSession.tenant?.subscriptionEndDateUtc) {\r\n let today = this._dateTimeService.getUTCDate();\r\n let daysFromNow = this._dateTimeService.plusDays(today, AppConsts.subscriptionExpireNootifyDayCount);\r\n return daysFromNow >= this.appSession.tenant.subscriptionEndDateUtc;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n registerModalOpenEvents(): void {\r\n this.subscribeToEvent('app.show.linkedAccountsModal', () => {\r\n this.linkedAccountsModal.show();\r\n });\r\n\r\n this.subscribeToEvent('app.show.userDelegationsModal', () => {\r\n this.userDelegationsModal.show();\r\n });\r\n\r\n this.subscribeToEvent('app.show.changePasswordModal', () => {\r\n this.changePasswordModal.show();\r\n });\r\n\r\n this.subscribeToEvent('app.show.changeProfilePictureModal', () => {\r\n this.changeProfilePictureModal.show();\r\n });\r\n\r\n this.subscribeToEvent('app.show.mySettingsModal', () => {\r\n this.mySettingsModal.show();\r\n });\r\n }\r\n\r\n getRecentlyLinkedUsers(): void {\r\n abp.event.trigger('app.getRecentlyLinkedUsers');\r\n }\r\n\r\n onMySettingsModalSaved(): void {\r\n abp.event.trigger('app.onMySettingsModalSaved');\r\n }\r\n reload(): void {\r\n location.reload();\r\n }\r\n}\r\n","import { AppConsts } from '@shared/AppConsts';\r\nimport { LocalStorageService } from '@shared/utils/local-storage.service';\r\n\r\nexport class SignalRHelper {\r\n static initSignalR(callback: () => void): void {\r\n new LocalStorageService().getItem(AppConsts.authorization.encrptedAuthTokenName, function (err, value) {\r\n let encryptedAuthToken = value?.token;\r\n\r\n abp.signalr = {\r\n autoConnect: false, // _zone.runOutsideAngular in ChatSignalrService\r\n // autoReconnect: true,\r\n connect: undefined,\r\n hubs: undefined,\r\n qs: encryptedAuthToken\r\n ? AppConsts.authorization.encrptedAuthTokenName + '=' + encodeURIComponent(encryptedAuthToken)\r\n : '',\r\n remoteServiceBaseUrl: AppConsts.remoteServiceBaseUrl,\r\n startConnection: undefined,\r\n url: '/signalr',\r\n };\r\n\r\n let script = document.createElement('script');\r\n script.onload = () => {\r\n callback();\r\n };\r\n\r\n script.src = AppConsts.appBaseUrl + '/assets/abp/abp.signalr-client.js';\r\n document.head.appendChild(script);\r\n });\r\n }\r\n}\r\n","import { Component, Injector, Input, ViewEncapsulation } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\n\r\n@Component({\r\n templateUrl: './site-footer.component.html',\r\n styleUrls: ['./site-footer.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'site-footer',\r\n})\r\nexport class SiteFooterComponent extends AppComponentBase {\r\n\r\n @Input() color: string=\"#6C8DF9\";\r\n currentYear: number;\r\n isInAboutPage:boolean=false;\r\n isInContactPage:boolean=false;\r\n isInSupportPage:boolean=false;\r\n\r\n constructor(\r\n injector: Injector,\r\n private router: Router\r\n ) {\r\n super(injector);\r\n }\r\n \r\n ngOnInit(): void {\r\n this.currentPageCheck();\r\n this.getCurrentYear();\r\n }\r\n \r\n currentPageCheck(){\r\n if (this.router.url.includes(\"about\")) {\r\n this.isInAboutPage=true;\r\n }\r\n if (this.router.url.includes(\"contact\")) {\r\n this.isInContactPage=true;\r\n }\r\n if (this.router.url.includes(\"support\")) {\r\n this.isInSupportPage=true;\r\n }\r\n }\r\n \r\n getCurrentYear(){\r\n this.currentYear=(new Date()).getFullYear();\r\n }\r\n}\r\n","","import { Component, Injector, Input, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\n\r\n@Component({\r\n templateUrl: './moving-text.component.html',\r\n styleUrls: ['./moving-text.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'moving-text',\r\n\r\n})\r\nexport class MovingTextComponent extends AppComponentBase {\r\n\r\n @Input() heading = \"\";\r\n dataText = [\r\n \"Come and play with us\",\r\n \"Eja të lozësh me ne\",\r\n \"Zagraj z nami!\",\r\n \"Ven y juega con nosotros\",\r\n \"Venez et jouez avec nous\",\r\n \"მოდი და ითამაშეთ ჩვენთან ერთად\",\r\n \"来和我们一起玩\",\r\n \"是非、私たちと遊んでください\",\r\n \"Hãy đến và chơi với chúng tôi\",\r\n ];\r\n textSpeed: number = 30;\r\n deletingSpeed: number = 30;\r\n text?= \"\";\r\n fullText?= \"\";\r\n loopNum = 0;\r\n typingSpeed = 150;\r\n i: number = 0;\r\n index: number = 0;\r\n movingFunction = null;\r\n\r\n constructor(\r\n injector: Injector\r\n ) {\r\n super(injector);\r\n }\r\n\r\n ngOnInit(): void {\r\n setTimeout(() => {\r\n this.handleType();\r\n }, 800);\r\n }\r\n\r\n handleType(): void {\r\n this.i = this.loopNum % this.dataText.length;\r\n this.fullText = this.dataText[this.i];\r\n this.movingFunction = setInterval(() => {\r\n this.text = this.fullText.substring(0, this.text.length + 1);\r\n if (this.text === this.fullText) {\r\n setTimeout(() => {\r\n clearInterval(this.movingFunction);\r\n this.movingFunction = setInterval(() => {\r\n this.text = this.fullText.substring(0, this.text.length - 1);\r\n if (this.text === \"\") {\r\n clearInterval(this.movingFunction);\r\n this.loopNum++;\r\n this.handleType();\r\n }\r\n }, 50);\r\n }, 300);\r\n }\r\n }, 50);\r\n }\r\n}\r\n\r\n\r\n\r\n","
\r\n {{text}}\r\n
\r\n\r\n\r\n","
\r\n
\r\n
\r\n

{{ 'Hello'}}

\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\n\r\n@Component({\r\n templateUrl: './home-header.component.html',\r\n styleUrls: ['./home-header.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'home-header',\r\n})\r\nexport class HomeHeaderComponent extends AppComponentBase {\r\n\r\n isUserGuest:boolean=true;\r\n dataText: string[] = [\r\n 'Come and play with us',\r\n 'Eja të lozësh me ne',\r\n 'Zagraj z nami!',\r\n 'Ven y juega con nosotros',\r\n 'Venez et jouez avec nous',\r\n 'მოდი და ითამაშეთ ჩვენთან ერთად',\r\n '来和我们一起玩',\r\n '是非、私たちと遊んでください',\r\n 'Hãy đến và chơi với chúng tôi',\r\n ];\r\n\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n this.isUserGuest = !(abp.session.userId > 0);\r\n }\r\n}\r\n","import { Component, Injector, Renderer2, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\n\r\n\r\n@Component({\r\n templateUrl: './home.component.html?v=${new Date().getTime()}',\r\n styleUrls: ['./home.component.less?v=${new Date().getTime()}'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'home-page',\r\n})\r\nexport class HomeComponent extends AppComponentBase {\r\n\r\n windowWidth=window.innerWidth;\r\n ourShowImageDesktop:string='/assets/common/images/home/ourShow_desktop.png';\r\n ourShowImageMobile = '/assets/common/images/home/ourShow_mobile.png';\r\n ourShowImage:string;\r\n\r\n\r\n constructor(\r\n injector: Injector) {\r\n super(injector);\r\n\r\n if (this.windowWidth<600) {\r\n this.ourShowImage=this.ourShowImageMobile;\r\n }\r\n else{\r\n this.ourShowImage=this.ourShowImageDesktop; \r\n }\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

{{ 'ALittleBitMoreAboutUs' | localize }}\r\n

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n","
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {{ 'Actions' | localize }}\r\n \r\n {{ 'Severity' | localize }}\r\n \r\n {{ 'Notification' | localize }}\r\n \r\n \r\n {{ 'CreationTime' | localize }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ 'Notification' | localize }}\r\n \r\n {{ truncateString(record.formattedNotification.text, 120) }}\r\n \r\n \r\n {{ truncateString(record.formattedNotification.text, 120) }}\r\n \r\n \r\n \r\n \r\n {{ fromNow(record.notification.creationTime) }}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{ 'NoData' | localize }}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import { Component, Injector, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport {\r\n NotificationServiceProxy,\r\n UserNotification,\r\n UserNotificationState,\r\n} from '@shared/service-proxies/service-proxies';\r\nimport { DateTime } from 'luxon';\r\nimport { LazyLoadEvent } from 'primeng/api';\r\nimport { Paginator } from 'primeng/paginator';\r\nimport { Table } from 'primeng/table';\r\nimport { IFormattedUserNotification, UserNotificationHelper } from './UserNotificationHelper';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\n\r\n@Component({\r\n templateUrl: './notifications.component.html',\r\n styleUrls: ['./notifications.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n})\r\nexport class NotificationsComponent extends AppComponentBase {\r\n @ViewChild('dataTable', { static: true }) dataTable: Table;\r\n @ViewChild('paginator', { static: true }) paginator: Paginator;\r\n\r\n readStateFilter = 'ALL';\r\n dateRange: DateTime[] = [this._dateTimeService.getStartOfDay(), this._dateTimeService.getEndOfDay()];\r\n loading = false;\r\n\r\n constructor(\r\n injector: Injector,\r\n private _notificationService: NotificationServiceProxy,\r\n private _userNotificationHelper: UserNotificationHelper,\r\n private _dateTimeService: DateTimeService\r\n ) {\r\n super(injector);\r\n }\r\n\r\n reloadPage(): void {\r\n this.paginator.changePage(this.paginator.getPage());\r\n }\r\n\r\n setAsRead(record: any): void {\r\n this.setNotificationAsRead(record, () => {\r\n this.reloadPage();\r\n });\r\n }\r\n\r\n isRead(record: any): boolean {\r\n return record.formattedNotification.state === 'READ';\r\n }\r\n\r\n fromNow(date: DateTime): string {\r\n return this._dateTimeService.fromNow(date);\r\n }\r\n\r\n formatRecord(record: any): IFormattedUserNotification {\r\n return this._userNotificationHelper.format(record, false);\r\n }\r\n\r\n formatNotification(record: any): string {\r\n const formattedRecord = this.formatRecord(record);\r\n return abp.utils.truncateStringWithPostfix(formattedRecord.text, 120);\r\n }\r\n\r\n formatNotifications(records: any[]): any[] {\r\n const formattedRecords = [];\r\n for (const record of records) {\r\n record.formattedNotification = this.formatRecord(record);\r\n formattedRecords.push(record);\r\n }\r\n return formattedRecords;\r\n }\r\n\r\n truncateString(text: any, length: number): string {\r\n return abp.utils.truncateStringWithPostfix(text, length);\r\n }\r\n\r\n getNotifications(event?: LazyLoadEvent): void {\r\n if (this.primengTableHelper.shouldResetPaging(event)) {\r\n this.paginator.changePage(0);\r\n\r\n if (this.primengTableHelper.records && this.primengTableHelper.records.length > 0) {\r\n return;\r\n }\r\n }\r\n\r\n this.primengTableHelper.showLoadingIndicator();\r\n\r\n this._notificationService\r\n .getUserNotifications(\r\n this.readStateFilter === 'ALL' ? undefined : UserNotificationState.Unread,\r\n this._dateTimeService.getStartOfDayForDate(this.dateRange[0]),\r\n this._dateTimeService.getEndOfDayForDate(this.dateRange[1]),\r\n this.primengTableHelper.getMaxResultCount(this.paginator, event),\r\n this.primengTableHelper.getSkipCount(this.paginator, event)\r\n )\r\n .pipe(finalize(() => this.primengTableHelper.hideLoadingIndicator()))\r\n .subscribe((result) => {\r\n this.primengTableHelper.totalRecordsCount = result.totalCount;\r\n this.primengTableHelper.records = this.formatNotifications(result.items);\r\n this.primengTableHelper.hideLoadingIndicator();\r\n });\r\n }\r\n\r\n setAllNotificationsAsRead(): void {\r\n this._userNotificationHelper.setAllAsRead(() => {\r\n this.getNotifications();\r\n });\r\n }\r\n\r\n openNotificationSettingsModal(): void {\r\n this._userNotificationHelper.openSettingsModal();\r\n }\r\n\r\n setNotificationAsRead(userNotification: UserNotification, callback: () => void): void {\r\n this._userNotificationHelper.setAsRead(userNotification.id, () => {\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n deleteNotification(userNotification: UserNotification): void {\r\n this.message.confirm(this.l('NotificationDeleteWarningMessage'), this.l('AreYouSure'), (isConfirmed) => {\r\n if (isConfirmed) {\r\n this._notificationService.deleteNotification(userNotification.id).subscribe(() => {\r\n this.reloadPage();\r\n this.notify.success(this.l('SuccessfullyDeleted'));\r\n });\r\n }\r\n });\r\n }\r\n\r\n deleteNotifications() {\r\n this.message.confirm(this.l('DeleteListedNotificationsWarningMessage'), this.l('AreYouSure'), (isConfirmed) => {\r\n if (isConfirmed) {\r\n this._notificationService\r\n .deleteAllUserNotifications(\r\n this.readStateFilter === 'ALL' ? undefined : UserNotificationState.Unread,\r\n this._dateTimeService.getStartOfDayForDate(this.dateRange[0]),\r\n this._dateTimeService.getEndOfDayForDate(this.dateRange[1]).endOf('day')\r\n )\r\n .subscribe(() => {\r\n this.reloadPage();\r\n this.notify.success(this.l('SuccessfullyDeleted'));\r\n });\r\n }\r\n });\r\n }\r\n\r\n public getRowClass(formattedRecord: IFormattedUserNotification): string {\r\n var readState = UserNotificationState.Read as any;\r\n return formattedRecord.state == readState ? 'notification-read text-muted' : '';\r\n }\r\n\r\n getNotificationTextBySeverity(severity: abp.notifications.severity): string {\r\n switch (severity) {\r\n case abp.notifications.severity.SUCCESS:\r\n return this.l('Success');\r\n case abp.notifications.severity.WARN:\r\n return this.l('Warning');\r\n case abp.notifications.severity.ERROR:\r\n return this.l('Error');\r\n case abp.notifications.severity.FATAL:\r\n return this.l('Fatal');\r\n case abp.notifications.severity.INFO:\r\n default:\r\n return this.l('Info');\r\n }\r\n }\r\n}\r\n","
\r\n
\r\n

Download our Android app

\r\n\r\n
\r\n

\r\n {{ title}}\r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n","import { Component, Injector, Input, ViewEncapsulation } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\n\r\n\r\n@Component({\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'siteHeader',\r\n})\r\nexport class HeaderComponent extends AppComponentBase {\r\n\r\n @Input() imgSrc: string=\"\";\r\n @Input() title: string=\"\";\r\n @Input() backGroundColor: string=\"#6c8df9\";\r\n @Input() color: string=\"#ffcd2e\";\r\n\r\n\r\n isInEpisodesOrGamesOrEpisodePage:boolean=false;\r\n isInEpisodesPage:boolean=false;\r\n isInGamesPage:boolean=false;\r\n isInDownload:boolean=false;\r\n isInEpisodePage:boolean=false;\r\n isInLearnMorePage:boolean=false;\r\n isInInfoPage:boolean=false;\r\n isInAboutUsPage:boolean=false;\r\n\r\n constructor(\r\n injector: Injector,\r\n private _router: Router,\r\n ) {\r\n super(injector);\r\n }\r\n \r\n ngOnInit(): void {\r\n this.PageDetermination();\r\n this.AboutPageHeaderChanges();\r\n }\r\n \r\n AboutPageHeaderChanges(){\r\n if (this.isInAboutUsPage) {\r\n this.color=\"#364CB1\";\r\n this.title=\"About Us\";\r\n this.imgSrc=\"/assets/common/images/info/AboutUsOurShowHeader.png\";\r\n } \r\n }\r\n\r\n PageDetermination(){\r\n this.isInEpisodesPage = (this._router.url.includes(\"/episodes\"));\r\n this.isInGamesPage = (this._router.url.includes(\"/games\"));\r\n this.isInDownload = (this._router.url.includes(\"/url-download-page\"));\r\n this.isInEpisodePage = (this._router.url.includes(\"/episode/\"));\r\n this.isInLearnMorePage = (this._router.url.includes(\"/learn-more\") || this._router.url.includes(\"oval\"));\r\n this.isInInfoPage = (this._router.url.includes(\"/info\"));\r\n this.isInAboutUsPage = (this._router.url.includes(\"aboutOurshow\") || this._router.url.includes(\"aboutMedia\"));\r\n this.isInEpisodesOrGamesOrEpisodePage = (this.isInDownload || this.isInEpisodesPage || this.isInGamesPage || this.isInEpisodePage || this.isInLearnMorePage);\r\n }\r\n}","\r\n \r\n\r\n","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\n\r\n@Component({\r\n templateUrl: './info.component.html',\r\n styleUrls: ['./info.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'info',\r\n})\r\nexport class InfoComponent extends AppComponentBase {\r\n isInAboutUsPage:boolean=false;\r\n\r\n constructor(\r\n injector: Injector,\r\n private _router: Router,\r\n\r\n ) {\r\n super(injector);\r\n this.isInAboutUsPage = (this._router.url.includes(\"aboutOurshow\") || this._router.url.includes(\"aboutMedia\"));\r\n\r\n }\r\n\r\n}\r\n","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\n\r\n@Component({\r\n templateUrl: './about-us.component.html',\r\n styleUrls: ['./about-us.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'about-us',\r\n})\r\nexport class AboutComponent extends AppComponentBase {\r\n wordplay_arrow:string=\"Wordplay-arrow\";\r\n screenWidth: number = window.innerWidth;\r\n isMobileVersion: boolean = false;\r\n mobileVersionWidth: number = 575.98;\r\n\r\n constructor(\r\n injector: Injector,\r\n\r\n ) {\r\n super(injector); \r\n }\r\n\r\n ngOnInit(): void {\r\n this.mobileVersionCheck();\r\n }\r\n\r\n scrollToForm(section: string): void {\r\n document.getElementById(section)?.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n\r\n mobileVersionCheck() {\r\n this.isMobileVersion = this.screenWidth <= this.mobileVersionWidth;\r\n if (this.isMobileVersion) {\r\n this.wordplay_arrow=\"Wordplay-arrow_Mobile\";\r\n }\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
    \r\n
  • \r\n About the \"Our Show!\" platform\r\n
  • \r\n
  • \r\n About WordPlay Media\r\n
  • \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\n\r\n\r\n@Component({\r\n templateUrl: './contact.component.html',\r\n styleUrls: ['./contact.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'contact',\r\n})\r\nexport class ContactComponent extends AppComponentBase {\r\n\r\n constructor(\r\n injector: Injector,\r\n ) {\r\n super(injector);\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Inquiries: \r\n \r\n hello@wordplay.media\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\n\r\n\r\n@Component({\r\n templateUrl: './support.component.html',\r\n styleUrls: ['./support.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'support',\r\n})\r\nexport class SupportComponent extends AppComponentBase {\r\n\r\n constructor(\r\n injector: Injector,\r\n ) {\r\n super(injector);\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n

FAQ

\r\n
\r\n Support: \r\n \r\n help@wordplay.media\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\n\r\n@Component({\r\n templateUrl: './privacy-policy.component.html',\r\n styleUrls: ['./privacy-policy.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'privacy-policy',\r\n\r\n})\r\nexport class PrivacyPolicyComponent extends AppComponentBase {\r\n\r\n constructor(\r\n\r\n injector: Injector,\r\n ) {\r\n super(injector);\r\n }\r\n\r\n goToLink(url): void {\r\n window.open(\r\n url,\r\n '_blank'\r\n );\r\n }\r\n\r\n scrollToForm(section): void {\r\n document.getElementById(section)?.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n}\r\n","
\r\n\r\n

\r\n PRIVACY NOTICE\r\n

\r\n\r\n \r\n \r\n Last updated January 13, 2023\r\n\r\n \r\n \r\n\r\n
\r\n \r\n This privacy notice for WordPlay Media Ltd. ('Company', 'we',\r\n 'us' , or 'our'), describes how and why we might\r\n collect, store, use, and/or share ('process') your information when you use our services ('Services'), such as\r\n when\r\n you:\r\n \r\n
    \r\n
  • Visit our website at https://www.wordplay.media, or any website of ours that links to this privacy notice\r\n
  • \r\n
  • \r\n Download and use our mobile application (Our Show Games), or any other application of ours that links to this\r\n privacy notice\r\n\r\n
  • \r\n
  • \r\n Engage with us in other related ways, including any sales, marketing, or events\r\n\r\n
  • \r\n\r\n
\r\n\r\n \r\n Questions or concerns?\r\n Reading this privacy notice will help you understand your privacy rights and choices. If you\r\n do not agree with our policies and practices, please do not use our Services. If you still have any questions or\r\n concerns, please contact us at j.karlsen@wordplay.media.\r\n \r\n
\r\n\r\n

\r\n SUMMARY OF KEY POINTS\r\n

\r\n\r\n
\r\n \r\n \r\n This summary provides key points from our privacy notice, but you can find out more details about any of these\r\n topics by clicking the link following each key point or by using our table of contents below to find the section\r\n you are looking for. You can also click here\r\n to go directly to our table of\r\n contents.\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n What personal information do we process?\r\n \r\n When you visit, use, or navigate our Services, we may process personal information depending on how you interact\r\n with WordPlay Media Ltd. and the Services, the choices you make, and the products and features you use. Click\r\n here\r\n to learn more.\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n Do we process any sensitive personal information?\r\n \r\n We do not process sensitive personal information.\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n Do we receive any information from third parties?\r\n \r\n We do not receive any information from third parties.\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n How do we process your information?\r\n \r\n We process your information to provide, improve, and administer our Services,\r\n communicate with you, for security and fraud prevention, and to comply with law. We may also process your\r\n information\r\n for other purposes with your consent. We process your information only when we have a valid legal reason to do so.\r\n Click here to learn more.\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n In what situations and with which types of parties do we share personal information?\r\n \r\n In what situations and with which types of parties do we share personal information? We may share information in\r\n specific situations and with specific categories of third parties. Click here to\r\n learn more.\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n How do we keep your information safe?\r\n \r\n We have organisational and technical processes and procedures in place to\r\n protect your personal information. However, no electronic transmission over the internet or information storage\r\n technology can be guaranteed to be 100% secure, so we cannot promise or guarantee that hackers, cybercriminals, or\r\n other unauthorised third parties will not be able to defeat our security and improperly collect, access, steal, or\r\n modify your information. Click here to learn more.\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n What are your rights?\r\n \r\n Depending on where you are located geographically, the applicable privacy law may mean you have\r\n certain rights regarding your personal information. Click here to learn more.\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n \r\n How do you exercise your rights?\r\n \r\n The easiest way to exercise your rights is by filling out our data subject request\r\n form available here: https://www.wordplay.media, or by contacting us. We will consider and\r\n act upon any request in\r\n accordance\r\n with applicable data protection laws.\r\n \r\n
\r\n\r\n
\r\n \r\n Want to learn more about what WordPlay Media Ltd. does with any information we collect? Click here to review the\r\n notice in full.\r\n \r\n
\r\n\r\n\r\n

TABLE OF CONTENTS

\r\n \r\n\r\n\r\n

1. WHAT INFORMATION DO WE COLLECT?

\r\n\r\n

Personal information you disclose to us

\r\n\r\n\r\n
\r\n \r\n In Short: \r\n We collect personal information that you provide to us.\r\n \r\n
\r\n\r\n
\r\n \r\n We collect personal information that you voluntarily provide to us when you register on the Services, express an\r\n interest in obtaining information about us or our products and Services, when you participate in activities on the\r\n Services, or otherwise when you contact us.\r\n \r\n
\r\n\r\n
\r\n Personal Information Provided by You. \r\n \r\n The personal information that we collect depends on the context of your\r\n interactions with us and the Services, the choices you make, and the products and features you use. The personal\r\n information we collect may include the following:\r\n \r\n
\r\n\r\n
    \r\n
  • names
  • \r\n
  • email addresses
  • \r\n
  • usernames
  • \r\n
  • passwords
  • \r\n
\r\n\r\n\r\n
\r\n Sensitive Information. \r\n \r\n We do not process sensitive information.\r\n \r\n
\r\n\r\n
\r\n Application Data.\r\n \r\n If you use our application(s), we also may collect the following information if you choose to\r\n provide us with access or permission:\r\n \r\n
\r\n\r\n\r\n
    \r\n
  • \r\n Mobile Device Data.\r\n We automatically collect device information (such as your mobile device ID, model, and\r\n manufacturer), operating system, version information and system configuration information, device and application\r\n identification numbers, browser type and version, hardware model Internet service provider and/or mobile carrier,\r\n and\r\n Internet Protocol (IP) address (or proxy server). If you are using our application(s), we may also collect\r\n information\r\n about the phone network associated with your mobile device, your mobile device’s operating system or platform, the\r\n type of mobile device you use, your mobile device’s unique device ID, and information about the features of our\r\n application(s) you accessed.\r\n
  • \r\n
  • \r\n Push Notifications. \r\n We may request to send you push notifications regarding your account or certain features of the\r\n application(s). If you wish to opt out from receiving these types of communications, you may turn them off in your\r\n device's settings.\r\n
  • \r\n
\r\n\r\n\r\n
\r\n \r\n This information is primarily needed to maintain the security and operation of our application(s), for\r\n troubleshooting, and for our internal analytics and reporting purposes.\r\n \r\n
\r\n\r\n
\r\n \r\n All personal information that you provide to us must be true, complete, and accurate, and you must notify us of\r\n any\r\n changes to such personal information.\r\n \r\n
\r\n\r\n

Information automatically collected\r\n

\r\n\r\n
\r\n \r\n In Short: \r\n Some information — such as your Internet Protocol (IP) address and/or browser and device characteristics —\r\n is collected automatically when you visit our Services.\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n We automatically collect certain information when you visit, use, or navigate the Services. This information does\r\n not\r\n reveal your specific identity (like your name or contact information) but may include device and usage\r\n information,\r\n such as your IP address, browser and device characteristics, operating system, language preferences, referring\r\n URLs,\r\n device name, country, location, information about how and when you use our Services, and other technical\r\n information.\r\n This information is primarily needed to maintain the security and operation of our Services, and for our internal\r\n analytics and reporting purposes.\r\n \r\n
\r\n\r\n
\r\n \r\n Like many businesses, we also collect information through cookies and similar technologies.\r\n \r\n
\r\n\r\n
\r\n \r\n The information we collect includes:\r\n \r\n
\r\n
\r\n
    \r\n
  • \r\n Log and Usage Data.\r\n Log and usage data is service-related, diagnostic, usage, and performance information our\r\n servers\r\n automatically collect when you access or use our Services and which we record in log files. Depending on how you\r\n interact with us, this log data may include your IP address, device information, browser type, and settings and\r\n information about your activity in the Services (such as the date/time stamps associated with your usage, pages\r\n and\r\n files viewed, searches, and other actions you take such as which features you use), device event information\r\n (such as\r\n system activity, error reports (sometimes called 'crash dumps'), and hardware settings).\r\n
  • \r\n
  • \r\n Device Data.\r\n We collect device data such as information about your computer, phone, tablet, or other device you\r\n use to\r\n access the Services. Depending on the device used, this device data may include information such as your IP\r\n address\r\n (or proxy server), device and application identification numbers, location, browser type, hardware model,\r\n Internet\r\n service provider and/or mobile carrier, operating system, and system configuration information.\r\n
  • \r\n
  • \r\n Location Data.\r\n We collect location data such as information about your device's location, which can be either\r\n precise\r\n or imprecise. How much information we collect depends on the type and settings of the device you use to access\r\n the\r\n Services. For example, we may use GPS and other technologies to collect geolocation data that tells us your\r\n current\r\n location (based on your IP address). You can opt out of allowing us to collect this information either by\r\n refusing\r\n access to the information or by disabling your Location setting on your device. However, if you choose to opt\r\n out, you\r\n may not be able to use certain aspects of the Services.\r\n
  • \r\n
\r\n
\r\n\r\n
\r\n

\r\n 2. HOW DO WE PROCESS YOUR INFORMATION?\r\n

\r\n
\r\n\r\n
\r\n \r\n In Short: \r\n We process your information to provide, improve, and administer our Services, communicate with you, for\r\n security and fraud prevention, and to comply with law. We may also process your information for other purposes\r\n with\r\n your consent.\r\n \r\n
\r\n\r\n
\r\n \r\n We process your personal information for a variety of reasons, depending on how you interact with our Services,\r\n including:\r\n\r\n \r\n
\r\n\r\n
\r\n
    \r\n
  • \r\n To facilitate account creation and authentication and otherwise manage user\r\n accounts.\r\n We may process your information so you can create and log in to your account, as well as keep your account in\r\n working order.\r\n
  • \r\n
  • \r\n To request feedback.\r\n We may process your information when necessary to request feedback and to contact you about your\r\n use of our Services.\r\n
  • \r\n
  • \r\n To identify usage trends.\r\n We may process information about how you use our Services to better understand how they are\r\n being used so we can improve them.\r\n
  • \r\n
  • \r\n To save or protect an individual's vital interest.\r\n We may process your information when necessary to save or protect\r\n an individual’s vital interest, such as to prevent harm.\r\n
  • \r\n
\r\n
\r\n\r\n

3. WHAT LEGAL BASES DO WE RELY ON TO PROCESS YOUR INFORMATION?

\r\n\r\n
\r\n \r\n In Short: \r\n We only process your personal information when we believe it is necessary and we have a valid legal reason\r\n (i.e. legal basis) to do so under applicable law, like with your consent, to comply with laws, to provide you with\r\n services to enter into or fulfil our contractual obligations, to protect your rights, or to fulfil our legitimate\r\n business interests.\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n The General Data Protection Regulation (GDPR) and UK GDPR require us to explain the valid legal bases we rely on\r\n in\r\n order to process your personal information. As such, we may rely on the following legal bases to process your\r\n personal\r\n information:\r\n \r\n
\r\n\r\n
\r\n
    \r\n
  • \r\n \r\n Consent.\r\n \r\n We may process your information if you have given us permission (i.e. consent) to use your personal\r\n information for a specific purpose. You can withdraw your consent at any time. Click here to learn more.\r\n
  • \r\n
  • \r\n \r\n Legitimate Interests.\r\n \r\n We may process your information when we believe it is reasonably necessary to achieve our\r\n legitimate business interests and those interests do not outweigh your interests and fundamental rights and\r\n freedoms.\r\n For example, we may process your personal information for some of the purposes described in order to:\r\n
      \r\n
    • \r\n Analyse how our Services are used so we can improve them to engage and retain users\r\n
    • \r\n
    • \r\n Understand how our users use our products and services so we can improve user experience\r\n
    • \r\n
    \r\n
  • \r\n
  • \r\n \r\n Legal Obligations.\r\n \r\n We may process your information here we believe it is necessary for compliance\r\n with our legal obligations, such as to cooperate with a law enforcement body or regulatory agency, exercise or\r\n defend our legal rights, or disclose your information as evidence in litigation in which we are involved.\r\n
  • \r\n
  • \r\n \r\n Vital Interests.\r\n \r\n We may process your information here we believe it is necessary to protect your\r\n vital interests or\r\n the vital interests of a third party, such as situations involving potential threats to the safety of any\r\n person.\r\n
  • \r\n
\r\n
\r\n\r\n\r\n
\r\n \r\n In legal terms, we are generally the 'data controller' under European data protection laws of the personal\r\n information\r\n described in this privacy notice, since we determine the means and/or purposes of the data processing we perform.\r\n This\r\n privacy notice does not apply to the personal information we process as a 'data processor' on behalf of our\r\n customers.\r\n In those situations, the customer that we provide services to and with whom we have entered into a data processing\r\n agreement is the 'data controller' responsible for your personal information, and we merely process your\r\n information\r\n on their behalf in accordance with your instructions. If you want to know more about our customers' privacy\r\n practices,\r\n you should read their privacy policies and direct any questions you have to them.\r\n \r\n
\r\n\r\n\r\n

\r\n 4. WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION?\r\n

\r\n\r\n
\r\n \r\n In Short: \r\n We may share information in specific situations described in this section and/or with the following\r\n categories of third parties.\r\n \r\n
\r\n\r\n
\r\n \r\n Vendors, Consultants, and Other Third-Party Service Providers.\r\n \r\n We may share your data with third-party vendors, service providers, contractors, or agents ('third parties') who\r\n perform services for us or on our behalf and require\r\n access to such information to do that work. The categories of third parties we may share personal information with\r\n are\r\n as follows:\r\n
    \r\n
  • \r\n Data Analytics Services\r\n
  • \r\n
  • \r\n Cloud Computing Services\r\n
  • \r\n
\r\n
\r\n\r\n
\r\n \r\n We also may need to share your personal information in the following situations:\r\n \r\n
    \r\n
  • \r\n Business Transfers. \r\n We may share or transfer your information in connection with, or during negotiations of, any\r\n merger, sale of company assets, financing, or acquisition of all or a portion of our business to another\r\n company.\r\n
  • \r\n
\r\n
\r\n\r\n

\r\n 5. DO WE USE COOKIES AND OTHER TRACKING TECHNOLOGIES?\r\n

\r\n\r\n
\r\n \r\n In Short: \r\n We may use cookies and other tracking technologies to collect and store your information.\r\n \r\n
\r\n\r\n
\r\n \r\n We may use cookies and similar tracking technologies (like web beacons and pixels) to access or store information.\r\n Specific information about how we use such technologies and how you can refuse certain cookies is set out in our\r\n Cookie Notice.\r\n \r\n
\r\n\r\n

\r\n 6. HOW LONG DO WE KEEP YOUR INFORMATION?\r\n

\r\n\r\n
\r\n \r\n In Short: \r\n We keep your information for as long as necessary to fulfil the purposes outlined in this privacy notice unless\r\n otherwise required by law.\r\n \r\n
\r\n\r\n
\r\n \r\n We will only keep your personal information for as long as it is necessary for the purposes set out in this\r\n privacy\r\n notice, unless a longer retention period is required or permitted by law (such as tax, accounting, or other legal\r\n requirements). No purpose in this notice will require us keeping your personal information for longer than the\r\n period\r\n of time in which users have an account with us.\r\n \r\n
\r\n\r\n
\r\n \r\n When we have no ongoing legitimate business need to process your personal information, we will either delete or\r\n anonymise such information, or, if this is not possible (for example, because your personal information has been\r\n stored in backup archives), then we will securely store your personal information and isolate it from any further\r\n processing until deletion is possible.\r\n \r\n
\r\n\r\n

\r\n 7. HOW DO WE KEEP YOUR INFORMATION SAFE?\r\n

\r\n\r\n
\r\n \r\n In Short: \r\n We keep your information for as long as necessary to fulfil the purposes outlined in this privacy notice unless\r\n otherwise required by law.\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n We have implemented appropriate and reasonable technical and organisational security measures designed to protect\r\n the\r\n security of any personal information we process. However, despite our safeguards and efforts to secure your\r\n information, no electronic transmission over the Internet or information storage technology can be guaranteed to\r\n be\r\n 100% secure, so we cannot promise or guarantee that hackers, cybercriminals, or other unauthorised third parties\r\n will\r\n not be able to defeat our security and improperly collect, access, steal, or modify your information. Although we\r\n will\r\n do our best to protect your personal information, transmission of personal information to and from our Services is\r\n at\r\n your own risk. You should only access the Services within a secure environment.\r\n \r\n
\r\n\r\n

\r\n 8. WHAT ARE YOUR PRIVACY RIGHTS?\r\n

\r\n\r\n
\r\n\r\n \r\n In Short: \r\n In some regions, such as the European Economic Area (EEA) and United Kingdom (UK), you have rights that\r\n allow you greater access to and control over your personal information. You may review, change, or terminate your\r\n account at any time.\r\n \r\n
\r\n\r\n
\r\n \r\n In some regions (like the EEA and UK), you have certain rights under applicable data protection laws. These may\r\n include the right (i) to request access and obtain a copy of your personal information, (ii) to request\r\n rectification\r\n or erasure; (iii) to restrict the processing of your personal information; and (iv) if applicable, to data\r\n portability. In certain circumstances, you may also have the right to object to the processing of your personal\r\n information. You can make such a request by contacting us by using the contact details provided in the section\r\n 'HOW CAN YOU CONTACT US ABOUT THIS NOTICE?'\r\n below.\r\n \r\n
\r\n\r\n
\r\n \r\n We will consider and act upon any request in accordance with applicable data protection laws.\r\n \r\n
\r\n\r\n
\r\n \r\n If you are located in the EEA or UK and you believe we are unlawfully processing your personal information, you\r\n also\r\n have the right to complain to your local data protection supervisory authority. You can find their contact details\r\n here: https://ec.europa.eu/justice/data-protection/bodies/authorities/index_en.htm\r\n \r\n
\r\n\r\n
\r\n \r\n If you are located in Switzerland, the contact details for the data protection authorities are available here:\r\n \r\n https://www.edoeb.admin.ch/edoeb/en/home.html\r\n .\r\n \r\n
\r\n\r\n
\r\n \r\n Withdrawing your consent:\r\n \r\n \r\n If we are relying on your consent to process your personal information, you have the right\r\n to withdraw your consent at any time. You can withdraw your consent at any time by contacting us by using the\r\n contact\r\n details provided in the section 'HOW CAN YOU CONTACT\r\n US ABOUT THIS NOTICE?' below.\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n However, please note that this will not affect the lawfulness of the processing before its withdrawal nor, will it\r\n affect the processing of your personal information conducted in reliance on lawful processing grounds other than\r\n consent.\r\n \r\n
\r\n\r\n

\r\n Account Information\r\n

\r\n\r\n
\r\n \r\n If you would at any time like to review or change the information in your account or terminate your account, you\r\n can:\r\n \r\n
\r\n\r\n
\r\n
    \r\n
  • \r\n Log in to your account settings and update your user account.\r\n
  • \r\n
  • \r\n Contact us using the contact information provided.\r\n
  • \r\n
\r\n
\r\n\r\n
\r\n \r\n Upon your request to terminate your account, we will deactivate or delete your account and information from our\r\n active\r\n databases. However, we may retain some information in our files to prevent fraud, troubleshoot problems, assist\r\n with\r\n any investigations, enforce our legal terms and/or comply with applicable legal requirements.\r\n \r\n
\r\n\r\n
\r\n \r\n Cookies and similar technologies:\r\n \r\n \r\n Most Web browsers are set to accept cookies by default. If you prefer, you can\r\n usually choose to set your browser to remove cookies and to reject cookies. If you choose to remove cookies or\r\n reject\r\n cookies, this could affect certain features or services of our Services. To opt out of interest-based advertising\r\n by\r\n advertisers on our Services visit\r\n http://www.aboutads.info/choices/.\r\n \r\n
\r\n\r\n
\r\n \r\n If you have questions or comments about your privacy rights, you may email us at help@wordplay.media.\r\n \r\n
\r\n\r\n\r\n

\r\n 9. CONTROLS FOR DO-NOT-TRACK FEATURES\r\n

\r\n\r\n
\r\n \r\n Most web browsers and some mobile operating systems and mobile applications include a Do-Not-Track ('DNT') feature\r\n or\r\n setting you can activate to signal your privacy preference not to have data about your online browsing activities\r\n monitored and collected. At this stage no uniform technology standard for recognising and implementing DNT signals\r\n has\r\n been finalised. As such, we do not currently respond to DNT browser signals or any other mechanism that\r\n automatically\r\n communicates your choice not to be tracked online. If a standard for online tracking is adopted that we must\r\n follow in\r\n the future, we will inform you about that practice in a revised version of this privacy notice.\r\n \r\n
\r\n\r\n

\r\n 10. DO CALIFORNIA RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS?\r\n

\r\n\r\n
\r\n \r\n In Short: \r\n Yes, if you are a resident of California, you are granted specific rights regarding access to your personal\r\n information.\r\n \r\n
\r\n\r\n
\r\n \r\n California Civil Code Section 1798.83, also known as the 'Shine The Light' law, permits our users who are\r\n California\r\n residents to request and obtain from us, once a year and free of charge, information about categories of personal\r\n information (if any) we disclosed to third parties for direct marketing purposes and the names and addresses of\r\n all\r\n third parties with which we shared personal information in the immediately preceding calendar year. If you are a\r\n California resident and would like to make such a request, please submit your request in writing to us using the\r\n contact information provided below.\r\n \r\n
\r\n\r\n
\r\n \r\n If you are under 18 years of age, reside in California, and have a registered account with Services, you have the\r\n right to request removal of unwanted data that you publicly post on the Services. To request removal of such data,\r\n please contact us using the contact information provided below and include the email address associated with your\r\n account and a statement that you reside in California. We will make sure the data is not publicly displayed on the\r\n Services, but please be aware that the data may not be completely or comprehensively removed from all our systems\r\n (e.g. backups, etc.).\r\n \r\n
\r\n\r\n\r\n

\r\n 11. DO WE MAKE UPDATES TO THIS NOTICE?\r\n

\r\n\r\n\r\n
\r\n \r\n In Short: \r\n Yes, we will update this notice as necessary to stay compliant with relevant laws.\r\n \r\n
\r\n\r\n
\r\n \r\n We may update this privacy notice from time to time. The updated version will be indicated by an updated 'Revised'\r\n date and the updated version will be effective as soon as it is accessible. If we make material changes to this\r\n privacy notice, we may notify you either by prominently posting a notice of such changes or by directly sending\r\n you a\r\n notification. We encourage you to review this privacy notice frequently to be informed of how we are protecting\r\n your\r\n information.\r\n \r\n
\r\n\r\n

\r\n 12. HOW CAN YOU CONTACT US ABOUT THIS NOTICE?\r\n

\r\n\r\n
\r\n \r\n If you have questions or comments about this notice, you may email us at help@wordplay.media or by post to:\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n WordPlay Media Ltd.
\r\n 222 Osborne Road
\r\n Newcastle upon Tyne, Tyne and Wear NE2 3LB
\r\n United Kingdom\r\n
\r\n
\r\n\r\n
\r\n \r\n If you are a resident in the United Kingdom, the 'data controller' of your personal information is WordPlay Media\r\n Ltd.. WordPlay Media Ltd. has appointed Jonathan Karlsen to be its representative in the UK. You can contact them\r\n directly regarding the processing of your information by WordPlay Media Ltd., by email at j.karlsen@gmail.com, by\r\n visiting https://www.wordplay.media,\r\n by phone at +447530428500, or by post to:\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n 222 Osborne Road
\r\n Newcastle upon Tyne, Tyne and Wear NE2 3LB
\r\n England\r\n
\r\n
\r\n\r\n

\r\n 13. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?\r\n

\r\n\r\n
\r\n \r\n Based on the applicable laws of your country, you may have the right to request access to the personal information\r\n we\r\n collect from you, change that information, or delete it. To request to review, update, or delete your personal\r\n information, please visit: https://www.wordplay.media.\r\n \r\n
\r\n\r\n
","
\r\n \r\n
\r\n
\r\n \"leftArrow\"\r\n
\r\n
\r\n
\r\n
\r\n (undefined);\r\n readonly _allEpisodes$ = this._allEpisodesSubject.asObservable().pipe(\r\n mergeMap(() => this._episodeService.getAllEpisodes()),\r\n )\r\n\r\n readonly _episodes$ = combineLatest([\r\n this._allEpisodes$,\r\n this.tenantLanguageName$,\r\n ]).pipe(\r\n map(([allEpisodes, tenantLanguageName]) => {\r\n return allEpisodes.filter((episodes) => episodes.applicationLanguageName == tenantLanguageName);\r\n }),\r\n tap((episodes) => {\r\n this.episodesAll = episodes;\r\n this.eposidesArrrayLength = episodes.length;\r\n this.placeEpisodes();\r\n })\r\n );\r\n\r\n placeEpisodes() {\r\n this.episodes[0] = this.episodesAll[this.firstIndex];\r\n this.episodes[1] = this.episodesAll[this.secondIndex];\r\n this.episodes[2] = this.episodesAll[this.thirdIndex];\r\n }\r\n\r\n clickLearnMore(){\r\n this.episodes=this.episodesAll;\r\n this.isLearnMoreClicked=true;\r\n }\r\n\r\n left() {\r\n this.regularDecrease();\r\n if (this.firstIndex < 0) {\r\n this.firstIndex = this.eposidesArrrayLength - 1;\r\n }\r\n if (this.secondIndex < 0) {\r\n this.secondIndex = this.eposidesArrrayLength - 1;\r\n }\r\n if (this.thirdIndex < 0) {\r\n this.thirdIndex = this.eposidesArrrayLength - 1;\r\n }\r\n this.placeEpisodes();\r\n }\r\n\r\n right() {\r\n this.regularIncrease();\r\n if (this.firstIndex === this.eposidesArrrayLength) {\r\n this.firstIndex = 0;\r\n }\r\n if (this.secondIndex === this.eposidesArrrayLength) {\r\n this.secondIndex = 0;\r\n }\r\n if (this.thirdIndex === this.eposidesArrrayLength) {\r\n this.thirdIndex = 0;\r\n }\r\n this.placeEpisodes();\r\n }\r\n\r\n regularDecrease() {\r\n this.firstIndex--;\r\n this.secondIndex--;\r\n this.thirdIndex--;\r\n }\r\n\r\n regularIncrease() {\r\n this.firstIndex++;\r\n this.secondIndex++;\r\n this.thirdIndex++;\r\n }\r\n\r\n private _mobileVersionCheck() {\r\n this.isMobileVersion = this.screenWidth <= this.mobileVersionWidth;\r\n if (this.isMobileVersion) {\r\n this.ourShowHeader=\"ourShow-headerMobile\";\r\n }\r\n }\r\n}\r\n\r\n","export class EpisodeMedia {\r\n constructor(videoUrl: string, audioUrl: string) {\r\n this.videoUrl = videoUrl;\r\n this.audioUrl = audioUrl;\r\n }\r\n\r\n videoUrl: string;\r\n audioUrl: string;\r\n}","
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n Read the script\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Read the words\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Play a game\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { EntityDto, EpisodeDto, EpisodesServiceProxy, EpisodeUsersServiceProxy } from '@shared/service-proxies/service-proxies';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { BehaviorSubject, combineLatest, merge} from 'rxjs';\r\nimport { distinctUntilKeyChanged, map, mergeMap, shareReplay, take, tap } from 'rxjs/operators';\r\nimport { EpisodeMedia } from './episode-media';\r\nimport { VgApiService, VgMediaDirective } from '@videogular/ngx-videogular/core';\r\n\r\n@Component({\r\n templateUrl: './episode-panel.component.html',\r\n styleUrls: ['./episode-panel.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'episode-panel',\r\n})\r\nexport class EpisodePanelComponent extends AppComponentBase {\r\n\r\n scrolled: boolean = false;\r\n episodeId: number = Number(this.route.snapshot.paramMap.get('id'));\r\n entityDto: EntityDto = new EntityDto();\r\n isVideoMuted: Boolean = true;\r\n isAudioMuted: Boolean = true;\r\n played: boolean = false;\r\n\r\n private _mediaApi: VgApiService;\r\n private _media: EpisodeMedia;\r\n\r\n constructor(\r\n injector: Injector,\r\n private route: ActivatedRoute,\r\n private _episodeService: EpisodesServiceProxy,\r\n private _episodeUsersServiceProxy: EpisodeUsersServiceProxy,\r\n ) {\r\n\r\n super(injector);\r\n this._streams.subscribe();\r\n this.entityDto.id = Number(this.route.snapshot.paramMap.get('id'));\r\n }\r\n\r\n onPlayerReady($event: VgApiService) {\r\n this._mediaApi = $event;\r\n this.configureFullScreen();\r\n this.initializeVideo();\r\n this.initializeAudio();\r\n }\r\n\r\n private configureFullScreen() {\r\n const polyfill = this._mediaApi.fsAPI.polyfill;\r\n console.log(`WP: full screen request is '${polyfill.request}'`);\r\n }\r\n\r\n private get videoMedia(): VgMediaDirective {\r\n return this._mediaApi.medias['videoElement'];\r\n }\r\n\r\n private get videoElement(): HTMLVideoElement {\r\n return this.videoMedia?.elem;\r\n }\r\n\r\n private get audioMedia(): VgMediaDirective {\r\n return this._mediaApi.medias['audioElement'];\r\n }\r\n\r\n private get audioElement(): HTMLAudioElement {\r\n return this.audioMedia?.elem;\r\n }\r\n\r\n private initializeVideo(): void {\r\n try {\r\n this.subscribeMedia('videoElement');\r\n console.log('WP: setting video url ' + this._media.videoUrl);\r\n this.videoElement.src = this._media.videoUrl;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n private initializeAudio(): void {\r\n try {\r\n this.subscribeMedia('audioElement');\r\n console.log('WP: setting audio url ' + this._media.audioUrl);\r\n this.audioElement.src = this._media.audioUrl;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n private subscribeMedia(mediaId: string): void {\r\n const media = this._mediaApi.getMediaById(mediaId);\r\n const subscriptions = media.subscriptions;\r\n\r\n subscriptions.error.subscribe((e) => {\r\n console.log(`WP: ${mediaId} error:`, e.target.error);\r\n });\r\n\r\n subscriptions.abort.subscribe((e) => {\r\n console.log(`WP: ${mediaId} aborted`);\r\n });\r\n\r\n subscriptions.emptied.subscribe((e) => {\r\n console.log(`WP: ${mediaId} emptied`);\r\n });\r\n\r\n subscriptions.stalled.subscribe((e) => {\r\n console.log(`WP: ${mediaId} stalled`);\r\n });\r\n\r\n subscriptions.suspend.subscribe((e) => {\r\n console.log(`WP: ${mediaId} suspend`);\r\n });\r\n\r\n subscriptions.waiting.subscribe((e) => {\r\n console.log(`WP: ${mediaId} waiting`);\r\n });\r\n\r\n subscriptions.loadedData.subscribe((e) => {\r\n console.log(`WP: ${mediaId} loadedData`);\r\n });\r\n\r\n subscriptions.loadedMetadata.subscribe((e) => {\r\n console.log(`WP: ${mediaId} loadedMetadata`);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n this.stopSyncMedia();\r\n }\r\n\r\n private _syncMediaIntervalId;\r\n private startSyncMedia(): void {\r\n this.stopSyncMedia();\r\n this._syncMediaIntervalId = setInterval(() => {\r\n this.syncMedia();\r\n }, 500);\r\n }\r\n\r\n private stopSyncMedia(): void {\r\n if (this._syncMediaIntervalId) {\r\n clearInterval(this._syncMediaIntervalId);\r\n this._syncMediaIntervalId = null;\r\n }\r\n }\r\n\r\n isMediaLoading: boolean;\r\n isMediaPlaying: boolean;\r\n\r\n private _isSyncingMedia = false;\r\n private syncMedia(): Promise {\r\n if (this._isSyncingMedia) {\r\n return;\r\n }\r\n\r\n this._isSyncingMedia = true;\r\n try {\r\n this._syncMedia();\r\n } catch (e) {\r\n console.error('WP: media sync error', e);\r\n } finally {\r\n this._isSyncingMedia = false;\r\n }\r\n }\r\n\r\n private _syncMedia(): Promise {\r\n if (!this.isMediaPlaying) {\r\n return;\r\n }\r\n\r\n const audioMedia = this.audioMedia;\r\n const videoMedia = this.videoMedia;\r\n const audioElement = this.audioElement;\r\n const videoElement = this.videoElement;\r\n\r\n const videoState = videoElement.readyState;\r\n if (videoState < HTMLMediaElement.HAVE_FUTURE_DATA) {\r\n this.isMediaLoading = true;\r\n\r\n console.log(`WP: Video has not enough data to play, state=${videoState}. Pausing audio.`\r\n + ` video current time=${videoMedia.currentTime}`\r\n + ` audio current time=${audioMedia.currentTime}`\r\n );\r\n audioMedia.currentTime = videoMedia.currentTime;\r\n audioMedia.pause();\r\n return;\r\n }\r\n\r\n const audioState = audioElement.readyState;\r\n if (audioState < HTMLMediaElement.HAVE_FUTURE_DATA) {\r\n this.isMediaLoading = true;\r\n\r\n console.log(`WP: Audio has not enough data to play, state=${audioState}. Pausing video.`\r\n + ` video current time=${videoMedia.currentTime}`\r\n + ` audio current time=${audioMedia.currentTime}`\r\n );\r\n\r\n videoMedia.currentTime = audioMedia.currentTime;\r\n videoMedia.pause();\r\n return;\r\n }\r\n\r\n const audioCurrentTime = audioMedia.currentTime;\r\n const videoCurrentTime = videoMedia.currentTime;\r\n const mediaTimeDifference = Math.abs(audioCurrentTime - videoCurrentTime);\r\n const isCurrentTimeUnsyncronized: boolean = mediaTimeDifference > 0.3;\r\n if (isCurrentTimeUnsyncronized) {\r\n console.log('WP: Video and audio time unsyncronized. Syncing: '\r\n + ` video current time=${videoMedia.currentTime}`\r\n + ` audio current time=${audioMedia.currentTime}`\r\n );\r\n audioMedia.currentTime = videoMedia.currentTime;\r\n }\r\n\r\n if (videoElement.paused) {\r\n console.log(`WP: Video was paused, state ${videoMedia.state}, play start`);\r\n videoMedia.play();\r\n console.log('WP: Video was paused, play started');\r\n }\r\n\r\n if (audioElement.paused) {\r\n console.log(`WP: Audio was paused, state ${audioMedia.state}, play start`);\r\n audioMedia.play();\r\n console.log('WP: Audio was paused, play started');\r\n }\r\n\r\n if (this.isMediaLoading) {\r\n console.log('WP: Syncing media: playing');\r\n this.isMediaLoading = false;\r\n }\r\n }\r\n\r\n playPauseMedia() {\r\n if (this.isMediaPlaying) {\r\n this.pauseMedia();\r\n } else {\r\n this.playMedia();\r\n }\r\n }\r\n\r\n playMedia() {\r\n if (this.isAudioMuted) {\r\n console.log('WP: unmuting audio');\r\n this.isAudioMuted = false;\r\n }\r\n\r\n console.log('WP: play media');\r\n this.isMediaPlaying = true;\r\n }\r\n\r\n pauseMedia() {\r\n try {\r\n this.videoMedia.pause();\r\n this.audioMedia.pause();\r\n\r\n this.isMediaPlaying = false;\r\n this.isMediaLoading = false;\r\n } catch (e) {\r\n console.error('WP: pause error', e);\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n private readonly _allEpisodesSubject = new BehaviorSubject(undefined);\r\n readonly _allEpisodes$ = this._allEpisodesSubject.asObservable().pipe(\r\n mergeMap(() => this._episodeService.getAllEpisodes()),\r\n );\r\n\r\n readonly _currentEpisode$ = this._allEpisodes$.pipe(\r\n map((episodes) => {\r\n var episode = episodes.find(x => x.id === this.episodeId);\r\n return episode;\r\n }),\r\n distinctUntilKeyChanged('id')\r\n )\r\n\r\n readonly _episodeTitle$ = this._currentEpisode$.pipe(\r\n map((episode) => episode.title),\r\n )\r\n\r\n readonly _episodeVideoUrl$ = this._currentEpisode$.pipe(\r\n map((episode) => {\r\n if (episode?.episodeVideoContent) {\r\n return this.getUrl(episode?.episodeVideoContent)\r\n }\r\n return '';\r\n }),\r\n );\r\n\r\n readonly _syncAudioVideo$ = this._episodeVideoUrl$.pipe(\r\n tap(() => {\r\n this.startSyncMedia();\r\n }),\r\n );\r\n\r\n readonly _episodeAudioUrl$ = this._currentEpisode$.pipe(\r\n map((episode) => {\r\n if (episode?.audioContent) {\r\n return this.getUrl(episode.audioContent);\r\n }\r\n \r\n return 'url';\r\n })\r\n );\r\n\r\n readonly episodeAudio$ = combineLatest([\r\n this._episodeVideoUrl$,\r\n this._episodeAudioUrl$\r\n ]).pipe(\r\n map(([videoUrl, audioUrl]) => {\r\n return new EpisodeMedia(videoUrl, audioUrl);\r\n }),\r\n shareReplay(1)\r\n );\r\n\r\n readonly episodeMedia$ = combineLatest([\r\n this._episodeVideoUrl$,\r\n this._episodeAudioUrl$\r\n ]).pipe(\r\n map(([videoUrl, audioUrl]) => {\r\n return new EpisodeMedia(videoUrl, audioUrl);\r\n }),\r\n tap(media => this._media = media),\r\n shareReplay(1)\r\n );\r\n\r\n readonly _episodeScriptUrl$ = this._currentEpisode$.pipe(\r\n map((episode) => {\r\n if (episode?.scriptContent) {\r\n return this.getUrl(episode?.scriptContent)\r\n }\r\n return '';\r\n }),\r\n );\r\n\r\n readonly _episodeVocabularyUrl$ = this._currentEpisode$.pipe(\r\n map((episode) => {\r\n if (episode?.vocabularyContent) {\r\n return this.getUrl(episode?.vocabularyContent)\r\n }\r\n return '';\r\n }),\r\n );\r\n\r\n private readonly _urlSubject = new BehaviorSubject(undefined);\r\n readonly _url$ = this._urlSubject.asObservable().pipe(\r\n map((fileGuid) => `${AppConsts.remoteServiceBaseUrl}/File/GetBinaryFile?id=${fileGuid}`),\r\n tap((x) => {\r\n window.open(x, '_blank');\r\n })\r\n );\r\n\r\n private readonly _streams = merge(\r\n this._episodeVideoUrl$,\r\n this._syncAudioVideo$\r\n )\r\n\r\n watchedEpisode() {\r\n this._episodeUsersServiceProxy.userWatchedVideo(this.entityDto).subscribe();\r\n }\r\n\r\n mediaEnded() {\r\n this.goToBeginning();\r\n this.isMediaPlaying = false;\r\n this.pauseMedia();\r\n this.watchedEpisode()\r\n }\r\n\r\n goToBeginning() {\r\n this.audioMedia.currentTime = 0;\r\n this.videoMedia.currentTime = 0;\r\n }\r\n\r\n onVideoEnd() {\r\n this.watchedEpisode()\r\n }\r\n\r\n getUrl(id: string): string {\r\n return AppConsts.remoteServiceBaseUrl + '/File/DownloadBinaryFile?id=' + id;\r\n }\r\n\r\n scrollToForm(): void {\r\n if (!this.scrolled && document.getElementById(\"forVideoPlayer\")) {\r\n document.getElementById(\"forVideoPlayer\")?.scrollIntoView({ behavior: \"smooth\" });\r\n this.scrolled = true;\r\n }\r\n }\r\n\r\n openFile(fileGuid: string): void {\r\n this._urlSubject.next(fileGuid);\r\n this._url$.pipe(\r\n take(1),\r\n ).subscribe();\r\n }\r\n}\r\n","import { distinctUntilChanged } from './distinctUntilChanged';\nexport function distinctUntilKeyChanged(key, compare) {\n return distinctUntilChanged((x, y) => compare ? compare(x[key], y[key]) : x[key] === y[key]);\n}\n","
\r\n
\r\n
\r\n \"leftArrow\"\r\n
\r\n
\r\n
\r\n {\r\n var episodesInCurrentLanguage = episodes.filter((x) => x.applicationLanguageName == name);\r\n\r\n this.episodesLength = episodesInCurrentLanguage.length;\r\n return episodesInCurrentLanguage;\r\n }),\r\n shareReplay(1),\r\n tap((episodes) => {\r\n this.episodesAll = episodes;\r\n this.eposidesArrrayLength = episodes.length;\r\n if (this.isMobileVersion) {\r\n this.placeEpisodesMobile();\r\n return;\r\n }\r\n this.placeEpisodes();\r\n })\r\n );\r\n\r\n private readonly __currentEpisodeIndexSubject = new BehaviorSubject(undefined);\r\n readonly _currentEpisodeIndex$ = this._episodes$.pipe(\r\n map((episodes) => {\r\n return episodes.findIndex(x => x.id === this.episodeId);\r\n }),\r\n tap((currentIndex) => {\r\n if(this.isMobileVersion)\r\n {\r\n this.nextEpisodesMobile(currentIndex);\r\n return;\r\n }\r\n this.nextEpisodes(currentIndex);\r\n })\r\n )\r\n\r\n get _currentEpisodeIndex() {\r\n return this.__currentEpisodeIndexSubject.value;\r\n }\r\n\r\n readonly _nextEpisodeIndex$ = combineLatest([\r\n this._episodes$,\r\n this._currentEpisodeIndex$\r\n ]).pipe(\r\n map(([episodes, currentIndex]) => {\r\n var nextIndex = currentIndex + 1;\r\n if (nextIndex >= episodes?.length) {\r\n this._nextEpisodeIndexValueSubject.next(0);\r\n return 0\r\n }\r\n else {\r\n this._nextEpisodeIndexValueSubject.next(nextIndex);\r\n return nextIndex;\r\n }\r\n }),\r\n );\r\n\r\n private readonly _nextEpisodeIndexValueSubject = new BehaviorSubject(0);\r\n readonly _nextEpisodeIndexValue$ = this._nextEpisodeIndexValueSubject.asObservable().pipe()\r\n\r\n readonly _nextEpisode$ = combineLatest([\r\n this._episodes$,\r\n this._nextEpisodeIndexValue$\r\n ]).pipe(\r\n map(([episodes, nextIndex]) => {\r\n var nextEpisode = episodes[nextIndex];\r\n return nextEpisode;\r\n })\r\n )\r\n\r\n readonly _nextEpisodeimageSrc$ = this._nextEpisode$.pipe(\r\n map((episode) =>\r\n `${AppConsts.remoteServiceBaseUrl}/File/GetBinaryFile?id=${episode?.imageContent}`\r\n )\r\n )\r\n\r\n private readonly _navigateNextEpisodeSubject = new Subject();\r\n private readonly _navigateNextEpisode$ = this._navigateNextEpisodeSubject.asObservable().pipe(\r\n concatMap(() => this._nextEpisode$),\r\n tap((nextEpisode) => {\r\n this.navigate(nextEpisode.id)\r\n }),\r\n );\r\n\r\n private readonly _streams = merge(\r\n this.tenantLanguageName$,\r\n this._episodes$,\r\n this._currentEpisodeIndex$,\r\n this._navigateNextEpisode$,\r\n this._nextEpisodeIndex$\r\n )\r\n\r\n private navigate(id: number): void {\r\n this._router.navigate(['./app/episode', id]).then(() => {\r\n window.location.reload();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.mobileVersionCheck();\r\n }\r\n\r\n navigateByCarousel(id: number): void {\r\n this._router.navigate(['./app/episode', id]).then(() => {\r\n window.location.reload();\r\n });\r\n }\r\n\r\n nextEpisode(): void {\r\n this._navigateNextEpisodeSubject.next();\r\n }\r\n\r\n public placeEpisodes() {\r\n this.episodes[0] = this.episodesAll[this.firstIndex];\r\n this.episodes[1] = this.episodesAll[this.secondIndex];\r\n this.episodes[2] = this.episodesAll[this.thirdIndex];\r\n }\r\n\r\n left() {\r\n this.regularDecrease();\r\n if (this.firstIndex < 0) {\r\n this.firstIndex = this.eposidesArrrayLength - 1;\r\n }\r\n if (this.secondIndex < 0) {\r\n this.secondIndex = this.eposidesArrrayLength - 1;\r\n }\r\n if (this.thirdIndex < 0) {\r\n this.thirdIndex = this.eposidesArrrayLength - 1;\r\n }\r\n this.placeEpisodes();\r\n }\r\n\r\n right() {\r\n this.regularIncrease();\r\n if (this.firstIndex === this.eposidesArrrayLength) {\r\n this.firstIndex = 0;\r\n }\r\n if (this.secondIndex === this.eposidesArrrayLength) {\r\n this.secondIndex = 0;\r\n }\r\n if (this.thirdIndex === this.eposidesArrrayLength) {\r\n this.thirdIndex = 0;\r\n }\r\n this.placeEpisodes();\r\n }\r\n\r\n private nextEpisodes(currentIndex: number){\r\n this.firstIndex = currentIndex + 1;\r\n this.secondIndex = currentIndex + 2;\r\n this.thirdIndex = currentIndex + 3;\r\n if (currentIndex == this.eposidesArrrayLength-1) {\r\n this.firstIndex = 0;\r\n this.secondIndex = 1;\r\n this.thirdIndex = 2;\r\n }\r\n if (currentIndex == this.eposidesArrrayLength-2) {\r\n this.firstIndex = currentIndex+1;\r\n this.secondIndex = 0;\r\n this.thirdIndex = 1;\r\n }\r\n if (currentIndex == this.eposidesArrrayLength-3) {\r\n this.firstIndex = currentIndex+1;\r\n this.secondIndex = currentIndex+2;\r\n this.thirdIndex = 0;\r\n }\r\n }\r\n\r\n private regularDecrease() {\r\n this.firstIndex--;\r\n this.secondIndex--;\r\n this.thirdIndex--;\r\n }\r\n\r\n private regularIncrease() {\r\n this.firstIndex++;\r\n this.secondIndex++;\r\n this.thirdIndex++;\r\n }\r\n \r\n public placeEpisodesMobile() {\r\n this.episodes[0] = this.episodesAll[this.firstIndex];\r\n this.episodes[1] = this.episodesAll[this.secondIndex];\r\n }\r\n\r\n leftMobile() {\r\n this.regularDecreaseMobile();\r\n if (this.firstIndex < 0) {\r\n this.firstIndex = this.eposidesArrrayLength - 1;\r\n }\r\n if (this.secondIndex < 0) {\r\n this.secondIndex = this.eposidesArrrayLength - 1;\r\n }\r\n this.placeEpisodesMobile();\r\n }\r\n\r\n rightMobile() {\r\n this.regularIncreaseMobile();\r\n if (this.firstIndex === this.eposidesArrrayLength) {\r\n this.firstIndex = 0;\r\n }\r\n if (this.secondIndex === this.eposidesArrrayLength) {\r\n this.secondIndex = 0;\r\n }\r\n this.placeEpisodesMobile();\r\n }\r\n\r\n private nextEpisodesMobile(currentIndex: number){\r\n this.firstIndex = currentIndex + 1;\r\n this.secondIndex = currentIndex + 2;\r\n if (currentIndex == this.eposidesArrrayLength-1) {\r\n this.firstIndex = 0;\r\n this.secondIndex = 1;\r\n }\r\n if (currentIndex == this.eposidesArrrayLength-2) {\r\n this.firstIndex = currentIndex+1;\r\n this.secondIndex = 0;\r\n }\r\n }\r\n\r\n private regularDecreaseMobile() {\r\n this.firstIndex--;\r\n this.secondIndex--;\r\n }\r\n\r\n private regularIncreaseMobile() {\r\n this.firstIndex++;\r\n this.secondIndex++;\r\n }\r\n\r\n mobileVersionCheck() {\r\n this.isMobileVersion = this.screenWidth <= this.mobileVersionWidth;\r\n }\r\n\r\n leftClick(){\r\n if (this.isMobileVersion) {\r\n this.leftMobile();\r\n return;\r\n }\r\n this.left();\r\n }\r\n\r\n rightClick(){\r\n if (this.isMobileVersion) {\r\n this.rightMobile();\r\n return;\r\n }\r\n this.right();\r\n }\r\n}\r\n\r\n","\r\n
\r\n \r\n
\r\n\r\n","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { EpisodesServiceProxy, EpisodeUsersServiceProxy, TenantLoginInfoDto, TenantServiceProxy, UserListDto, UserServiceProxy } from '@shared/service-proxies/service-proxies';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { BehaviorSubject, mergeMap, map, tap, repeat, combineLatest, merge, shareReplay, switchMap } from 'rxjs';\r\nimport { EpisodeGuardService } from '@app/episode-guard.service';\r\n\r\n@Component({\r\n templateUrl: './episode.component.html',\r\n styleUrls: ['./episode.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'episode',\r\n})\r\nexport class EpisodeComponent extends AppComponentBase {\r\n\r\n watchedEpisode: boolean = false;\r\n submittedForm: boolean = false;\r\n feedbackRequired: boolean = false;\r\n refreshed: boolean = false;\r\n scrolled: boolean = false;\r\n\r\n constructor(\r\n injector: Injector,\r\n private _episodeService: EpisodesServiceProxy,\r\n private route: ActivatedRoute,\r\n public sanitizer: DomSanitizer,\r\n private _userServiceProxy: UserServiceProxy,\r\n private _episodeUserService: EpisodeUsersServiceProxy,\r\n private _tenantService: TenantServiceProxy,\r\n private _episodeGuardService: EpisodeGuardService,\r\n ) {\r\n super(injector);\r\n\r\n this._streams.subscribe();\r\n }\r\n\r\n private readonly _episodeIdSubject = new BehaviorSubject(undefined);\r\n readonly _episodeId$ = this._episodeIdSubject.asObservable().pipe(\r\n map(() => Number(this.route.snapshot.paramMap.get('id'))),\r\n tap((currentEpisodeId) => localStorage.setItem(\"currentEpisode\", currentEpisodeId.toString())),\r\n shareReplay(1),\r\n )\r\n\r\n get episodeId() {\r\n return this._episodeIdSubject.value;\r\n }\r\n\r\n readonly _episode$ = this._episodeId$.pipe(\r\n mergeMap((episodeId) => this._episodeService.getEpisodeForView(episodeId)),\r\n map((episodeDto) => episodeDto.episode),\r\n )\r\n\r\n readonly _currentEpisodeUser$ = this._episodeId$.pipe(\r\n switchMap((episodeId) => {\r\n return this._episodeUserService.getCurrentEpisodeUser(episodeId).pipe(\r\n repeat({ delay: 1000 }),\r\n )\r\n }),\r\n )\r\n\r\n private readonly _userSubject = new BehaviorSubject(undefined);\r\n readonly _user$ = this._userSubject.asObservable().pipe(\r\n mergeMap(() => this._userServiceProxy.getCurrentUser()),\r\n )\r\n\r\n readonly _checkWatchedEpisode$ = this._currentEpisodeUser$.pipe(\r\n tap((currentEpisodeUser) => {\r\n this.watchedEpisode = currentEpisodeUser.hasWatched;\r\n this.submittedForm = currentEpisodeUser.hasFeedback;\r\n this.scrollToForm();\r\n if (currentEpisodeUser.hasFeedback &&\r\n localStorage.getItem(`${this.episodeId}`) !== \"true\") {\r\n localStorage.setItem(`${this.episodeId}`, \"true\");\r\n }\r\n }),\r\n )\r\n\r\n scrollToForm(): void {\r\n if (!this.scrolled && document.getElementById(\"iframe\")) {\r\n document.getElementById(\"iframe\")?.scrollIntoView({ behavior: \"smooth\" });\r\n this.scrolled = true;\r\n }\r\n }\r\n\r\n private readonly _tenantSubject = new BehaviorSubject(undefined);\r\n readonly _tenant$ = this._tenantSubject.asObservable().pipe(\r\n map(() => this.appSession.tenant),\r\n )\r\n\r\n readonly _currentUserAge$ = this._user$.pipe(\r\n map((user) => (new Date().getUTCFullYear() - user.birthDate.year).toString()),\r\n )\r\n\r\n readonly _currentUserGender$ = this._user$.pipe(\r\n map((user) => user.gender),\r\n map((gender) => {\r\n switch (gender) {\r\n case 2:\r\n return \"boy\";\r\n case 3:\r\n return \"girl\";\r\n default:\r\n return \"boy\";\r\n }\r\n }),\r\n );\r\n\r\n readonly _forUrl$ = combineLatest([\r\n this._episode$,\r\n this._tenant$,\r\n this._user$,\r\n this._currentUserGender$,\r\n this._currentUserAge$\r\n ]).pipe(\r\n map(([episode, tenant, user, gender, age]) => {\r\n var url = `${episode.googleFormUrl}`\r\n .replace(\"boy\", gender)\r\n .replace(\"name\", user.name)\r\n .replace(\"surname\", user.surname)\r\n .replace(\"=10\", `=${age}`)\r\n .replace(\"=1&\", `=${abp.session.userId}&`)\r\n .replace(\"=123\", `=${episode.id}`)\r\n .replace(\"SchoolName\", `${tenant.name}`);\r\n\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(url)\r\n }),\r\n );\r\n\r\n reload(): void {\r\n location.reload();\r\n }\r\n\r\n private readonly _feedBackRequiredForTenantSubject = new BehaviorSubject(undefined);\r\n readonly _feedBackRequiredForTenant$ = this._feedBackRequiredForTenantSubject.asObservable().pipe(\r\n mergeMap(() => this._tenantService.isFeedBackRequiredForTenant()),\r\n tap((x) => {\r\n if (x.isFeedbackRequired) {\r\n this.nextEpisodeLogic();\r\n this.feedbackRequired = true;\r\n }\r\n })\r\n )\r\n\r\n nextEpisodeLogic(): void {\r\n this._episodeGuardService.nextEpisode();\r\n }\r\n\r\n private readonly _streams = merge(\r\n this._feedBackRequiredForTenant$,\r\n this._forUrl$,\r\n this._checkWatchedEpisode$\r\n )\r\n}\r\n","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { timer } from '../observable/timer';\nexport function repeat(countOrConfig) {\n let count = Infinity;\n let delay;\n if (countOrConfig != null) {\n if (typeof countOrConfig === 'object') {\n ({ count = Infinity, delay } = countOrConfig);\n }\n else {\n count = countOrConfig;\n }\n }\n return count <= 0\n ? () => EMPTY\n : operate((source, subscriber) => {\n let soFar = 0;\n let sourceSub;\n const resubscribe = () => {\n sourceSub === null || sourceSub === void 0 ? void 0 : sourceSub.unsubscribe();\n sourceSub = null;\n if (delay != null) {\n const notifier = typeof delay === 'number' ? timer(delay) : innerFrom(delay(soFar));\n const notifierSubscriber = createOperatorSubscriber(subscriber, () => {\n notifierSubscriber.unsubscribe();\n subscribeToSource();\n });\n notifier.subscribe(notifierSubscriber);\n }\n else {\n subscribeToSource();\n }\n };\n const subscribeToSource = () => {\n let syncUnsub = false;\n sourceSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, () => {\n if (++soFar < count) {\n if (sourceSub) {\n resubscribe();\n }\n else {\n syncUnsub = true;\n }\n }\n else {\n subscriber.complete();\n }\n }));\n if (syncUnsub) {\n resubscribe();\n }\n };\n subscribeToSource();\n });\n}\n","export class GameDto {\r\n id: number;\r\n title: string;\r\n imageUrl: string;\r\n videoUrl: string;\r\n showVideo: boolean\r\n}\r\n\r\nexport class GamesData {\r\n static games: GameDto[] = [{\r\n id: 0,\r\n title: \"Say it\",\r\n imageUrl: \"assets/common/images/games/say_it.png\",\r\n videoUrl: \"assets/videos/games/gameplay_dummy_video1.mp4\",\r\n showVideo: false\r\n },\r\n {\r\n id: 1,\r\n title: \"Connect\",\r\n imageUrl: \"assets/common/images/games/connect.png\",\r\n videoUrl: \"assets/videos/games/gameplay_dummy_video2.mp4\",\r\n showVideo: false\r\n },\r\n {\r\n id: 2,\r\n title: \"Spell It\",\r\n imageUrl: \"assets/common/images/games/spell_it.png\",\r\n videoUrl: \"assets/videos/games/gameplay_dummy_video3.mp4\",\r\n showVideo: false\r\n },]\r\n}\r\n","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { GameDto, GamesData } from './GamesData';\r\n\r\n@Component({\r\n templateUrl: './games.component.html',\r\n styleUrls: ['./games.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'games',\r\n})\r\n\r\nexport class GamesComponent extends AppComponentBase {\r\n \r\n games: GameDto[] = GamesData.games;\r\n videoPlay: boolean = false;\r\n LetsPlaySrc: string = \"LetsPlay\";\r\n ABC: string = \"ABC\";\r\n Mobile: string = \"Mobile\";\r\n GamesHeader: string = \"Games_Header\";\r\n screenWidth: number = window.innerWidth;\r\n isMobileVersion: boolean = false;\r\n mobileVersionWidth: number = 575.98;\r\n\r\n constructor(\r\n\r\n injector: Injector,\r\n\r\n ) {\r\n super(injector)\r\n }\r\n\r\n ngOnInit(): void {\r\n this.mobileVersionCheck();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.games.forEach(element => {\r\n element.showVideo = false;\r\n });\r\n }\r\n\r\n mobileVersionCheck() {\r\n var isInMobileScreenSize = this.screenWidth <= this.mobileVersionWidth;\r\n if (isInMobileScreenSize) {\r\n this.LetsPlaySrc = \"LetsPlayMobile\";\r\n this.ABC = \"ABCMobile\";\r\n this.Mobile = \"MobileMobile\";\r\n this.GamesHeader = \"Games_Header_Mobile\";\r\n }\r\n }\r\n\r\n goDownload(): void {\r\n window.open(\r\n `https://wordplay.media/download`,\r\n );\r\n }\r\n\r\n toggleVideo(id: number): void {\r\n var currentGame = this.games.find((game) => game.id === id);\r\n currentGame.showVideo = !currentGame.showVideo;\r\n if (currentGame.showVideo == true)\r\n this.games.filter((game) => game.id !== id).map((item) => {\r\n item.showVideo = false;\r\n })\r\n }\r\n}\r\n","
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n","import { Component, Injector, Input, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { EpisodeDto } from '@shared/service-proxies/service-proxies';\r\nimport { Language, LanguageData } from '../language-picker-local/LanguageConsts';\r\n\r\n@Component({\r\n templateUrl: './oval.html',\r\n styleUrls: ['./oval.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'oval',\r\n})\r\nexport class OvalComponent extends AppComponentBase{\r\n\r\n episodes: EpisodeDto[] = [];\r\n urlVocabulary: string = '';\r\n nativeIndex: number = 0;\r\n model: EpisodeDto = new EpisodeDto();\r\n imageSource: string;\r\n languages: Language[]=LanguageData.languages;\r\n currentLanguageId: number = 0;\r\n data: any;\r\n label:string;\r\n name: string;\r\n\r\n @Input() borderColor: string=\"\";\r\n @Input() color: string=\"\";\r\n @Input() textColor: string=\"\";\r\n @Input() description: string=\"\";\r\n\r\n constructor(\r\n injector: Injector\r\n ) {\r\n super(injector);\r\n this.languages = LanguageData.languages;\r\n }\r\n \r\n ngOnInit(): void {\r\n this.label=this.description.substring(0, 3)\r\n this.name=this.description.slice(5, this.description.length)\r\n };\r\n}\r\n\r\n\r\n","","
\r\n \r\n
\r\n
\r\n
\r\n \"\"\r\n \"\"\r\n \"\"\r\n

Select an episode!

\r\n
\r\n
\r\n

Use the ovals to \"Learn More\". Here you can find the script & translation, words, phrases, worksheets, spelling exercises, grammar topics & practice, songs and much more.\r\n

\r\n \r\n \r\n \r\n \r\n \"\"\r\n
\r\n
\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n","import { Component, Injector, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport {\r\n Router\r\n} from '@angular/router';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { AppSessionService } from '@shared/common/session/app-session.service';\r\nimport { EpisodeDto, EpisodeOvalsServiceProxy, EpisodesServiceProxy } from '@shared/service-proxies/service-proxies';\r\nimport { Dropdown } from 'primeng/dropdown';\r\nimport { BehaviorSubject, combineLatest } from 'rxjs';\r\nimport { distinctUntilChanged, shareReplay, take, map, mergeMap, tap } from 'rxjs/operators';\r\nimport { LanguageService } from '../language-picker-local/language-picker-local.service';\r\n\r\n@Component({\r\n templateUrl: './learn-more.component.html',\r\n styleUrls: ['./learn-more.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'learn-more',\r\n})\r\nexport class LearnMoreComponent extends AppComponentBase {\r\n\r\n\r\n episodes: EpisodeDto[] = [];\r\n selectedEpisode: EpisodeDto;\r\n isEpisodesDropdownOpened = false;\r\n\r\n constructor(\r\n injector: Injector,\r\n private _router: Router,\r\n private _episodeService: EpisodesServiceProxy,\r\n private _languageService: LanguageService,\r\n private _sessionService: AppSessionService,\r\n private _episodeOvalsServiceProxy: EpisodeOvalsServiceProxy,\r\n ) {\r\n super(injector);\r\n if (!this._sessionService.user) {\r\n this._router.navigate(['/account/easy-login']);\r\n return;\r\n }\r\n\r\n const currentEpisodeId = parseInt(localStorage.getItem(\"currentEpisode\"));\r\n console.info(`Initializing with episode id=${currentEpisodeId}`);\r\n if (currentEpisodeId > 0) {\r\n this._episodeIdSubject.next(currentEpisodeId);\r\n }\r\n this._initialize$.pipe(\r\n take(1)\r\n ).subscribe();\r\n }\r\n\r\n private readonly _tenantLanguageName$ = this._languageService.tetantLanguageName$;\r\n private readonly _allEpisodesSubject = new BehaviorSubject(undefined);\r\n private readonly _allEpisodes$ = this._allEpisodesSubject.asObservable().pipe(\r\n mergeMap(() => this._episodeService.getAllEpisodes()),\r\n shareReplay(1)\r\n );\r\n\r\n private readonly _episodeIdSubject = new BehaviorSubject(undefined);\r\n private readonly _episodeId$ = this._episodeIdSubject.asObservable().pipe(\r\n distinctUntilChanged()\r\n );\r\n private get _episodeId(): number {\r\n return this._episodeIdSubject.value;\r\n }\r\n\r\n readonly episodeOvals$ = this._episodeId$.pipe(\r\n mergeMap(episodeId => this._episodeOvalsServiceProxy.getAllDistinctEpisodeOvals(episodeId)),\r\n );\r\n\r\n private readonly _initialize$ = combineLatest([\r\n this._allEpisodes$,\r\n this._tenantLanguageName$\r\n ]).pipe(\r\n map(([allEpisodes, tenantLanguageName]) => {\r\n return allEpisodes.filter((episodes) => episodes.applicationLanguageName == tenantLanguageName);\r\n }),\r\n tap((episodes) => {\r\n this.episodes = episodes;\r\n const firstEpisodeId = episodes[0]?.id;\r\n const selectedEpisodeId = this._episodeId || firstEpisodeId;\r\n const selectedEpisode = episodes.find(episode => episode.id == selectedEpisodeId);\r\n console.info(`Set initial selected episode id=${selectedEpisodeId}`);\r\n\r\n this.selectedEpisode = selectedEpisode;\r\n // due to bug prime ng dropdown initial valud is not selected\r\n // so reset it after episodes are bound to dropdown\r\n if (selectedEpisode?.id !== firstEpisodeId) {\r\n setTimeout(() => this.selectedEpisode = selectedEpisode, 250);\r\n }\r\n })\r\n );\r\n\r\n @ViewChild('pDropdown')\r\n episodeDropdown: Dropdown;\r\n\r\n onDropdownChange($event) {\r\n const selectedEpisode: EpisodeDto = $event.value;\r\n const selectedEpisodeId = selectedEpisode.id;\r\n console.info(`Selecting episode id=${selectedEpisodeId}`);\r\n localStorage.setItem(\"currentEpisode\", `${selectedEpisodeId}`);\r\n this._episodeIdSubject.next(selectedEpisodeId);\r\n console.info(`Selected episode id=${selectedEpisodeId}`);\r\n }\r\n\r\n onDropdownClosed() {\r\n this.isEpisodesDropdownOpened = false;\r\n }\r\n\r\n onDropdownOpened() {\r\n this.isEpisodesDropdownOpened = true;\r\n }\r\n}\r\n","
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{{episodeName}}\r\n

\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n \"\"\r\n
\r\n \r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n
\r\n","import { Component, Injector, Input, ViewEncapsulation } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { EpisodeDto, EpisodeOvalsServiceProxy, OvalFilesDto } from '@shared/service-proxies/service-proxies';\r\nimport { map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\r\nimport { Language, LanguageData } from '../../language-picker-local/LanguageConsts';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n\r\n@Component({\r\n templateUrl: './oval-content-LM1.component.html',\r\n styleUrls: ['./oval-content-LM1.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'oval-content-LM1',\r\n})\r\nexport class OvalContentLM1Component extends AppComponentBase {\r\n\r\n episodes: EpisodeDto[] = [];\r\n languages: Language[] = LanguageData.languages;\r\n currentEpisodeId = localStorage.getItem(\"currentEpisode\");\r\n episodeOvalId: number;\r\n color = \"\";\r\n isMobileVersion: boolean = false;\r\n screenWidth: number = window.innerWidth;\r\n mobileVersionWidth: number = 575.98;\r\n @Input() episodeName: string=\"\";\r\n\r\n constructor(\r\n injector: Injector,\r\n private route: ActivatedRoute,\r\n private _episodeOvalsServiceProxy: EpisodeOvalsServiceProxy,\r\n ) {\r\n super(injector);\r\n this.episodeOvalId = Number(this.route.snapshot.paramMap.get('id'));\r\n }\r\n\r\n private readonly _filesSubject = new BehaviorSubject(undefined);\r\n readonly _episodeOvalFiles$ = this._filesSubject.asObservable().pipe(\r\n switchMap(() => this._episodeOvalsServiceProxy.getEpisodeOvalFiles(this.episodeOvalId)),\r\n shareReplay(1)\r\n );\r\n\r\n readonly _filesWithLevel$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files),\r\n );\r\n\r\n readonly _ovalName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.ovalName)\r\n );\r\n\r\n readonly _episodeName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.episodeTitle)\r\n );\r\n\r\n private readonly _urlSubject = new BehaviorSubject(undefined);\r\n readonly _url$ = this._urlSubject.asObservable().pipe(\r\n map((fileGuid) => `${AppConsts.remoteServiceBaseUrl}/File/GetBinaryFile?id=${fileGuid}`),\r\n tap((url) => {\r\n window.open(\r\n url,\r\n '_blank'\r\n );\r\n }\r\n ));\r\n\r\n openFile(fileGuid: string): void {\r\n this._urlSubject.next(fileGuid);\r\n this._url$.pipe(\r\n take(1),\r\n ).subscribe();\r\n }\r\n}","export class DifficultyLevel\r\n{\r\n static readonly E0= 'E0';\r\n static readonly E1= 'E1';\r\n static readonly E2= 'E2';\r\n};","
\r\n \r\n
\r\n \"\"\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{{episodeName}}\r\n

\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n
0\" class=\"LM2-files-E0 col-4\">\r\n
\r\n \"\"\r\n \"\"\r\n \r\n
\r\n
\r\n \"\"\r\n \"\"\r\n
0\" class=\"LM2-files-E1 col-4\">\r\n
\r\n \"\"\r\n \"\"\r\n \r\n
\r\n
\r\n \"\"\r\n
0\" class=\"LM2-files-E2 col-4\">\r\n
\r\n \"\"\r\n \"\"\r\n \r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n\r\n","import { Component, Injector, Input, ViewEncapsulation } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { EpisodeDto, EpisodeOvalsServiceProxy, OvalFilesDto } from '@shared/service-proxies/service-proxies';\r\nimport { map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\r\nimport { Language, LanguageData } from '../../language-picker-local/LanguageConsts';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { DifficultyLevel } from '../difficultyLevels';\r\n\r\n\r\n@Component({\r\n templateUrl: './oval-content-LM2.component.html',\r\n styleUrls: ['./oval-content-LM2.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'oval-content-LM2',\r\n})\r\nexport class OvalContentLM2Component extends AppComponentBase {\r\n\r\n episodes: EpisodeDto[] = [];\r\n languages: Language[] = LanguageData.languages;\r\n currentEpisodeId = localStorage.getItem(\"currentEpisode\");\r\n episodeOvalId: number;\r\n color = \"\";\r\n LM2_Sun=\"LM2_Sun\"\r\n isMobileVersion: boolean = false;\r\n screenWidth: number = window.innerWidth;\r\n\r\n LM2_E0:string=\"LM2-E0_desktop\";\r\n LM2_E1:string=\"LM2-E1_desktop\";\r\n LM2_E2:string=\"LM2-E2_desktop\";\r\n\r\n mobileVersionWidth: number = 575.98;\r\n @Input() episodeName: string=\"\";\r\n\r\n constructor(\r\n injector: Injector,\r\n private route: ActivatedRoute,\r\n private _episodeOvalsServiceProxy: EpisodeOvalsServiceProxy,\r\n ) {\r\n super(injector);\r\n this.episodeOvalId = Number(this.route.snapshot.paramMap.get('id'));\r\n }\r\n\r\n private readonly _filesSubject = new BehaviorSubject(undefined);\r\n readonly _episodeOvalFiles$ = this._filesSubject.asObservable().pipe(\r\n switchMap(() => this._episodeOvalsServiceProxy.getEpisodeOvalFiles(this.episodeOvalId)),\r\n shareReplay(1)\r\n );\r\n\r\n readonly _filesWithLevel$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files),\r\n );\r\n\r\n readonly _filesWithLevelE0$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files.filter((file)=>file.difficultyLevel.name==DifficultyLevel.E0)),\r\n );\r\n\r\n readonly _filesWithLevelE1$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files.filter((file)=>file.difficultyLevel.name==DifficultyLevel.E1)),\r\n );\r\n\r\n readonly _filesWithLevelE2$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files.filter((file)=>file.difficultyLevel.name==DifficultyLevel.E2)),\r\n );\r\n\r\n readonly _ovalName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.ovalName)\r\n );\r\n\r\n readonly _episodeName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.episodeTitle)\r\n );\r\n\r\n private readonly _urlSubject = new BehaviorSubject(undefined);\r\n readonly _url$ = this._urlSubject.asObservable().pipe(\r\n map((fileGuid) => `${AppConsts.remoteServiceBaseUrl}/File/GetBinaryFile?id=${fileGuid}`),\r\n\r\n tap((url) => {\r\n window.open(\r\n url,\r\n '_blank'\r\n );\r\n }\r\n ));\r\n\r\n openFile(fileGuid: string): void {\r\n this._urlSubject.next(fileGuid);\r\n this._url$.pipe(\r\n take(1),\r\n ).subscribe();\r\n }\r\n\r\n private _mobileVersionCheck() {\r\n this.isMobileVersion = this.screenWidth <= this.mobileVersionWidth;\r\n if (this.isMobileVersion) {\r\n this.LM2_Sun=\"LM2_Sun_Mobile\";\r\n this.filesImagesLM2();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this._mobileVersionCheck();\r\n }\r\n\r\n filesImagesLM2():void{\r\n this.LM2_E0=\"LM2-E0\";\r\n this.LM2_E1=\"LM2-E1\";\r\n this.LM2_E2=\"LM2-E2\";\r\n }\r\n}","
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{{episodeName}}\r\n

\r\n
\r\n
\r\n
\r\n
0\" class=\"LM3-files-E0 col-4\"> \r\n
\r\n \"\"\r\n \"\"\r\n\r\n \r\n
\r\n
\r\n
0\" class=\"LM3-files-E1 col-4\">\r\n
\r\n \"\"\r\n \"\" \r\n
\r\n
\r\n
0\" class=\"LM3-files-E2 col-4\">\r\n
\r\n \"\"\r\n \"\" \r\n
\r\n
\r\n
\r\n\r\n
\r\n \"\"\r\n \"\"\r\n
\r\n
\r\n
\r\n\r\n","import { Component, Injector, Input, ViewEncapsulation } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { EpisodeDto, EpisodeOvalsServiceProxy, OvalFilesDto } from '@shared/service-proxies/service-proxies';\r\nimport { map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\r\nimport { Language, LanguageData } from '../../language-picker-local/LanguageConsts';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { DifficultyLevel } from '../difficultyLevels';\r\n\r\n\r\n@Component({\r\n templateUrl: './oval-content-LM3.component.html',\r\n styleUrls: ['./oval-content-LM3.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'oval-content-LM3',\r\n})\r\nexport class OvalContentLM3Component extends AppComponentBase {\r\n\r\n episodes: EpisodeDto[] = [];\r\n languages: Language[] = LanguageData.languages;\r\n currentEpisodeId = localStorage.getItem(\"currentEpisode\");\r\n episodeOvalId: number;\r\n color = \"\";\r\n TreeMobile=\"LM3-Tree\";\r\n isMobileVersion: boolean = false;\r\n screenWidth: number = window.innerWidth;\r\n mobileVersionWidth: number = 575.98;\r\n\r\n LM3_E0=\"LM3-E0\";\r\n LM3_E1=\"LM3-E1\";\r\n LM3_E2=\"LM3-E2\";\r\n \r\n @Input() episodeName: string=\"\";\r\n\r\n constructor(\r\n injector: Injector,\r\n private route: ActivatedRoute,\r\n private _episodeOvalsServiceProxy: EpisodeOvalsServiceProxy,\r\n ) {\r\n super(injector);\r\n this.episodeOvalId = Number(this.route.snapshot.paramMap.get('id'));\r\n }\r\n\r\n private readonly _filesSubject = new BehaviorSubject(undefined);\r\n readonly _episodeOvalFiles$ = this._filesSubject.asObservable().pipe(\r\n switchMap(() => this._episodeOvalsServiceProxy.getEpisodeOvalFiles(this.episodeOvalId)),\r\n shareReplay(1)\r\n );\r\n\r\n readonly _filesWithLevel$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files),\r\n );\r\n\r\n readonly _filesWithLevelE0$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files.filter((file)=>file.difficultyLevel.name==DifficultyLevel.E0)),\r\n );\r\n\r\n readonly _filesWithLevelE1$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files.filter((file)=>file.difficultyLevel.name==DifficultyLevel.E1)),\r\n );\r\n\r\n readonly _filesWithLevelE2$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files.filter((file)=>file.difficultyLevel.name==DifficultyLevel.E2)),\r\n );\r\n\r\n readonly _ovalName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.ovalName)\r\n );\r\n\r\n readonly _episodeName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.episodeTitle)\r\n );\r\n\r\n private readonly _urlSubject = new BehaviorSubject(undefined);\r\n readonly _url$ = this._urlSubject.asObservable().pipe(\r\n map((fileGuid) => `${AppConsts.remoteServiceBaseUrl}/File/GetBinaryFile?id=${fileGuid}`),\r\n\r\n tap((url) => {\r\n window.open(\r\n url,\r\n '_blank'\r\n );\r\n }\r\n ));\r\n\r\n openFile(fileGuid: string): void {\r\n this._urlSubject.next(fileGuid);\r\n this._url$.pipe(\r\n take(1),\r\n ).subscribe();\r\n }\r\n\r\n private _mobileVersionCheck() {\r\n this.isMobileVersion = this.screenWidth <= this.mobileVersionWidth;\r\n if (this.isMobileVersion) {\r\n this.TreeMobile=\"LM3-Tree_Mobile\";\r\n this.filesImagesLM3();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this._mobileVersionCheck();\r\n }\r\n\r\n filesImagesLM3():void{\r\n this.LM3_E0=\"LM3-E0_mobile\";\r\n this.LM3_E1=\"LM3-E1_mobile\";\r\n this.LM3_E2=\"LM3-E2_mobile\";\r\n }\r\n}","
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{{episodeName}}\r\n

\r\n
\r\n
\r\n
\r\n
\r\n \"\"\r\n
\r\n \r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n
\r\n","import { Component, Injector, Input, ViewEncapsulation } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { EpisodeDto, EpisodeOvalsServiceProxy, OvalFileDto, OvalFilesDto } from '@shared/service-proxies/service-proxies';\r\nimport { map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\r\nimport { Language, LanguageData } from '../../language-picker-local/LanguageConsts';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n\r\n@Component({\r\n templateUrl: './oval-content-LM4.component.html',\r\n styleUrls: ['./oval-content-LM4.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'oval-content-LM4',\r\n})\r\nexport class OvalContentLM4Component extends AppComponentBase {\r\n\r\n episodes: EpisodeDto[] = [];\r\n languages: Language[] = LanguageData.languages;\r\n currentEpisodeId = localStorage.getItem(\"currentEpisode\");\r\n episodeOvalId: number;\r\n color = \"\";\r\n imageName=\"LM4_Girl\";\r\n @Input() files:OvalFileDto[]=[];\r\n @Input() episodeName: string=\"\";\r\n\r\n screenWidth: number = window.innerWidth;\r\n isMobileVersion: boolean = false;\r\n mobileVersionWidth: number = 575.98;\r\n\r\n constructor(\r\n injector: Injector,\r\n private route: ActivatedRoute,\r\n private _episodeOvalsServiceProxy: EpisodeOvalsServiceProxy,\r\n ) {\r\n super(injector);\r\n this.episodeOvalId = Number(this.route.snapshot.paramMap.get('id'));\r\n }\r\n\r\n private readonly _filesSubject = new BehaviorSubject(undefined);\r\n readonly _episodeOvalFiles$ = this._filesSubject.asObservable().pipe(\r\n switchMap(() => this._episodeOvalsServiceProxy.getEpisodeOvalFiles(this.episodeOvalId)),\r\n shareReplay(1)\r\n );\r\n\r\n readonly _filesWithLevel$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files),\r\n );\r\n\r\n readonly _episodeName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.episodeTitle)\r\n );\r\n\r\n readonly _ovalName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.ovalName)\r\n );\r\n\r\n private readonly _urlSubject = new BehaviorSubject(undefined);\r\n readonly _url$ = this._urlSubject.asObservable().pipe(\r\n map((fileGuid) => `${AppConsts.remoteServiceBaseUrl}/File/GetBinaryFile?id=${fileGuid}`),\r\n\r\n tap((url) => {\r\n window.open(\r\n url,\r\n '_blank'\r\n );\r\n }\r\n ));\r\n\r\n openFile(fileGuid: string): void {\r\n this._urlSubject.next(fileGuid);\r\n this._url$.pipe(\r\n take(1),\r\n ).subscribe();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.mobileVersionCheck();\r\n }\r\n\r\n mobileVersionCheck() {\r\n this.isMobileVersion = this.screenWidth <= this.mobileVersionWidth;\r\n\r\n if (this.isMobileVersion ) {\r\n this.imageName=\"LM4_Image\";\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n","
\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{{episodeName}}\r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n\r\n
\r\n
\r\n \"\"\r\n
\r\n \r\n
\r\n \"\"\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n","import { Component, Injector, Input, ViewEncapsulation } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { EpisodeDto, EpisodeOvalsServiceProxy, OvalFilesDto } from '@shared/service-proxies/service-proxies';\r\nimport { map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\r\nimport { Language, LanguageData } from '../../language-picker-local/LanguageConsts';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n\r\n@Component({\r\n templateUrl: './oval-content-LM5.component.html',\r\n styleUrls: ['./oval-content-LM5.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'oval-content-LM5',\r\n})\r\nexport class OvalContentLM5Component extends AppComponentBase {\r\n\r\n episodes: EpisodeDto[] = [];\r\n languages: Language[] = LanguageData.languages;\r\n currentEpisodeId = localStorage.getItem(\"currentEpisode\");\r\n episodeOvalId: number;\r\n color = \"\";\r\n @Input() episodeName: string=\"\";\r\n \r\n constructor(\r\n injector: Injector,\r\n private route: ActivatedRoute,\r\n private _episodeOvalsServiceProxy: EpisodeOvalsServiceProxy,\r\n ) {\r\n super(injector);\r\n this.episodeOvalId = Number(this.route.snapshot.paramMap.get('id'));\r\n }\r\n\r\n private readonly _filesSubject = new BehaviorSubject(undefined);\r\n readonly _episodeOvalFiles$ = this._filesSubject.asObservable().pipe(\r\n switchMap(() => this._episodeOvalsServiceProxy.getEpisodeOvalFiles(this.episodeOvalId)),\r\n shareReplay(1)\r\n );\r\n\r\n readonly _filesWithLevel$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files),\r\n );\r\n\r\n readonly _ovalName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.ovalName)\r\n );\r\n\r\n readonly _episodeName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.episodeTitle)\r\n );\r\n\r\n private readonly _urlSubject = new BehaviorSubject(undefined);\r\n readonly _url$ = this._urlSubject.asObservable().pipe(\r\n map((fileGuid) => `${AppConsts.remoteServiceBaseUrl}/File/GetBinaryFile?id=${fileGuid}`),\r\n\r\n tap((url) => {\r\n window.open(\r\n url,\r\n '_blank'\r\n );\r\n }\r\n ));\r\n\r\n openFile(fileGuid: string): void {\r\n this._urlSubject.next(fileGuid);\r\n this._url$.pipe(\r\n take(1),\r\n ).subscribe();\r\n }\r\n}\r\n\r\n\r\n\r\n","
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{{episodeName}}\r\n

\r\n
\r\n
\r\n
\r\n
\r\n \"\"\r\n
\r\n \r\n
\r\n
\r\n
\r\n","import { Component, Injector, Input, ViewEncapsulation } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { EpisodeDto, EpisodeOvalsServiceProxy, OvalFilesDto } from '@shared/service-proxies/service-proxies';\r\nimport { map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\r\nimport { Language, LanguageData } from '../../language-picker-local/LanguageConsts';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n\r\n@Component({\r\n templateUrl: './oval-content-LM6.component.html',\r\n styleUrls: ['./oval-content-LM6.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'oval-content-LM6',\r\n})\r\nexport class OvalContentLM6Component extends AppComponentBase {\r\n\r\n episodes: EpisodeDto[] = [];\r\n languages: Language[] = LanguageData.languages;\r\n currentEpisodeId = localStorage.getItem(\"currentEpisode\");\r\n episodeOvalId: number;\r\n color = \"\";\r\n isMobileVersion: boolean = false;\r\n screenWidth: number = window.innerWidth;\r\n mobileVersionWidth: number = 575.98;\r\n LearnMoreHeader=\"MillieWithFlower\";\r\n\r\n @Input() episodeName: string=\"\";\r\n \r\n constructor(\r\n injector: Injector,\r\n private route: ActivatedRoute,\r\n private _episodeOvalsServiceProxy: EpisodeOvalsServiceProxy,\r\n ) {\r\n super(injector);\r\n this.episodeOvalId = Number(this.route.snapshot.paramMap.get('id'));\r\n }\r\n\r\n private readonly _filesSubject = new BehaviorSubject(undefined);\r\n readonly _episodeOvalFiles$ = this._filesSubject.asObservable().pipe(\r\n switchMap(() => this._episodeOvalsServiceProxy.getEpisodeOvalFiles(this.episodeOvalId)),\r\n shareReplay(1)\r\n );\r\n\r\n readonly _filesWithLevel$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files),\r\n );\r\n\r\n readonly _ovalName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.ovalName)\r\n );\r\n\r\n readonly _episodeName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.episodeTitle)\r\n );\r\n\r\n private readonly _urlSubject = new BehaviorSubject(undefined);\r\n readonly _url$ = this._urlSubject.asObservable().pipe(\r\n map((fileGuid) => `${AppConsts.remoteServiceBaseUrl}/File/GetBinaryFile?id=${fileGuid}`),\r\n\r\n tap((url) => {\r\n window.open(\r\n url,\r\n '_blank'\r\n );\r\n }\r\n ));\r\n\r\n openFile(fileGuid: string): void {\r\n this._urlSubject.next(fileGuid);\r\n this._url$.pipe(\r\n take(1),\r\n ).subscribe();\r\n }\r\n\r\n private _mobileVersionCheck() {\r\n this.isMobileVersion = this.screenWidth <= this.mobileVersionWidth;\r\n if (this.isMobileVersion) {\r\n this.LearnMoreHeader=\"MillieWithFlower-mobile\";\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this._mobileVersionCheck();\r\n }\r\n}","
\r\n \r\n
\r\n {{_ovalName$ | async}}\r\n
\r\n
\r\n {{_episodeName$ | async}}\r\n
\r\n
\r\n
\r\n
\r\n {{fileWithLevel?.difficultyLevel?.name}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n","import { Component, Injector, Input, ViewEncapsulation } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { EpisodeDto, EpisodeOvalsServiceProxy, OvalFilesDto } from '@shared/service-proxies/service-proxies';\r\nimport { map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\r\nimport { Language, LanguageData } from '../../language-picker-local/LanguageConsts';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n\r\n@Component({\r\n templateUrl: './oval-content-Default.component.html',\r\n styleUrls: ['./oval-content-Default.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'oval-content-Default',\r\n})\r\nexport class OvalContentDefaultComponent extends AppComponentBase {\r\n\r\n episodes: EpisodeDto[] = [];\r\n languages: Language[] = LanguageData.languages;\r\n currentEpisodeId = localStorage.getItem(\"currentEpisode\");\r\n episodeOvalId: number;\r\n color = \"\";\r\n @Input() episodeName: string=\"\";\r\n\r\n constructor(\r\n injector: Injector,\r\n private route: ActivatedRoute,\r\n private _episodeOvalsServiceProxy: EpisodeOvalsServiceProxy,\r\n ) {\r\n super(injector);\r\n this.episodeOvalId = Number(this.route.snapshot.paramMap.get('id'));\r\n }\r\n\r\n private readonly _filesSubject = new BehaviorSubject(undefined);\r\n readonly _episodeOvalFiles$ = this._filesSubject.asObservable().pipe(\r\n switchMap(() => this._episodeOvalsServiceProxy.getEpisodeOvalFiles(this.episodeOvalId)),\r\n shareReplay(1)\r\n );\r\n\r\n readonly _filesWithLevel$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files),\r\n );\r\n\r\n readonly _ovalName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.ovalName)\r\n );\r\n\r\n readonly _episodeName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.episodeTitle)\r\n );\r\n\r\n private readonly _urlSubject = new BehaviorSubject(undefined);\r\n readonly _url$ = this._urlSubject.asObservable().pipe(\r\n map((fileGuid) => `${AppConsts.remoteServiceBaseUrl}/File/GetBinaryFile?id=${fileGuid}`),\r\n\r\n tap((url) => {\r\n window.open(\r\n url,\r\n '_blank'\r\n );\r\n }\r\n ));\r\n\r\n openFile(fileGuid: string): void {\r\n this._urlSubject.next(fileGuid);\r\n this._url$.pipe(\r\n take(1),\r\n ).subscribe();\r\n }\r\n}\r\n\r\n\r\n\r\n","\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { EpisodeDto, EpisodeOvalsServiceProxy, OvalFilesDto } from '@shared/service-proxies/service-proxies';\r\nimport { map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\r\nimport { Language, LanguageData } from '../language-picker-local/LanguageConsts';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n\r\n@Component({\r\n templateUrl: './oval-content.component.html',\r\n styleUrls: ['./oval-content.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'oval-content',\r\n})\r\nexport class OvalContentComponent extends AppComponentBase {\r\n\r\n episodes: EpisodeDto[] = [];\r\n languages: Language[] = LanguageData.languages;\r\n currentEpisodeId = localStorage.getItem(\"currentEpisode\");\r\n episodeOvalId: number;\r\n color = \"\";\r\n selectedTemplate: number;\r\n\r\n constructor(\r\n injector: Injector,\r\n private route: ActivatedRoute,\r\n private _episodeOvalsServiceProxy: EpisodeOvalsServiceProxy,\r\n ) {\r\n super(injector);\r\n this.episodeOvalId = Number(this.route.snapshot.paramMap.get('id'));\r\n }\r\n\r\n private readonly _filesSubject = new BehaviorSubject(undefined);\r\n readonly _episodeOvalFiles$ = this._filesSubject.asObservable().pipe(\r\n switchMap(() => this._episodeOvalsServiceProxy.getEpisodeOvalFiles(this.episodeOvalId)),\r\n shareReplay(1)\r\n );\r\n\r\n readonly _filesWithLevel$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.files),\r\n );\r\n\r\n readonly _ovalName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.ovalName)\r\n );\r\n\r\n readonly _determineTemplate$ = this._episodeOvalFiles$.pipe(\r\n tap((ovalFiles) => {\r\n this.determineTemplate(ovalFiles.ovalTemplate)\r\n }),\r\n );\r\n\r\n readonly _episodeName$ = this._episodeOvalFiles$.pipe(\r\n map((ovalFiles) => ovalFiles.episodeTitle)\r\n );\r\n\r\n private readonly _urlSubject = new BehaviorSubject(undefined);\r\n readonly _url$ = this._urlSubject.asObservable().pipe(\r\n map((fileGuid) => `${AppConsts.remoteServiceBaseUrl}/File/GetBinaryFile?id=${fileGuid}`),\r\n tap((url) => {\r\n window.open(\r\n url,\r\n '_blank'\r\n );\r\n }\r\n ));\r\n\r\n openFile(fileGuid: string): void {\r\n this._urlSubject.next(fileGuid);\r\n this._url$.pipe(\r\n take(1),\r\n ).subscribe();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._determineTemplate$.subscribe();\r\n this._filesWithLevel$.subscribe();\r\n }\r\n\r\n determineTemplate(key: number) {\r\n switch (key) {\r\n case 2:\r\n this.color = \"#FCE9E9\";\r\n this.selectedTemplate = 1;\r\n break;\r\n case 3:\r\n this.color = \"#FCE9FC\";\r\n this.selectedTemplate = 2;\r\n break;\r\n case 4:\r\n this.color = \"#EBE9FC\";\r\n this.selectedTemplate = 3;\r\n break;\r\n case 5:\r\n this.color = \"#E9FBFC\";\r\n this.selectedTemplate = 4;\r\n break;\r\n case 6:\r\n this.color = \"#EAFCE9\";\r\n this.selectedTemplate = 5;\r\n break;\r\n case 7:\r\n this.color = \"#FCF8E9\";\r\n this.selectedTemplate = 6;\r\n break;\r\n default:\r\n this.color = \"\";\r\n this.selectedTemplate = 7;\r\n break;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { AboutUsService } from '../about-us.service';\r\n\r\n\r\n@Component({\r\n templateUrl: './about-us-ourshow.component.html',\r\n styleUrls: ['./about-us-ourshow.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'about-us-ourshow',\r\n})\r\nexport class AboutOurShowComponent extends AppComponentBase {\r\n\r\n constructor(\r\n injector: Injector,\r\n private _aboutUsService : AboutUsService,\r\n ) {\r\n super(injector);\r\n }\r\n \r\n ngOnInit(): void {\r\n }\r\n\r\n AboutUsSlider(){\r\n this._aboutUsService.AboutUsSlider();\r\n }\r\n}\r\n","\r\n\r\n
\r\n
\r\n \"leftArrow\"\r\n
\r\n
\r\n

\r\n The “Our Show!” platform\r\n

\r\n

\r\n English is the world's language. Having a good grasp of English can dramatically improve a child's life\r\n chances,\r\n offering them a way to connect with the wider world, and opening a path to academic or career success.\r\n

\r\n

The problem:

\r\n

\r\n The best time to learn a language is during childhood. But too many kids don’t get the chance. They don’t\r\n have\r\n access to skilled, qualified, teaching – because there just aren’t enough teachers to meet the need. Many\r\n schools are under-resourced, and a lot of the teaching materials are simply dull.\r\n

\r\n

The solution:

\r\n

\r\n WordPlay’s “Our Show!” online learning platform. When kids watch the “Our Show!” animation, they watch it\r\n because it’s fun - but it’s also packed full of education. A short presentation before each episode\r\n introduces\r\n just a small amount of vocabulary and grammar. And when the characters speak, a speech bubble appears above\r\n their head – so kids can\r\n read\r\n the words, they can\r\n\r\n hear\r\n\r\n the words, and they can\r\n see\r\n the action.\r\n

\r\n

\r\n When kids read, hear, and then see someone\r\n ‘pull’\r\n , the learning process is strongly reinforced.\r\n

\r\n

\r\n And there’s also a translation available\r\n \r\n into any mother tongue\r\n \r\n , which allows kids to learn English while relying on the language they already speak.\r\n

\r\n

\r\n Finally, it doesn’t matter if a child doesn’t understand every word in an episode. They’ll understand and\r\n enjoy\r\n the story, and while some kids will pick up just a few new words, others might begin to get a feeling of how\r\n English grammar works.\r\n

\r\n

\r\n This is the process by which kids naturally learn a language. They hear a language, and they being to impute\r\n a\r\n lexical and grammatical framework.\r\n

\r\n

“Our Show!” makes learning fun, and lets kids learn at a pace that works for them, in their mother tongue.\r\n

\r\n\r\n
\r\n \"closeButton\"\r\n
\r\n
\r\n
\r\n \"leftArrow\"\r\n
\r\n
\r\n\r\n","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { AboutUsService } from '../about-us.service';\r\n\r\n\r\n@Component({\r\n templateUrl: './about-us-media.component.html',\r\n styleUrls: ['./about-us-media.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'about-us-media',\r\n})\r\nexport class AboutMediaComponent extends AppComponentBase {\r\n\r\n constructor(\r\n injector: Injector,\r\n private _aboutUsService : AboutUsService,\r\n ) {\r\n super(injector);\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n \r\n AboutUsSlider(){\r\n this._aboutUsService.AboutUsSlider();\r\n }\r\n}\r\n","\r\n\r\n
\r\n
\r\n \"leftArrow\"\r\n
\r\n
\r\n

\r\n WordPlay Media\r\n

\r\n

\r\n Based in the UK, WordPlay was founded with one goal in mind: to give kids across the planet an easy, fun, and\r\n effective way to learn English, with support in their mother-tongue.\r\n

\r\n

In doing this, we aim to support the UN’s Sustainable Development Goal #4:

\r\n \r\n

\r\n “Inclusive and equitable quality education opportunities for all.”\r\n

\r\n

\r\n WordPlay have worked with the Applied Linguistics department of Edinburgh University, and with Northumbria\r\n University’s School of Design, to develop a ground breaking platform.\r\n

\r\n

\r\n Using animation, games, outstanding additional learning materials, and instruction and narration in any mother\r\n tongue (on request), kids worldwide can learn English and have fun.\r\n

\r\n

\r\n Whether they’re working on their own, or with the guidance of a parent or teacher, the support materials in\r\n their mother tongue mean that they can learn English as a Second Language, in a way that they find fun and\r\n rewarding.\r\n

\r\n \r\n

\r\n \"When children are interested, learning happens\"\r\n

\r\n \r\n

WordPlay have received funding from:

\r\n

\r\n NorthStar Ventures, European Union Regional Development Fund (ERDF), European Investment Bank (EIB), European\r\n Regional Growth Fund, UK Research & Innovation, Innovate UK, Northern Powerhouse’s Creative Fuse North East, and\r\n additional funding from Angel Investors.\r\n

\r\n\r\n
\r\n \"closeButton\"\r\n
\r\n
\r\n
\r\n \"leftArrow\"\r\n
\r\n
\r\n\r\n","
\r\n \r\n
\r\n\r\n\r\n \r\n
\r\n
\r\n \r\n \"\"\r\n
\r\n
\r\n \r\n \"\"\r\n
\r\n
\r\n \r\n \"\"\r\n
\r\n
\r\n \r\n \"\"\r\n
\r\n
\r\n
\r\n
\r\n","import { Component, Injector, ViewEncapsulation } from '@angular/core';\r\nimport { appModuleAnimation } from '@shared/animations/routerTransition';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { AppUrlForLanguageDto, StorageServiceServiceProxy } from '@shared/service-proxies/service-proxies';\r\n\r\n@Component({\r\n templateUrl: './downloadPage.component.html',\r\n styleUrls: ['./downloadPage.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [appModuleAnimation()],\r\n selector: 'downloadPage',\r\n})\r\n\r\nexport class DownloadPageComponent extends AppComponentBase{\r\n GamesHeader: string = \"Games_Header\";\r\n urls: AppUrlForLanguageDto[];\r\n\r\n constructor(\r\n injector: Injector,\r\n private _storageService: StorageServiceServiceProxy,\r\n ) {\r\n super(injector);\r\n this._storageService.getAppUrls();\r\n }\r\n\r\n ngOnInit(): void {\r\n \r\n };\r\n\r\n readonly _urlsOfLanguages$=this._storageService.getAppUrls();\r\n}","import { NgModule } from '@angular/core';\r\nimport { NavigationEnd, NavigationStart, Router, RouterModule } from '@angular/router';\r\nimport { NgxSpinnerService } from 'ngx-spinner';\r\nimport { AppComponent } from './app.component';\r\nimport { AppRouteGuard } from './shared/common/auth/auth-route-guard';\r\nimport { HomeComponent } from './shared/layout/site/home/home.component';\r\nimport { NotificationsComponent } from './shared/layout/notifications/notifications.component';\r\nimport { AboutComponent } from './shared/layout/site/info/about-us/about-us.component';\r\nimport { ContactComponent } from './shared/layout/site/info/contact/contact.component';\r\nimport { SupportComponent } from './shared/layout/site/info/support/support.component';\r\nimport { PrivacyPolicyComponent } from './shared/layout/site/privacy-policy/privacy-policy.component';\r\nimport { OurShowComponent } from './shared/layout/site/our-show/our-show.component';\r\nimport { EpisodeComponent } from './shared/layout/site/episode/episode.component';\r\nimport { GamesComponent } from './shared/layout/site/games/games.component';\r\nimport { LearnMoreComponent } from './shared/layout/site/learn-more/learn-more.component';\r\nimport { OvalComponent } from './shared/layout/site/oval/oval';\r\nimport { OvalContentComponent } from './shared/layout/site/oval-content/oval-content.component';\r\nimport { AboutOurShowComponent } from './shared/layout/site/info/about-us-ourshow/about-us-ourshow.component';\r\nimport { AboutMediaComponent } from './shared/layout/site/info/about-us-media/about-us-media.component';\r\nimport { OvalContentDefaultComponent} from './shared/layout/site/oval-content/oval-content-Default/oval-content-Default.component';\r\nimport { OvalContentLM2Component } from './shared/layout/site/oval-content/oval-content-LM2/oval-content-LM2.component';\r\nimport { OvalContentLM3Component } from './shared/layout/site/oval-content/oval-content-LM3/oval-content-LM3.component';\r\nimport { OvalContentLM4Component } from './shared/layout/site/oval-content/oval-content-LM4/oval-content-LM4.component';\r\nimport { OvalContentLM5Component } from './shared/layout/site/oval-content/oval-content-LM5/oval-content-LM5.component';\r\nimport { OvalContentLM6Component } from './shared/layout/site/oval-content/oval-content-LM6/oval-content-LM6.component';\r\nimport { OvalContentLM1Component } from './shared/layout/site/oval-content/oval-content-LM1/oval-content-LM1.component';\r\nimport { DownloadPageComponent } from './shared/layout/site/downloadPage/downloadPage.component';\r\n\r\n@NgModule({\r\n imports: [\r\n RouterModule.forChild([\r\n {\r\n path: 'app',\r\n component: AppComponent,\r\n // canActivate: [AppRouteGuard],\r\n // canActivateChild: [AppRouteGuard],\r\n children: [\r\n {\r\n path: '',\r\n children: [\r\n { path: 'home', component: HomeComponent },\r\n { path: 'info/aboutUs', component: AboutComponent },\r\n { path: 'info/aboutOurshow', component: AboutOurShowComponent },\r\n { path: 'info/aboutMedia', component: AboutMediaComponent },\r\n { path: 'info/contact', component: ContactComponent },\r\n { path: 'info/support', component: SupportComponent },\r\n { path: 'learn-more', component: LearnMoreComponent, canActivate: [AppRouteGuard], canActivateChild:[AppRouteGuard]},\r\n { path: 'privacy-policy', component: PrivacyPolicyComponent },\r\n { path: 'episodes', component: OurShowComponent, canActivate: [AppRouteGuard]},\r\n { path: 'games', component: GamesComponent },\r\n { path: 'url-download-page', component: DownloadPageComponent},\r\n { path: 'episode/:id', component: EpisodeComponent, canActivate: [AppRouteGuard]},\r\n { path: 'oval-content/:id', component: OvalContentComponent, canActivate: [AppRouteGuard]},\r\n { path: 'oval-content-LM1/:id', component: OvalContentLM1Component, canActivate: [AppRouteGuard]},\r\n { path: 'oval-content-LM2/:id', component: OvalContentLM2Component, canActivate: [AppRouteGuard]},\r\n { path: 'oval-content-LM3/:id', component: OvalContentLM3Component, canActivate: [AppRouteGuard]},\r\n { path: 'oval-content-LM4/:id', component: OvalContentLM4Component, canActivate: [AppRouteGuard]},\r\n { path: 'oval-content-LM5/:id', component: OvalContentLM5Component, canActivate: [AppRouteGuard]},\r\n { path: 'oval-content-LM6/:id', component: OvalContentLM6Component, canActivate: [AppRouteGuard]},\r\n { path: 'oval-content-Default/:id', component: OvalContentDefaultComponent, canActivate: [AppRouteGuard]},\r\n { path: 'notifications', component: NotificationsComponent },\r\n { path: '', redirectTo: 'home', pathMatch: 'full' },\r\n ],\r\n },\r\n {\r\n path: 'main',\r\n loadChildren: () => import('app/main/main.module').then((m) => m.MainModule), //Lazy load main module\r\n data: { preload: true },\r\n },\r\n {\r\n path: 'admin',\r\n loadChildren: () => import('app/admin/admin.module').then((m) => m.AdminModule), //Lazy load admin module\r\n data: { preload: true },\r\n canLoad: [AppRouteGuard],\r\n },\r\n {\r\n path: '**',\r\n redirectTo: 'home',\r\n },\r\n ],\r\n },\r\n ]),\r\n ],\r\n exports: [RouterModule],\r\n})\r\nexport class AppRoutingModule {\r\n constructor(private router: Router, private spinnerService: NgxSpinnerService) {\r\n router.events.subscribe((event) => {\r\n if (event instanceof NavigationStart) {\r\n spinnerService.show();\r\n }\r\n\r\n if (event instanceof NavigationEnd) {\r\n document.querySelector('meta[property=og\\\\:url').setAttribute('content', window.location.href);\r\n spinnerService.hide();\r\n }\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { EpisodesServiceProxy } from '@shared/service-proxies/service-proxies';\r\nimport { map as _map, filter as _filter } from 'lodash-es';\r\nimport Swal from 'sweetalert2';\r\nimport { Language, LanguageData } from './shared/layout/site/language-picker-local/LanguageConsts';\r\n\r\n@Injectable()\r\nexport class EpisodeGuardService {\r\n\r\n languages: Language[] = LanguageData.languages;\r\n nativeIndex: number = 0;\r\n popUped: boolean = false;\r\n\r\n constructor(\r\n private _router: Router,\r\n private _episodeService: EpisodesServiceProxy,\r\n ) {\r\n\r\n }\r\n\r\n nextEpisode(): void {\r\n var goingToEpisode = this._router.url.includes(\"/episode/\");\r\n if (goingToEpisode) {\r\n var routing = this._router.url;\r\n var goingId = Number(routing?.substring(routing.length - 2, routing.length));\r\n if (isNaN(goingId)) {\r\n goingId = Number(routing?.substring(routing.length - 1, routing.length));\r\n }\r\n this._episodeService.getCurrentEpisodeStatus(goingId).subscribe((result) => {\r\n if (result.mustFinishEpisodeId !== 0 && result.mustFinishEpisodeId !== null\r\n && result.mustFinishEpisodeId !== undefined && !this.popUped) {\r\n this.episodePopUp(result.mustFinishEpisodeId);\r\n this.popUped = true;\r\n }\r\n })\r\n }\r\n }\r\n\r\n episodePopUp(id: number): void {\r\n Swal.fire({\r\n title: `The episode is not available`,\r\n text: 'Please finish watching the previous episode and submit the form',\r\n icon: 'warning',\r\n showCancelButton: false,\r\n confirmButtonColor: '#50f8ac',\r\n focusCancel: true,\r\n confirmButtonText: 'OK',\r\n }).then((result) => {\r\n this._router.navigate(['/app/episode', id]);\r\n setTimeout(() => {\r\n this.popUped = false;\r\n location.reload();\r\n });\r\n\r\n if (result.isConfirmed) {\r\n } else {\r\n this._router.navigate(['/app/episode', id]);\r\n setTimeout(() => {\r\n this.popUped = false;\r\n location.reload();\r\n });\r\n }\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { map as _map, filter as _filter } from 'lodash-es';\r\nimport { ViewportScroller } from '@angular/common';\r\nimport { filter } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class RouteService {\r\n\r\n constructor(\r\n private router: Router,\r\n private viewPortScroller: ViewportScroller\r\n ) {\r\n this.router.events.pipe(\r\n filter(event => event instanceof NavigationEnd))\r\n .subscribe(() => this.viewPortScroller.scrollToPosition([0, 0]));\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class SessionService {\r\n isSidebarVisible: boolean;\r\n currentUserToken: string = \"\";\r\n currentUserTokenValue: Subject = new Subject();\r\n\r\n constructor() {\r\n this.currentUserTokenValue.subscribe((value) => {\r\n this.currentUserToken = value\r\n });\r\n }\r\n \r\n setData(data: string) {\r\n this.currentUserTokenValue.next(data);\r\n }\r\n\r\n getData(): string {\r\n var current = localStorage.getItem(\"WordPlay/abpzerotemplate_local_storage/enc_auth_token\");\r\n if (current !== null && current !== undefined) {\r\n return current;\r\n }\r\n return this.currentUserToken;\r\n }\r\n}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule, HttpClientJsonpModule } from '@angular/common/http';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AppRoutingModule } from '@app/app-routing.module';\r\nimport { AppBsModalModule } from '@shared/common/appBsModal/app-bs-modal.module';\r\nimport { ServiceProxyModule } from '@shared/service-proxies/service-proxy.module';\r\nimport { UtilsModule } from '@shared/utils/utils.module';\r\nimport { TextMaskModule } from 'angular2-text-mask';\r\nimport { FileUploadModule } from 'ng2-file-upload';\r\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\r\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\r\nimport { ModalModule } from 'ngx-bootstrap/modal';\r\nimport { PopoverModule } from 'ngx-bootstrap/popover';\r\nimport { TabsModule } from 'ngx-bootstrap/tabs';\r\nimport { ImageCropperModule } from 'ngx-image-cropper';\r\nimport { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';\r\nimport { NgxSpinnerModule } from 'ngx-spinner';\r\nimport { AutoCompleteModule } from 'primeng/autocomplete';\r\nimport { PaginatorModule } from 'primeng/paginator';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { TableModule } from 'primeng/table';\r\nimport { AppCommonModule } from './common/app-common.module';\r\nimport { ThemesLayoutBaseComponent } from './layout/themes/themes-layout-base.component';\r\n\r\nconst imports = [\r\n CommonModule,\r\n FormsModule,\r\n HttpClientModule,\r\n HttpClientJsonpModule,\r\n ModalModule,\r\n TabsModule,\r\n BsDropdownModule,\r\n PopoverModule,\r\n BsDatepickerModule,\r\n AppCommonModule,\r\n FileUploadModule,\r\n AppRoutingModule,\r\n UtilsModule,\r\n ServiceProxyModule,\r\n TableModule,\r\n PaginatorModule,\r\n ProgressBarModule,\r\n PerfectScrollbarModule,\r\n TextMaskModule,\r\n ImageCropperModule,\r\n AutoCompleteModule,\r\n NgxSpinnerModule,\r\n AppBsModalModule,\r\n];\r\n\r\n@NgModule({\r\n imports: [...imports],\r\n exports: [...imports],\r\n declarations: [ThemesLayoutBaseComponent],\r\n})\r\nexport class AppSharedModule {}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { AppLocalizationService } from '@app/shared/common/localization/app-localization.service';\r\nimport { AppNavigationService } from '@app/shared/layout/nav/app-navigation.service';\r\nimport { WordPlayCommonModule } from '@shared/common/common.module';\r\nimport { UtilsModule } from '@shared/utils/utils.module';\r\nimport { ModalModule } from 'ngx-bootstrap/modal';\r\nimport { TabsModule } from 'ngx-bootstrap/tabs';\r\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\r\nimport {\r\n BsDatepickerModule,\r\n BsDatepickerConfig,\r\n BsDaterangepickerConfig,\r\n BsLocaleService,\r\n} from 'ngx-bootstrap/datepicker';\r\nimport { PaginatorModule } from 'primeng/paginator';\r\nimport { TableModule } from 'primeng/table';\r\nimport { AppAuthService } from './auth/app-auth.service';\r\nimport { AppRouteGuard } from './auth/auth-route-guard';\r\nimport { CommonLookupModalComponent } from './lookup/common-lookup-modal.component';\r\nimport { EntityTypeHistoryModalComponent } from './entityHistory/entity-type-history-modal.component';\r\nimport { EntityChangeDetailModalComponent } from './entityHistory/entity-change-detail-modal.component';\r\nimport { DateRangePickerInitialValueSetterDirective } from './timing/date-range-picker-initial-value.directive';\r\nimport { DatePickerInitialValueSetterDirective } from './timing/date-picker-initial-value.directive';\r\nimport { DateTimeService } from './timing/date-time.service';\r\nimport { TimeZoneComboComponent } from './timing/timezone-combo.component';\r\nimport { NgxBootstrapDatePickerConfigService } from 'assets/ngx-bootstrap/ngx-bootstrap-datepicker-config.service';\r\nimport { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';\r\nimport { CountoModule } from 'angular2-counto';\r\nimport { AppBsModalModule } from '@shared/common/appBsModal/app-bs-modal.module';\r\nimport { SingleLineStringInputTypeComponent } from './input-types/single-line-string-input-type/single-line-string-input-type.component';\r\nimport { ComboboxInputTypeComponent } from './input-types/combobox-input-type/combobox-input-type.component';\r\nimport { CheckboxInputTypeComponent } from './input-types/checkbox-input-type/checkbox-input-type.component';\r\nimport { MultipleSelectComboboxInputTypeComponent } from './input-types/multiple-select-combobox-input-type/multiple-select-combobox-input-type.component';\r\nimport { AutoCompleteModule } from 'primeng/autocomplete';\r\nimport { PasswordInputWithShowButtonComponent } from './password-input-with-show-button/password-input-with-show-button.component';\r\nimport { KeyValueListManagerComponent } from './key-value-list-manager/key-value-list-manager.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n ModalModule.forRoot(),\r\n UtilsModule,\r\n WordPlayCommonModule,\r\n TableModule,\r\n PaginatorModule,\r\n TabsModule.forRoot(),\r\n BsDropdownModule.forRoot(),\r\n BsDatepickerModule.forRoot(),\r\n PerfectScrollbarModule,\r\n CountoModule,\r\n AppBsModalModule,\r\n AutoCompleteModule,\r\n ],\r\n declarations: [\r\n TimeZoneComboComponent,\r\n CommonLookupModalComponent,\r\n EntityTypeHistoryModalComponent,\r\n EntityChangeDetailModalComponent,\r\n DateRangePickerInitialValueSetterDirective,\r\n DatePickerInitialValueSetterDirective,\r\n SingleLineStringInputTypeComponent,\r\n ComboboxInputTypeComponent,\r\n CheckboxInputTypeComponent,\r\n MultipleSelectComboboxInputTypeComponent,\r\n PasswordInputWithShowButtonComponent,\r\n KeyValueListManagerComponent,\r\n ],\r\n exports: [\r\n TimeZoneComboComponent,\r\n CommonLookupModalComponent,\r\n EntityTypeHistoryModalComponent,\r\n EntityChangeDetailModalComponent,\r\n DateRangePickerInitialValueSetterDirective,\r\n DatePickerInitialValueSetterDirective,\r\n PasswordInputWithShowButtonComponent,\r\n KeyValueListManagerComponent,\r\n ],\r\n providers: [\r\n DateTimeService,\r\n AppLocalizationService,\r\n AppNavigationService,\r\n { provide: BsDatepickerConfig, useFactory: NgxBootstrapDatePickerConfigService.getDatepickerConfig },\r\n { provide: BsDaterangepickerConfig, useFactory: NgxBootstrapDatePickerConfigService.getDaterangepickerConfig },\r\n { provide: BsLocaleService, useFactory: NgxBootstrapDatePickerConfigService.getDatepickerLocale },\r\n ]\r\n})\r\nexport class AppCommonModule {\r\n static forRoot(): ModuleWithProviders {\r\n return {\r\n ngModule: AppCommonModule,\r\n providers: [AppAuthService, AppRouteGuard],\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { XmlHttpRequestHelper } from '@shared/helpers/XmlHttpRequestHelper';\r\nimport { LocalStorageService } from '@shared/utils/local-storage.service';\r\n\r\n@Injectable()\r\nexport class AppAuthService {\r\n logout(reload?: boolean, returnUrl?: string): void {\r\n debugger;\r\n let customHeaders = {\r\n [abp.multiTenancy.tenantIdCookieName]: abp.multiTenancy.getTenantIdCookie(),\r\n Authorization: 'Bearer ' + abp.auth.getToken(),\r\n };\r\n\r\n XmlHttpRequestHelper.ajax(\r\n 'GET',\r\n AppConsts.remoteServiceBaseUrl + '/api/TokenAuth/LogOut',\r\n customHeaders,\r\n null,\r\n () => {\r\n abp.auth.clearToken();\r\n abp.auth.clearRefreshToken();\r\n new LocalStorageService().removeItem(AppConsts.authorization.encrptedAuthTokenName, () => {\r\n if (reload !== false) {\r\n if (returnUrl) {\r\n location.href = returnUrl;\r\n } else {\r\n location.href = '';\r\n }\r\n }\r\n });\r\n }\r\n );\r\n }\r\n}\r\n","import { PermissionCheckerService, RefreshTokenService } from 'abp-ng2-module';\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n CanActivate,\r\n CanActivateChild,\r\n CanLoad,\r\n Router,\r\n RouterStateSnapshot,\r\n} from '@angular/router';\r\nimport { AppSessionService } from '@shared/common/session/app-session.service';\r\nimport { UrlHelper } from '@shared/helpers/UrlHelper';\r\nimport { Observable } from 'rxjs/internal/Observable';\r\nimport { of, Subject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class AppRouteGuard implements CanActivate, CanActivateChild, CanLoad {\r\n constructor(\r\n private _permissionChecker: PermissionCheckerService,\r\n private _router: Router,\r\n private _sessionService: AppSessionService,\r\n private _refreshTokenService: RefreshTokenService\r\n ) {}\r\n\r\n canActivateInternal(data: any, state: RouterStateSnapshot): Observable {\r\n if (UrlHelper.isInstallUrl(location.href)) {\r\n return of(true);\r\n }\r\n\r\n if (UrlHelper.isDownloadUrl(location.href)) {\r\n return of(true);\r\n }\r\n\r\n if (!this._sessionService.user) {\r\n let sessionObservable = new Subject();\r\n\r\n this._refreshTokenService.tryAuthWithRefreshToken().subscribe(\r\n (autResult: boolean) => {\r\n if (autResult) {\r\n sessionObservable.next(true);\r\n sessionObservable.complete();\r\n location.reload();\r\n } else {\r\n sessionObservable.next(false);\r\n sessionObservable.complete();\r\n this._router.navigate(['/account/easy-login']);\r\n }\r\n },\r\n (error) => {\r\n sessionObservable.next(false);\r\n sessionObservable.complete();\r\n this._router.navigate(['/account/easy-login']);\r\n }\r\n );\r\n return sessionObservable;\r\n }\r\n\r\n if (!data || !data['permission']) {\r\n return of(true);\r\n }\r\n\r\n if (this._permissionChecker.isGranted(data['permission'])) {\r\n return of(true);\r\n }\r\n\r\n this._router.navigate([this.selectBestRoute()]);\r\n return of(false);\r\n }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n return this.canActivateInternal(route.data, state);\r\n }\r\n\r\n canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n return this.canActivate(route, state);\r\n }\r\n\r\n canLoad(route: any): Observable | Promise | boolean {\r\n return this.canActivateInternal(route.data, null);\r\n }\r\n\r\n selectBestRoute(): string {\r\n if (!this._sessionService.user) {\r\n return '/account/login';\r\n }\r\n\r\n if (this._permissionChecker.isGranted('Pages.Administration.Host.Dashboard')) {\r\n return '/app/admin/hostDashboard';\r\n }\r\n\r\n if (this._permissionChecker.isGranted('Pages.Tenant.Dashboard')) {\r\n return '/app/main/dashboard';\r\n }\r\n\r\n if (this._permissionChecker.isGranted('Pages.Tenants')) {\r\n return '/app/admin/tenants';\r\n }\r\n\r\n if (this._permissionChecker.isGranted('Pages.Administration.Users')) {\r\n return '/app/admin/users';\r\n }\r\n\r\n if(this._sessionService.user.easilyLoggedIn)\r\n {\r\n return '/app/home';\r\n }\r\n\r\n return '/app/home';\r\n }\r\n}\r\n","import { LocalizationService } from 'abp-ng2-module';\r\nimport { Injectable } from '@angular/core';\r\nimport { AppConsts } from '@shared/AppConsts';\r\n\r\n@Injectable()\r\nexport class AppLocalizationService extends LocalizationService {\r\n l(key: string, ...args: any[]): string {\r\n args.unshift(key);\r\n args.unshift(AppConsts.localization.defaultLocalizationSourceName);\r\n return this.ls.apply(this, args);\r\n }\r\n\r\n ls(sourcename: string, key: string, ...args: any[]): string {\r\n let localizedText = this.localize(key, sourcename);\r\n\r\n if (!localizedText) {\r\n localizedText = key;\r\n }\r\n\r\n if (!args || !args.length) {\r\n return localizedText;\r\n }\r\n\r\n args.unshift(localizedText);\r\n return abp.utils.formatString.apply(this, args);\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n

\r\n {{ options.title }}\r\n

\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {{ 'Select' | localize }}\r\n \r\n \r\n {{ 'Name' | localize }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ 'Name' | localize }}\r\n {{ record.name }}\r\n \r\n \r\n \r\n \r\n
\r\n {{ 'NoData' | localize }}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Component, EventEmitter, Injector, Output, ViewChild } from '@angular/core';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { NameValueDto, NameValueDtoPagedResultDto } from '@shared/service-proxies/service-proxies';\r\nimport { ModalDirective } from 'ngx-bootstrap/modal';\r\nimport { LazyLoadEvent } from 'primeng/api';\r\nimport { Paginator } from 'primeng/paginator';\r\nimport { Table } from 'primeng/table';\r\nimport { Observable } from 'rxjs';\r\nimport { merge as _merge } from 'lodash-es';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\nexport interface ICommonLookupModalOptions {\r\n title?: string;\r\n isFilterEnabled?: boolean;\r\n dataSource: (\r\n skipCount: number,\r\n maxResultCount: number,\r\n filter: string,\r\n tenantId?: number,\r\n excludeCurrentUser?: boolean\r\n ) => Observable;\r\n canSelect?: (item: NameValueDto) => boolean | Observable;\r\n loadOnStartup?: boolean;\r\n pageSize?: number;\r\n}\r\n\r\n//For more modal options http://valor-software.com/ngx-bootstrap/#/modals#modal-directive\r\n\r\n@Component({\r\n selector: 'commonLookupModal',\r\n templateUrl: './common-lookup-modal.component.html',\r\n})\r\nexport class CommonLookupModalComponent extends AppComponentBase {\r\n static defaultOptions: ICommonLookupModalOptions = {\r\n dataSource: undefined,\r\n canSelect: () => true,\r\n loadOnStartup: true,\r\n isFilterEnabled: true,\r\n pageSize: AppConsts.grid.defaultPageSize,\r\n };\r\n\r\n @Output() itemSelected: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild('modal', { static: true }) modal: ModalDirective;\r\n @ViewChild('dataTable', { static: true }) dataTable: Table;\r\n @ViewChild('paginator', { static: true }) paginator: Paginator;\r\n\r\n options: ICommonLookupModalOptions = _merge({});\r\n\r\n isShown = false;\r\n isInitialized = false;\r\n filterText = '';\r\n excludeCurrentUser = true;\r\n tenantId?: number;\r\n\r\n constructor(injector: Injector) {\r\n super(injector);\r\n }\r\n\r\n configure(options: ICommonLookupModalOptions): void {\r\n this.options = _merge(\r\n {},\r\n CommonLookupModalComponent.defaultOptions,\r\n { title: this.l('SelectAnItem') },\r\n options\r\n );\r\n }\r\n\r\n show(): void {\r\n if (!this.options) {\r\n throw Error(\r\n 'Should call CommonLookupModalComponent.configure once before CommonLookupModalComponent.show!'\r\n );\r\n }\r\n\r\n this.modal.show();\r\n }\r\n\r\n refreshTable(): void {\r\n this.paginator.changePage(this.paginator.getPage());\r\n }\r\n\r\n close(): void {\r\n this.modal.hide();\r\n }\r\n\r\n shown(): void {\r\n this.isShown = true;\r\n this.getRecordsIfNeeds(null);\r\n }\r\n\r\n getRecordsIfNeeds(event?: LazyLoadEvent): void {\r\n if (!this.isShown) {\r\n return;\r\n }\r\n\r\n if (!this.options.loadOnStartup && !this.isInitialized) {\r\n return;\r\n }\r\n\r\n this.getRecords(event);\r\n this.isInitialized = true;\r\n }\r\n\r\n getRecords(event?: LazyLoadEvent): void {\r\n const maxResultCount = this.primengTableHelper.getMaxResultCount(this.paginator, event);\r\n const skipCount = this.primengTableHelper.getSkipCount(this.paginator, event);\r\n if (this.primengTableHelper.shouldResetPaging(event)) {\r\n this.paginator.changePage(0);\r\n\r\n if (this.primengTableHelper.records && this.primengTableHelper.records.length > 0) {\r\n return;\r\n }\r\n }\r\n\r\n this.primengTableHelper.showLoadingIndicator();\r\n\r\n this.options\r\n .dataSource(skipCount, maxResultCount, this.filterText, this.tenantId, this.excludeCurrentUser)\r\n .pipe(finalize(() => this.primengTableHelper.hideLoadingIndicator()))\r\n .subscribe((result) => {\r\n this.primengTableHelper.totalRecordsCount = result.totalCount;\r\n this.primengTableHelper.records = result.items;\r\n this.primengTableHelper.hideLoadingIndicator();\r\n });\r\n }\r\n\r\n selectItem(item: NameValueDto) {\r\n const boolOrPromise = this.options.canSelect(item);\r\n if (!boolOrPromise) {\r\n return;\r\n }\r\n\r\n if (boolOrPromise === true) {\r\n this.itemSelected.emit(item);\r\n this.close();\r\n return;\r\n }\r\n\r\n //assume as observable\r\n (boolOrPromise as Observable).subscribe((result) => {\r\n if (result) {\r\n this.itemSelected.emit(item);\r\n this.close();\r\n }\r\n });\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n \r\n {{ title }}\r\n \r\n \r\n {{ title }}\r\n \r\n \r\n {{ title }}\r\n \r\n \r\n {{ title }}\r\n \r\n \r\n {{ title }}\r\n \r\n \r\n {{ title }}\r\n \r\n
\r\n
\r\n {{ description }}\r\n
\r\n 0\"\r\n class=\"subheader-separator subheader-separator-ver mt-2 mb-2 me-4 bg-gray-200\"\r\n >
\r\n 0\"\r\n class=\"breadcrumb breadcrumb-transparent breadcrumb-dot fw-bold p-0 my-2 fs-sm\"\r\n >\r\n
  • \r\n \r\n {{ breadcrumbItem.text }}\r\n \r\n {{ breadcrumbItem.text }}\r\n
  • \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n","import { Component, Injector, Input } from '@angular/core';\r\nimport { NavigationExtras, Router } from '@angular/router';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\n\r\nexport class BreadcrumbItem {\r\n text: string;\r\n routerLink?: string;\r\n navigationExtras?: NavigationExtras;\r\n\r\n constructor(text: string, routerLink?: string, navigationExtras?: NavigationExtras) {\r\n this.text = text;\r\n this.routerLink = routerLink;\r\n this.navigationExtras = navigationExtras;\r\n }\r\n\r\n isLink(): boolean {\r\n return !!this.routerLink;\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'sub-header',\r\n templateUrl: './sub-header.component.html',\r\n})\r\nexport class SubHeaderComponent extends AppComponentBase {\r\n @Input() title: string;\r\n @Input() description: string;\r\n @Input() breadcrumbs: BreadcrumbItem[];\r\n\r\n constructor(private _router: Router, injector: Injector) {\r\n super(injector);\r\n }\r\n\r\n goToBreadcrumb(breadcrumb: BreadcrumbItem): void {\r\n if (!breadcrumb.routerLink) {\r\n return;\r\n }\r\n\r\n if (breadcrumb.navigationExtras) {\r\n this._router.navigate([breadcrumb.routerLink], breadcrumb.navigationExtras);\r\n } else {\r\n this._router.navigate([breadcrumb.routerLink]);\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { SubHeaderComponent } from './sub-header.component';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [SubHeaderComponent],\r\n exports: [SubHeaderComponent],\r\n})\r\nexport class SubheaderModule {}\r\n","import { Injectable } from '@angular/core';\r\nimport { AppLocalizationService } from '@app/shared/common/localization/app-localization.service';\r\nimport { DateTime } from 'luxon';\r\n\r\n@Injectable()\r\nexport class DateTimeService {\r\n constructor(private _appLocalizationService: AppLocalizationService) { }\r\n\r\n createDateRangePickerOptions(): any {\r\n let options = {\r\n locale: {\r\n format: 'L',\r\n applyLabel: this._appLocalizationService.l('Apply'),\r\n cancelLabel: this._appLocalizationService.l('Cancel'),\r\n customRangeLabel: this._appLocalizationService.l('CustomRange'),\r\n },\r\n min: this.fromISODateString('2015-05-01'),\r\n minDate: this.fromISODateString('2015-05-01'),\r\n max: this.getDate(),\r\n maxDate: this.getDate(),\r\n opens: 'left',\r\n ranges: {},\r\n };\r\n\r\n options.ranges[this._appLocalizationService.l('Today')] = [this.getStartOfDay(), this.getEndOfDay()];\r\n options.ranges[this._appLocalizationService.l('Yesterday')] = [\r\n this.minusDays(this.getStartOfDay(), 1),\r\n this.minusDays(this.getEndOfDay(), 1),\r\n ];\r\n options.ranges[this._appLocalizationService.l('Last7Days')] = [\r\n this.minusDays(this.getStartOfDay(), 6),\r\n this.getEndOfDay(),\r\n ];\r\n options.ranges[this._appLocalizationService.l('Last30Days')] = [\r\n this.minusDays(this.getStartOfDay(), 29),\r\n this.getEndOfDay(),\r\n ];\r\n options.ranges[this._appLocalizationService.l('ThisMonth')] = [\r\n this.getDate().startOf('month'),\r\n this.getDate().endOf('month'),\r\n ];\r\n options.ranges[this._appLocalizationService.l('LastMonth')] = [\r\n this.getDate().startOf('month').minus({ months: 1 }),\r\n this.getDate().endOf('month').minus({ months: 1 }),\r\n ];\r\n\r\n return options;\r\n }\r\n\r\n getDate(): DateTime {\r\n if (abp.clock.provider.supportsMultipleTimezone) {\r\n return DateTime.local().setZone(abp.timing.timeZoneInfo.iana.timeZoneId);\r\n } else {\r\n return DateTime.local();\r\n }\r\n }\r\n\r\n getUTCDate(): DateTime {\r\n return DateTime.utc();\r\n }\r\n\r\n getYear(): number {\r\n return this.getDate().year;\r\n }\r\n\r\n getStartOfDay(): DateTime {\r\n return this.getDate().startOf('day');\r\n }\r\n\r\n getStartOfWeek(): DateTime {\r\n return this.getDate().startOf('week');\r\n }\r\n\r\n getStartOfDayForDate(date: DateTime | Date): DateTime {\r\n if (!date) {\r\n return date as DateTime;\r\n }\r\n\r\n if (date instanceof Date) {\r\n return this.getStartOfDayForDate(this.fromJSDate(date));\r\n }\r\n\r\n return date.startOf('day');\r\n }\r\n\r\n getStartOfDayMinusDays(daysFromNow: number): DateTime {\r\n let date = this.getDate();\r\n let newDate = this.minusDays(date, daysFromNow);\r\n return this.getStartOfDayForDate(newDate);\r\n }\r\n\r\n getEndOfDay(): DateTime {\r\n return this.getDate().endOf('day');\r\n }\r\n\r\n getEndOfDayForDate(date: DateTime | Date): DateTime {\r\n if (!date) {\r\n return date as DateTime;\r\n }\r\n\r\n if (date instanceof Date) {\r\n return this.getEndOfDayForDate(this.fromJSDate(date));\r\n }\r\n\r\n return date.endOf('day');\r\n }\r\n\r\n getEndOfDayPlusDays(daysFromNow: number): DateTime {\r\n let date = this.getDate();\r\n let newDate = this.plusDays(date, daysFromNow);\r\n return this.getEndOfDayForDate(newDate);\r\n }\r\n\r\n getEndOfDayMinusDays(daysFromNow: number): DateTime {\r\n let date = this.getDate();\r\n let newDate = this.minusDays(date, daysFromNow);\r\n return this.getEndOfDayForDate(newDate);\r\n }\r\n\r\n plusDays(date: DateTime | Date, dayCount: number): DateTime {\r\n if (date instanceof Date) {\r\n return this.plusDays(this.fromJSDate(date), dayCount);\r\n }\r\n\r\n return date.plus({ days: dayCount });\r\n }\r\n\r\n plusSeconds(date: DateTime, seconds: number) {\r\n if (!date) {\r\n return date;\r\n }\r\n\r\n if (date instanceof Date) {\r\n return this.plusSeconds(this.fromJSDate(date), seconds);\r\n }\r\n\r\n return date.plus({ seconds: seconds });\r\n }\r\n\r\n minusDays(date: DateTime, dayCount: number): DateTime {\r\n return date.minus({ days: dayCount });\r\n }\r\n\r\n fromISODateString(date: string): DateTime {\r\n return DateTime.fromISO(date);\r\n }\r\n\r\n formatISODateString(dateText: string, format: string): string {\r\n let date = this.fromISODateString(dateText);\r\n return date.toFormat(format);\r\n }\r\n\r\n formatJSDate(jsDate: Date, format: string): string {\r\n let date = DateTime.fromJSDate(jsDate);\r\n return date.toFormat(format);\r\n }\r\n\r\n formatDate(date: DateTime | Date, format: string): string {\r\n if (date instanceof Date) {\r\n return this.formatDate(this.fromJSDate(date), format);\r\n }\r\n\r\n return date.toFormat(format);\r\n }\r\n\r\n getDiffInSeconds(maxDate: DateTime | Date, minDate: DateTime | Date) {\r\n if (maxDate instanceof Date && minDate instanceof Date) {\r\n return this.getDiffInSeconds(this.fromJSDate(maxDate), this.fromJSDate(minDate));\r\n }\r\n\r\n return (maxDate as DateTime).diff(minDate as DateTime, 'seconds');\r\n }\r\n\r\n createJSDate(year: number, month: number, day: number): Date {\r\n return this.createDate(year, month, day).toJSDate();\r\n }\r\n\r\n createDate(year: number, month: number, day: number): DateTime {\r\n if (abp.clock.provider.supportsMultipleTimezone) {\r\n return DateTime.utc(year, month + 1, day);\r\n } else {\r\n return DateTime.local(year, month + 1, day);\r\n }\r\n }\r\n\r\n createUtcDate(year: number, month: number, day: number): DateTime {\r\n return DateTime.utc(year, month + 1, day);\r\n }\r\n\r\n toUtcDate(date: DateTime | Date): DateTime {\r\n if (date instanceof Date) {\r\n return this.createUtcDate(date.getFullYear(), date.getMonth(), date.getDate());\r\n }\r\n\r\n return (date as DateTime).toUTC();\r\n }\r\n\r\n fromJSDate(date: Date): DateTime {\r\n return DateTime.fromJSDate(date);\r\n }\r\n\r\n fromNow(date: DateTime | Date): string {\r\n if (date instanceof Date) {\r\n return this.fromNow(this.fromJSDate(date));\r\n }\r\n\r\n return date.toRelative();\r\n }\r\n\r\n getTimezoneOffset(ianaTimezoneId: string): number {\r\n var hourAndMinuteOffset = DateTime.fromJSDate(new Date(), { zone: ianaTimezoneId }).toFormat('ZZ');\r\n var multiplier = hourAndMinuteOffset[0] == '-' ? -1 : +1;\r\n var hourParts = hourAndMinuteOffset.replace('-','').replace('+','').split(':');\r\n var hourOffset = hourParts[0];\r\n var minuteOffset = hourParts[1];\r\n return multiplier * (parseInt(hourOffset) * 60 + parseInt(minuteOffset));\r\n }\r\n\r\n // only changes timezone of given date without changing the date itself\r\n changeTimeZone(date: Date, ianaTimezoneId: string): Date{\r\n var utcDateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString();\r\n var currentTimezoneString = DateTime.fromJSDate(new Date(), { zone: ianaTimezoneId }).toFormat('ZZ');\r\n var dateStringWithoutTimezome = utcDateString.substring(0,utcDateString.length-1) + currentTimezoneString;\r\n return DateTime.fromISO(dateStringWithoutTimezome).toJSDate();\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Injector,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { SettingScopes, NameValueDto, TimingServiceProxy } from '@shared/service-proxies/service-proxies';\r\nimport { ControlValueAccessor, UntypedFormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'timezone-combo',\r\n template: `\r\n \r\n `,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TimeZoneComboComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class TimeZoneComboComponent extends AppComponentBase implements OnInit, ControlValueAccessor {\r\n @Input() defaultTimezoneScope: SettingScopes;\r\n\r\n timeZones: NameValueDto[] = [];\r\n selectedTimeZone = new UntypedFormControl('');\r\n\r\n constructor(private _timingService: TimingServiceProxy, injector: Injector) {\r\n super(injector);\r\n }\r\n\r\n onTouched: any = () => {};\r\n\r\n ngOnInit(): void {\r\n let self = this;\r\n self._timingService.getTimezones(self.defaultTimezoneScope).subscribe((result) => {\r\n self.timeZones = result.items;\r\n });\r\n }\r\n\r\n writeValue(obj: any): void {\r\n if (this.selectedTimeZone) {\r\n this.selectedTimeZone.setValue(obj);\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.selectedTimeZone.valueChanges.subscribe(fn);\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.selectedTimeZone.disable();\r\n } else {\r\n this.selectedTimeZone.enable();\r\n }\r\n }\r\n}\r\n","import { Injectable, Injector, NgZone } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { HubConnection } from '@microsoft/signalr';\r\n\r\n@Injectable()\r\nexport class ChatSignalrService extends AppComponentBase {\r\n chatHub: HubConnection;\r\n isChatConnected = false;\r\n\r\n constructor(injector: Injector, public _zone: NgZone) {\r\n super(injector);\r\n }\r\n\r\n configureConnection(connection): void {\r\n // Set the common hub\r\n this.chatHub = connection;\r\n\r\n // Reconnect loop\r\n let reconnectTime = 5000;\r\n let tries = 1;\r\n let maxTries = 8;\r\n function start() {\r\n return new Promise(function (resolve, reject) {\r\n if (tries > maxTries) {\r\n reject();\r\n } else {\r\n connection\r\n .start()\r\n .then(resolve)\r\n .then(() => {\r\n reconnectTime = 5000;\r\n tries = 1;\r\n })\r\n .catch(() => {\r\n setTimeout(() => {\r\n start().then(resolve);\r\n }, reconnectTime);\r\n reconnectTime *= 2;\r\n tries += 1;\r\n });\r\n }\r\n });\r\n }\r\n\r\n // Reconnect if hub disconnects\r\n connection.onclose((e) => {\r\n this.isChatConnected = false;\r\n\r\n if (e) {\r\n abp.log.debug('Chat connection closed with error: ' + e);\r\n } else {\r\n abp.log.debug('Chat disconnected');\r\n }\r\n\r\n start().then(() => {\r\n this.isChatConnected = true;\r\n });\r\n });\r\n\r\n // Register to get notifications\r\n this.registerChatEvents(connection);\r\n }\r\n\r\n registerChatEvents(connection): void {\r\n connection.on('getChatMessage', (message) => {\r\n abp.event.trigger('app.chat.messageReceived', message);\r\n });\r\n\r\n connection.on('getAllFriends', (friends) => {\r\n abp.event.trigger('abp.chat.friendListChanged', friends);\r\n });\r\n\r\n connection.on('getFriendshipRequest', (friendData, isOwnRequest) => {\r\n abp.event.trigger('app.chat.friendshipRequestReceived', friendData, isOwnRequest);\r\n });\r\n\r\n connection.on('getUserConnectNotification', (friend, isConnected) => {\r\n abp.event.trigger('app.chat.userConnectionStateChanged', {\r\n friend: friend,\r\n isConnected: isConnected,\r\n });\r\n });\r\n\r\n connection.on('getUserStateChange', (friend, state) => {\r\n abp.event.trigger('app.chat.userStateChanged', {\r\n friend: friend,\r\n state: state,\r\n });\r\n });\r\n\r\n connection.on('getallUnreadMessagesOfUserRead', (friend) => {\r\n abp.event.trigger('app.chat.allUnreadMessagesOfUserRead', {\r\n friend: friend,\r\n });\r\n });\r\n\r\n connection.on('getReadStateChange', (friend) => {\r\n abp.event.trigger('app.chat.readStateChange', {\r\n friend: friend,\r\n });\r\n });\r\n }\r\n\r\n sendMessage(messageData, callback): void {\r\n if (!this.isChatConnected) {\r\n if (callback) {\r\n callback();\r\n }\r\n\r\n abp.notify.warn(this.l('ChatIsNotConnectedWarning'));\r\n return;\r\n }\r\n\r\n this.chatHub\r\n .invoke('sendMessage', messageData)\r\n .then((result) => {\r\n if (result) {\r\n abp.notify.warn(result);\r\n }\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n })\r\n .catch((error) => {\r\n abp.log.error(error);\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n init(): void {\r\n this._zone.runOutsideAngular(() => {\r\n // abp.signalr.connect();\r\n // abp.signalr\r\n // .startConnection(abp.appPath + 'signalr-chat', (connection) => {\r\n // this.configureConnection(connection);\r\n // })\r\n // .then(() => {\r\n // abp.event.trigger('app.chat.connected');\r\n // this.isChatConnected = true;\r\n // });\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AppAuthService } from '@app/shared/common/auth/app-auth.service';\r\nimport { AppUrlService } from '@shared/common/nav/app-url.service';\r\nimport {\r\n AccountServiceProxy,\r\n SwitchToLinkedAccountInput,\r\n SwitchToLinkedAccountOutput,\r\n} from '@shared/service-proxies/service-proxies';\r\n\r\n@Injectable()\r\nexport class LinkedAccountService {\r\n constructor(\r\n private _accountService: AccountServiceProxy,\r\n private _appUrlService: AppUrlService,\r\n private _authService: AppAuthService\r\n ) {}\r\n\r\n switchToAccount(userId: number, tenantId?: number): void {\r\n const input = new SwitchToLinkedAccountInput();\r\n input.targetUserId = userId;\r\n input.targetTenantId = tenantId;\r\n\r\n this._accountService.switchToLinkedAccount(input).subscribe((result: SwitchToLinkedAccountOutput) => {\r\n let targetUrl =\r\n this._appUrlService.getAppRootUrlOfTenant(result.tenancyName) +\r\n '?switchAccountToken=' +\r\n result.switchAccountToken;\r\n if (input.targetTenantId) {\r\n targetUrl = targetUrl + '&tenantId=' + input.targetTenantId;\r\n }\r\n\r\n this._authService.logout(true, targetUrl);\r\n });\r\n }\r\n}\r\n","import { AppMenuItem } from './app-menu-item';\r\n\r\nexport class AppMenu {\r\n name = '';\r\n displayName = '';\r\n items: AppMenuItem[];\r\n\r\n constructor(name: string, displayName: string, items: AppMenuItem[]) {\r\n this.name = name;\r\n this.displayName = displayName;\r\n this.items = items;\r\n }\r\n}\r\n","export class AppMenuItem {\r\n name = '';\r\n permissionName = '';\r\n icon = '';\r\n route = '';\r\n routeTemplates = [];\r\n items: AppMenuItem[];\r\n external: boolean;\r\n requiresAuthentication: boolean;\r\n featureDependency: any;\r\n parameters: {};\r\n\r\n constructor(\r\n name: string,\r\n permissionName: string,\r\n icon: string,\r\n route: string,\r\n routeTemplates?: string[],\r\n items?: AppMenuItem[],\r\n external?: boolean,\r\n parameters?: Object,\r\n featureDependency?: any,\r\n requiresAuthentication?: boolean\r\n ) {\r\n this.name = name;\r\n this.permissionName = permissionName;\r\n this.icon = icon;\r\n this.route = route;\r\n this.routeTemplates = routeTemplates;\r\n this.external = external;\r\n this.parameters = parameters;\r\n this.featureDependency = featureDependency;\r\n\r\n if (items === undefined) {\r\n this.items = [];\r\n } else {\r\n this.items = items;\r\n }\r\n\r\n if (this.permissionName) {\r\n this.requiresAuthentication = true;\r\n } else {\r\n this.requiresAuthentication = requiresAuthentication ? requiresAuthentication : false;\r\n }\r\n }\r\n\r\n hasFeatureDependency(): boolean {\r\n return this.featureDependency !== undefined;\r\n }\r\n\r\n featureDependencySatisfied(): boolean {\r\n if (this.featureDependency) {\r\n return this.featureDependency();\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import { PermissionCheckerService } from 'abp-ng2-module';\r\nimport { AppSessionService } from '@shared/common/session/app-session.service';\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { AppMenu } from './app-menu';\r\nimport { AppMenuItem } from './app-menu-item';\r\n\r\n@Injectable()\r\nexport class AppNavigationService {\r\n constructor(\r\n private _permissionCheckerService: PermissionCheckerService,\r\n private _appSessionService: AppSessionService\r\n ) {}\r\n\r\n getMenu(): AppMenu {\r\n return new AppMenu('MainMenu', 'MainMenu', [\r\n new AppMenuItem(\r\n 'Dashboard',\r\n 'Pages.Administration.Host.Dashboard',\r\n 'flaticon-line-graph',\r\n '/app/admin/hostDashboard'\r\n ),\r\n \r\n new AppMenuItem('Dashboard', 'Pages.Tenant.Dashboard', 'flaticon-line-graph', '/app/main/dashboard'),\r\n new AppMenuItem('Tenants', 'Pages.Tenants', 'flaticon-list-3', '/app/admin/tenants'),\r\n \r\n new AppMenuItem('Episodes', 'Pages.Episodes', 'flaticon-more', '/app/main/episodeEntity/episodes'),\r\n \r\n // new AppMenuItem('EpisodeUsers', 'Pages.EpisodeUsers', 'flaticon-more', '/app/main/episodeForUsers/episodeUsers'),\r\n \r\n new AppMenuItem('Learn More Ovals', 'Pages.Ovals', 'flaticon-more', '/app/main/learnMoreOval/ovals'),\r\n \r\n // new AppMenuItem('EpisodeOvals', 'Pages.EpisodeOvals', 'flaticon-more', '/app/main/episodeOvals/episodeOvals'),\r\n \r\n // new AppMenuItem('DifficultyLevels', 'Pages.DifficultyLevels', 'flaticon-more', '/app/main/episodeFileLevels/levels'),\r\n \r\n new AppMenuItem('EpisodeOvalFiles', 'Pages.EpisodeOvalFiles', 'flaticon-more', '/app/main/episodeOvalFiles/episodeOvalFiles'),\r\n \r\n new AppMenuItem('EpisodeVideos', 'Pages.EpisodeVideos', 'flaticon-more', '/app/main/episodeVideoEntity/episodeVideos'),\r\n \r\n \r\n new AppMenuItem('CustomAudioForEpisodes', 'Pages.CustomAudioForEpisodes', 'flaticon-more', '/app/main/customAudioForEpisodes/customAudioForEpisodes'),\r\n new AppMenuItem('Editions', 'Pages.Editions', 'flaticon-app', '/app/admin/editions'),\r\n new AppMenuItem(\r\n 'Administration',\r\n '',\r\n 'flaticon-interface-8',\r\n '',\r\n [],\r\n [\r\n new AppMenuItem(\r\n 'OrganizationUnits',\r\n 'Pages.Administration.OrganizationUnits',\r\n 'flaticon-map',\r\n '/app/admin/organization-units'\r\n ),\r\n new AppMenuItem('Roles', 'Pages.Administration.Roles', 'flaticon-suitcase', '/app/admin/roles'),\r\n new AppMenuItem('Users', 'Pages.Administration.Users', 'flaticon-users', '/app/admin/users'),\r\n new AppMenuItem(\r\n 'Languages',\r\n 'Pages.Administration.Languages',\r\n 'flaticon-tabs',\r\n '/app/admin/languages',\r\n ['/app/admin/languages/{name}/texts']\r\n ),\r\n new AppMenuItem(\r\n 'AuditLogs',\r\n 'Pages.Administration.AuditLogs',\r\n 'flaticon-folder-1',\r\n '/app/admin/auditLogs'\r\n ),\r\n new AppMenuItem(\r\n 'Maintenance',\r\n 'Pages.Administration.Host.Maintenance',\r\n 'flaticon-lock',\r\n '/app/admin/maintenance'\r\n ),\r\n new AppMenuItem(\r\n 'Subscription',\r\n 'Pages.Administration.Tenant.SubscriptionManagement',\r\n 'flaticon-refresh',\r\n '/app/admin/subscription-management'\r\n ),\r\n new AppMenuItem(\r\n 'VisualSettings',\r\n 'Pages.Administration.UiCustomization',\r\n 'flaticon-medical',\r\n '/app/admin/ui-customization'\r\n ),\r\n new AppMenuItem(\r\n 'WebhookSubscriptions',\r\n 'Pages.Administration.WebhookSubscription',\r\n 'flaticon2-world',\r\n '/app/admin/webhook-subscriptions'\r\n ),\r\n new AppMenuItem(\r\n 'DynamicProperties',\r\n 'Pages.Administration.DynamicProperties',\r\n 'flaticon-interface-8',\r\n '/app/admin/dynamic-property'\r\n ),\r\n new AppMenuItem(\r\n 'Settings',\r\n 'Pages.Administration.Host.Settings',\r\n 'flaticon-settings',\r\n '/app/admin/hostSettings'\r\n ),\r\n new AppMenuItem(\r\n 'Settings',\r\n 'Pages.Administration.Tenant.Settings',\r\n 'flaticon-settings',\r\n '/app/admin/tenantSettings'\r\n ),\r\n new AppMenuItem(\r\n 'Notifications',\r\n '',\r\n 'flaticon-alarm',\r\n '',\r\n [],\r\n [\r\n new AppMenuItem(\r\n 'Inbox',\r\n '',\r\n 'flaticon-mail-1',\r\n '/app/notifications'\r\n ),\r\n new AppMenuItem(\r\n 'MassNotifications',\r\n 'Pages.Administration.MassNotification',\r\n 'flaticon-paper-plane',\r\n '/app/admin/mass-notifications'\r\n ) \r\n ]\r\n )\r\n ]\r\n ),\r\n new AppMenuItem(\r\n 'DemoUiComponents',\r\n 'Pages.DemoUiComponents',\r\n 'flaticon-shapes',\r\n '/app/admin/demo-ui-components'\r\n ),\r\n ]);\r\n }\r\n\r\n checkChildMenuItemPermission(menuItem): boolean {\r\n for (let i = 0; i < menuItem.items.length; i++) {\r\n let subMenuItem = menuItem.items[i];\r\n\r\n if (subMenuItem.permissionName === '' || subMenuItem.permissionName === null) {\r\n if (subMenuItem.route) {\r\n return true;\r\n }\r\n } else if (this._permissionCheckerService.isGranted(subMenuItem.permissionName)) {\r\n return true;\r\n }\r\n\r\n if (subMenuItem.items && subMenuItem.items.length) {\r\n let isAnyChildItemActive = this.checkChildMenuItemPermission(subMenuItem);\r\n if (isAnyChildItemActive) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n showMenuItem(menuItem: AppMenuItem): boolean {\r\n if (\r\n menuItem.permissionName === 'Pages.Administration.Tenant.SubscriptionManagement' &&\r\n this._appSessionService.tenant &&\r\n !this._appSessionService.tenant.edition\r\n ) {\r\n return false;\r\n }\r\n\r\n let hideMenuItem = false;\r\n\r\n if (menuItem.requiresAuthentication && !this._appSessionService.user) {\r\n hideMenuItem = true;\r\n }\r\n\r\n if (menuItem.permissionName && !this._permissionCheckerService.isGranted(menuItem.permissionName)) {\r\n hideMenuItem = true;\r\n }\r\n\r\n if (this._appSessionService.tenant || !abp.multiTenancy.ignoreFeatureCheckForHostUsers) {\r\n if (menuItem.hasFeatureDependency() && !menuItem.featureDependencySatisfied()) {\r\n hideMenuItem = true;\r\n }\r\n }\r\n\r\n if (!hideMenuItem && menuItem.items && menuItem.items.length) {\r\n return this.checkChildMenuItemPermission(menuItem);\r\n }\r\n\r\n return !hideMenuItem;\r\n }\r\n\r\n /**\r\n * Returns all menu items recursively\r\n */\r\n getAllMenuItems(): AppMenuItem[] {\r\n let menu = this.getMenu();\r\n let allMenuItems: AppMenuItem[] = [];\r\n menu.items.forEach((menuItem) => {\r\n allMenuItems = allMenuItems.concat(this.getAllMenuItemsRecursive(menuItem));\r\n });\r\n\r\n return allMenuItems;\r\n }\r\n\r\n private getAllMenuItemsRecursive(menuItem: AppMenuItem): AppMenuItem[] {\r\n if (!menuItem.items) {\r\n return [menuItem];\r\n }\r\n\r\n let menuItems = [menuItem];\r\n menuItem.items.forEach((subMenu) => {\r\n menuItems = menuItems.concat(this.getAllMenuItemsRecursive(subMenu));\r\n });\r\n\r\n return menuItems;\r\n }\r\n}\r\n","import { Injectable, Injector } from '@angular/core';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport {\r\n GuidEntityDto,\r\n NotificationServiceProxy,\r\n SetNotificationAsReadOutput,\r\n} from '@shared/service-proxies/service-proxies';\r\nimport { DateTime } from 'luxon';\r\nimport * as Push from 'push.js'; // if using ES6\r\nimport { NotificationSettingsModalComponent } from './notification-settings-modal.component';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nexport interface IFormattedUserNotification {\r\n userNotificationId: string;\r\n text: string;\r\n time: string;\r\n creationTime: DateTime;\r\n icon: string;\r\n state: String;\r\n data: any;\r\n url: string;\r\n isUnread: boolean;\r\n severity: abp.notifications.severity;\r\n iconFontClass: string;\r\n}\r\n\r\n@Injectable()\r\nexport class UserNotificationHelper extends AppComponentBase {\r\n settingsModal: NotificationSettingsModalComponent;\r\n\r\n constructor(\r\n injector: Injector,\r\n private _notificationService: NotificationServiceProxy,\r\n private _dateTimeService: DateTimeService,\r\n private http: HttpClient,\r\n ) {\r\n super(injector);\r\n }\r\n\r\n getUrl(userNotification: abp.notifications.IUserNotification): string {\r\n switch (userNotification.notification.notificationName) {\r\n case 'App.NewUserRegistered':\r\n return '/app/admin/users?filterText=' + userNotification.notification.data.properties.emailAddress;\r\n case 'App.NewTenantRegistered':\r\n return '/app/admin/tenants?filterText=' + userNotification.notification.data.properties.tenancyName;\r\n case 'App.GdprDataPrepared':\r\n return (\r\n AppConsts.remoteServiceBaseUrl +\r\n '/File/DownloadBinaryFile?id=' +\r\n userNotification.notification.data.properties.binaryObjectId +\r\n '&contentType=application/zip&fileName=collectedData.zip'\r\n );\r\n case 'App.DownloadInvalidImportUsers':\r\n return (\r\n AppConsts.remoteServiceBaseUrl +\r\n '/File/DownloadTempFile?fileToken=' +\r\n userNotification.notification.data.properties.fileToken +\r\n '&fileType=' +\r\n userNotification.notification.data.properties.fileType +\r\n '&fileName=' +\r\n userNotification.notification.data.properties.fileName\r\n );\r\n //Add your custom notification names to navigate to a URL when user clicks to a notification.\r\n }\r\n\r\n //No url for this notification\r\n return '';\r\n }\r\n\r\n /* PUBLIC functions ******************************************/\r\n\r\n getUiIconBySeverity(severity: abp.notifications.severity): string {\r\n switch (severity) {\r\n case abp.notifications.severity.SUCCESS:\r\n return 'fas fa-check-circle';\r\n case abp.notifications.severity.WARN:\r\n return 'fas fa-exclamation-triangle';\r\n case abp.notifications.severity.ERROR:\r\n return 'fas fa-exclamation-circle';\r\n case abp.notifications.severity.FATAL:\r\n return 'fas fa-bomb';\r\n case abp.notifications.severity.INFO:\r\n default:\r\n return 'fas fa-info-circle';\r\n }\r\n }\r\n\r\n getIconFontClassBySeverity(severity: abp.notifications.severity): string {\r\n switch (severity) {\r\n case abp.notifications.severity.SUCCESS:\r\n return ' text-success';\r\n case abp.notifications.severity.WARN:\r\n return ' text-warning';\r\n case abp.notifications.severity.ERROR:\r\n return ' text-danger';\r\n case abp.notifications.severity.FATAL:\r\n return ' text-danger';\r\n case abp.notifications.severity.INFO:\r\n default:\r\n return ' text-info';\r\n }\r\n }\r\n\r\n format(userNotification: abp.notifications.IUserNotification, truncateText?: boolean): IFormattedUserNotification {\r\n let formatted: IFormattedUserNotification = {\r\n userNotificationId: userNotification.id,\r\n text: abp.notifications.getFormattedMessageFromUserNotification(userNotification),\r\n time: this._dateTimeService.formatDate(userNotification.notification.creationTime, 'yyyy-LL-dd HH:mm:ss'),\r\n creationTime: userNotification.notification.creationTime as any,\r\n icon: this.getUiIconBySeverity(userNotification.notification.severity),\r\n state: abp.notifications.getUserNotificationStateAsString(userNotification.state),\r\n data: userNotification.notification.data,\r\n url: this.getUrl(userNotification),\r\n isUnread: userNotification.state === abp.notifications.userNotificationState.UNREAD,\r\n severity: userNotification.notification.severity,\r\n iconFontClass: this.getIconFontClassBySeverity(userNotification.notification.severity),\r\n };\r\n\r\n if (truncateText || truncateText === undefined) {\r\n formatted.text = abp.utils.truncateStringWithPostfix(formatted.text, 100);\r\n }\r\n\r\n return formatted;\r\n }\r\n\r\n show(userNotification: abp.notifications.IUserNotification): void {\r\n let url = this.getUrl(userNotification);\r\n //Application notification\r\n abp.notifications.showUiNotifyForUserNotification(userNotification, {\r\n didOpen: (toast) => {\r\n toast.addEventListener('click', () => {\r\n //Take action when user clicks to live toastr notification\r\n if (url) {\r\n location.href = url;\r\n }\r\n });\r\n },\r\n });\r\n if (Push.default.Permission.has()) {\r\n //Desktop notification\r\n Push.default.create('WordPlay', {\r\n body: this.format(userNotification).text,\r\n icon: abp.appPath + 'assets/common/images/app-logo-on-dark-sm.svg',\r\n timeout: 6000,\r\n onClick: function () {\r\n window.focus();\r\n this.close();\r\n },\r\n });\r\n }\r\n }\r\n\r\n shouldUserUpdateApp(): void {\r\n this._notificationService.shouldUserUpdateApp().subscribe((result) => {\r\n if (result) {\r\n abp.message.confirm(null, this.l('NewVersionAvailableNotification'), (isConfirmed) => {\r\n if (isConfirmed) {\r\n this.http\r\n .get(abp.appPath + 'BrowserCacheCleaner/Clear', { withCredentials: true })\r\n .subscribe((result: boolean) => {\r\n if (result) {\r\n const url = new URL(location.href);\r\n url.searchParams.append('t', new Date().getTime().toString());\r\n location.href = url.toString();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n setAllAsRead(callback?: () => void): void {\r\n this._notificationService.setAllNotificationsAsRead().subscribe(() => {\r\n abp.event.trigger('app.notifications.refresh');\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n setAsRead(userNotificationId: string, callback?: (userNotificationId: string) => void): void {\r\n const input = new GuidEntityDto();\r\n input.id = userNotificationId;\r\n this._notificationService.setNotificationAsRead(input).subscribe((result: SetNotificationAsReadOutput) => {\r\n abp.event.trigger('app.notifications.read', userNotificationId, result.success);\r\n if (callback) {\r\n callback(userNotificationId);\r\n }\r\n });\r\n }\r\n\r\n openSettingsModal(): void {\r\n this.settingsModal.show();\r\n }\r\n}\r\n","\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {{ 'ChangeProfilePicture' | localize }}\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {{ 'ChooseAFile' | localize }}\r\n \r\n
    \r\n \r\n {{ 'ProfilePicture_Change_Info' | localize: maxProfilPictureBytesUserFriendlyValue }}\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n {{ 'Cancel' | localize }}\r\n \r\n \r\n \r\n {{ 'Save' | localize }}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n","import { IAjaxResponse, TokenService } from 'abp-ng2-module';\r\nimport { Component, ElementRef, EventEmitter, Injector, Output, ViewChild } from '@angular/core';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppComponentBase } from '@shared/common/app-component-base';\r\nimport { ProfileServiceProxy, UpdateProfilePictureInput } from '@shared/service-proxies/service-proxies';\r\nimport { FileUploader, FileUploaderOptions, FileItem } from 'ng2-file-upload';\r\nimport { ModalDirective } from 'ngx-bootstrap/modal';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { ImageCroppedEvent, base64ToFile } from 'ngx-image-cropper';\r\n\r\n@Component({\r\n selector: 'changeProfilePictureModal',\r\n templateUrl: './change-profile-picture-modal.component.html',\r\n})\r\nexport class ChangeProfilePictureModalComponent extends AppComponentBase {\r\n @ViewChild('changeProfilePictureModal', { static: true }) modal: ModalDirective;\r\n @ViewChild('uploadProfilePictureInputLabel') uploadProfilePictureInputLabel: ElementRef;\r\n\r\n @Output() modalSave: EventEmitter = new EventEmitter();\r\n\r\n public active = false;\r\n public uploader: FileUploader;\r\n public temporaryPictureUrl: string;\r\n public saving = false;\r\n public maxProfilPictureBytesUserFriendlyValue = 5;\r\n public useGravatarProfilePicture = false;\r\n\r\n imageChangedEvent: any = '';\r\n userId: number = null;\r\n\r\n private _uploaderOptions: FileUploaderOptions = {};\r\n\r\n constructor(injector: Injector, private _profileService: ProfileServiceProxy, private _tokenService: TokenService) {\r\n super(injector);\r\n }\r\n\r\n initializeModal(): void {\r\n this.active = true;\r\n this.temporaryPictureUrl = '';\r\n this.useGravatarProfilePicture = this.setting.getBoolean('App.UserManagement.UseGravatarProfilePicture');\r\n if (!this.canUseGravatar()) {\r\n this.useGravatarProfilePicture = false;\r\n }\r\n this.initFileUploader();\r\n }\r\n\r\n show(userId?: number): void {\r\n this.initializeModal();\r\n this.modal.show();\r\n this.userId = userId;\r\n }\r\n\r\n close(): void {\r\n this.active = false;\r\n this.imageChangedEvent = '';\r\n this.uploader.clearQueue();\r\n this.modal.hide();\r\n }\r\n\r\n fileChangeEvent(event: any): void {\r\n if (event.target.files[0].size > 5242880) {\r\n //5MB\r\n this.message.warn(this.l('ProfilePicture_Warn_SizeLimit', this.maxProfilPictureBytesUserFriendlyValue));\r\n return;\r\n }\r\n\r\n this.uploadProfilePictureInputLabel.nativeElement.innerText = event.target.files[0].name;\r\n\r\n this.imageChangedEvent = event;\r\n }\r\n\r\n imageCroppedFile(event: ImageCroppedEvent) {\r\n this.uploader.clearQueue();\r\n this.uploader.addToQueue([base64ToFile(event.base64)]);\r\n }\r\n\r\n initFileUploader(): void {\r\n this.uploader = new FileUploader({ url: AppConsts.remoteServiceBaseUrl + '/Profile/UploadProfilePicture' });\r\n this._uploaderOptions.autoUpload = false;\r\n this._uploaderOptions.authToken = 'Bearer ' + this._tokenService.getToken();\r\n this._uploaderOptions.removeAfterUpload = true;\r\n this.uploader.onAfterAddingFile = (file) => {\r\n file.withCredentials = false;\r\n };\r\n\r\n var token = this.guid();\r\n this.uploader.onBuildItemForm = (fileItem: FileItem, form: any) => {\r\n form.append('FileType', fileItem.file.type);\r\n form.append('FileName', 'ProfilePicture');\r\n form.append('FileToken', token);\r\n };\r\n\r\n this.uploader.onSuccessItem = (item, response, status) => {\r\n const resp = JSON.parse(response);\r\n if (resp.success) {\r\n this.updateProfilePicture(token);\r\n } else {\r\n this.message.error(resp.error.message);\r\n }\r\n };\r\n\r\n this.uploader.setOptions(this._uploaderOptions);\r\n }\r\n\r\n updateProfilePicture(fileToken: string): void {\r\n const input = new UpdateProfilePictureInput();\r\n input.fileToken = fileToken;\r\n\r\n if (this.userId) {\r\n input.userId = this.userId;\r\n }\r\n\r\n this.saving = true;\r\n this._profileService\r\n .updateProfilePicture(input)\r\n .pipe(\r\n finalize(() => {\r\n this.saving = false;\r\n })\r\n )\r\n .subscribe(() => {\r\n abp.setting.values['App.UserManagement.UseGravatarProfilePicture'] =\r\n this.useGravatarProfilePicture.toString();\r\n abp.event.trigger('profilePictureChanged');\r\n this.modalSave.emit(this.userId);\r\n this.close();\r\n });\r\n }\r\n\r\n updateProfilePictureToUseGravatar(): void {\r\n const input = new UpdateProfilePictureInput();\r\n input.useGravatarProfilePicture = this.useGravatarProfilePicture;\r\n\r\n this.saving = true;\r\n this._profileService\r\n .updateProfilePicture(input)\r\n .pipe(\r\n finalize(() => {\r\n this.saving = false;\r\n })\r\n )\r\n .subscribe(() => {\r\n abp.setting.values['App.UserManagement.UseGravatarProfilePicture'] =\r\n this.useGravatarProfilePicture.toString();\r\n abp.event.trigger('profilePictureChanged');\r\n this.close();\r\n });\r\n }\r\n\r\n guid(): string {\r\n function s4() {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n }\r\n\r\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\r\n }\r\n\r\n save(): void {\r\n if (this.useGravatarProfilePicture) {\r\n this.updateProfilePictureToUseGravatar();\r\n } else {\r\n this.uploader.uploadAll();\r\n }\r\n }\r\n\r\n canUseGravatar(): boolean {\r\n return this.setting.getBoolean('App.UserManagement.AllowUsingGravatarProfilePicture');\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { AppSharedModule } from '@app/shared/app-shared.module';\r\nimport { ChangeProfilePictureModalComponent } from './change-profile-picture-modal.component';\r\n\r\n@NgModule({\r\n imports: [CommonModule, AppSharedModule],\r\n declarations: [ChangeProfilePictureModalComponent],\r\n exports: [ChangeProfilePictureModalComponent],\r\n})\r\nexport class ChangeProfilePictureModalModule {}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { map as _map, filter as _filter } from 'lodash-es';\r\n\r\n@Injectable()\r\nexport class AboutUsService {\r\n\r\n constructor(\r\n private _router: Router,\r\n ) {\r\n\r\n }\r\n\r\n AboutUsSlider() {\r\n var isInAboutOurshow = (this._router.url.includes(\"aboutOurshow\"));\r\n if (isInAboutOurshow) {\r\n this._router.navigate(['./app/info/aboutMedia']);\r\n return;\r\n }\r\n this._router.navigate(['./app/info/aboutOurshow']);\r\n }\r\n}\r\n","\r\nexport class Language {\r\n id:number;\r\n name: string;\r\n flagUrl: string;\r\n}\r\n\r\nexport class LanguageData {\r\nstatic readonly languages:Language[]=[\r\n {id:1, name:\"Armenian\", flagUrl:\"/assets/common/images/flags/armenia.svg\"}, \r\n {id:2, name:\"Albanian\", flagUrl:\"/assets/common/images/flags/albania.png\"}, \r\n {id:3, name:\"Georgian\", flagUrl:\"/assets/common/images/flags/georgia.jpg\"}, \r\n {id:4, name:\"Spanish (Mexican)\", flagUrl:\"/assets/common/images/flags/spain.png\"}, \r\n {id:5, name:\"Karen\", flagUrl:\"/assets/common/images/flags/myanmar.jpg\"}, \r\n {id:6, name:\"Ukrainian\", flagUrl:\"/assets/common/images/flags/ukrain.png\"}, \r\n {id:7, name:\"German\", flagUrl:\"/assets/common/images/flags/germany.png\"}, \r\n {id:8, name:\"Norwegian\", flagUrl:\"/assets/common/images/flags/norway.png\"}, \r\n {id:9, name:\"Lao\", flagUrl:\"/assets/common/images/flags/lao.png\"}, \r\n {id:10, name:\"Thai\", flagUrl:\"/assets/common/images/flags/thai.png\"}, \r\n];\r\n\r\nstatic readonly flagSrcs: string[] = [\r\n \"/assets/common/images/flags/GB.jpg\",\r\n \"/assets/common/images/flags/armenia.svg\",\r\n \"/assets/common/images/flags/albania.png\",\r\n \"/assets/common/images/flags/georgia.jpg\",\r\n]\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { AppSessionService } from '@shared/common/session/app-session.service';\r\nimport { SessionServiceProxy } from '@shared/service-proxies/service-proxies';\r\nimport { map, shareReplay } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class LanguageService {\r\n \r\n appSession: AppSessionService;\r\n \r\n constructor(\r\n private _sessionService: SessionServiceProxy,\r\n\r\n ) {\r\n this.tetantLanguageName$.subscribe(); \r\n }\r\n\r\n readonly tetantLanguageName$ = this._sessionService.getCurrentLoginInformations().pipe(\r\n map((x)=>\r\n {\r\n if(x.tenant)\r\n {\r\n return x.tenant.languageName;\r\n }\r\n return \"Georgian\";\r\n }),\r\n shareReplay(1)\r\n );\r\n}\r\n","export class ThemeHelper {\r\n public static getTheme(): string {\r\n if(!abp.session.userId){\r\n return 'default';\r\n }\r\n\r\n return abp.setting.get('App.UiManagement.Theme');\r\n }\r\n\r\n public static darkMode(): boolean {\r\n return abp.setting.get(ThemeHelper.getTheme() + '.App.UiManagement.DarkMode')?.toLowerCase() === 'true';\r\n }\r\n\r\n public static getAsideSkin(): string {\r\n return abp.setting.get(ThemeHelper.getTheme() + '.App.UiManagement.Left.AsideSkin')?.toLowerCase();\r\n }\r\n\r\n public static getAllowAsideMinimizing(): string {\r\n return abp.setting.get(ThemeHelper.getTheme() + '.App.UiManagement.Left.AllowAsideMinimizing')?.toLowerCase();\r\n }\r\n\r\n public static getDefaultMinimizedAside(): string {\r\n return abp.setting.get(ThemeHelper.getTheme() + '.App.UiManagement.Left.DefaultMinimizedAside')?.toLowerCase();\r\n }\r\n\r\n public static getHoverableAside(): string {\r\n return abp.setting.get(ThemeHelper.getTheme() + '.App.UiManagement.Left.HoverableAside')?.toLowerCase();\r\n }\r\n\r\n public static getFixedAside(): string {\r\n return abp.setting.get(ThemeHelper.getTheme() + '.App.UiManagement.Left.FixedAside')?.toLowerCase();\r\n }\r\n\r\n public static getDesktopFixedHeader(): string {\r\n return abp.setting.get(ThemeHelper.getTheme() + '.App.UiManagement.Header.DesktopFixedHeader')?.toLowerCase();\r\n }\r\n\r\n public static getMobileFixedHeader(): string {\r\n return abp.setting.get(ThemeHelper.getTheme() + '.App.UiManagement.Header.MobileFixedHeader')?.toLowerCase();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class NgxSpinnerTextService {\r\n private currentText = '';\r\n\r\n public getText(): string {\r\n return this.currentText;\r\n }\r\n\r\n public setText(text: string): void {\r\n this.currentText = text;\r\n }\r\n}\r\n","export class NgxBootstrapLocaleMappingService {\r\n map(locale: string): string {\r\n const cultureMap = {\r\n 'zh-Hans': 'zh-cn',\r\n 'es-MX': 'es',\r\n 'vi': 'en-gb',\r\n 'ta': 'en-gb'\r\n // Add more here\r\n };\r\n\r\n if (locale === 'en' || locale.startsWith('en-')) {\r\n return 'en-gb';\r\n }\r\n\r\n if (cultureMap[locale]) {\r\n return cultureMap[locale];\r\n }\r\n\r\n return locale;\r\n }\r\n\r\n getModuleName(locale: string): string {\r\n const moduleNameMap = {\r\n 'zh-Hans': 'zhCn',\r\n 'es-MX': 'es',\r\n 'pt-BR': 'ptBr',\r\n 'vi': 'enGb',\r\n 'ta': 'enGb'\r\n // Add more here\r\n };\r\n\r\n if (locale === 'en' || locale.startsWith('en-')) {\r\n return 'enGb';\r\n }\r\n\r\n if (moduleNameMap[locale]) {\r\n return moduleNameMap[locale];\r\n }\r\n\r\n return locale;\r\n }\r\n}\r\n","import { BsDatepickerConfig, BsDaterangepickerConfig, BsLocaleService } from 'ngx-bootstrap/datepicker';\r\nimport { NgxBootstrapLocaleMappingService } from 'assets/ngx-bootstrap/ngx-bootstrap-locale-mapping.service';\r\nimport { defineLocale } from 'ngx-bootstrap/chronos';\r\nimport { ThemeHelper } from '@app/shared/layout/themes/ThemeHelper';\r\n\r\nexport class NgxBootstrapDatePickerConfigService {\r\n\r\n static getDaterangepickerConfig(): BsDaterangepickerConfig {\r\n return Object.assign(new BsDaterangepickerConfig(), {\r\n containerClass: 'theme-default'\r\n });\r\n }\r\n\r\n static getDatepickerConfig(): BsDatepickerConfig {\r\n return Object.assign(new BsDatepickerConfig(), {\r\n containerClass: 'theme-default'\r\n });\r\n }\r\n\r\n static getDatepickerLocale(): BsLocaleService {\r\n let localeService = new BsLocaleService();\r\n localeService.use(abp.localization.currentLanguage.name);\r\n return localeService;\r\n }\r\n\r\n private static _supportedLocales: string[] = [\r\n 'ar',\r\n 'bg',\r\n 'ca',\r\n 'cs',\r\n 'da',\r\n 'de',\r\n 'en-gb',\r\n 'es',\r\n 'es-do',\r\n 'es-pr',\r\n 'es-us',\r\n 'et',\r\n 'fi',\r\n 'fr',\r\n 'gl',\r\n 'he',\r\n 'hi',\r\n 'hr',\r\n 'hu',\r\n 'id',\r\n 'it',\r\n 'ja',\r\n 'ka',\r\n 'kk',\r\n 'io',\r\n 'lt',\r\n 'lv',\r\n 'mn',\r\n 'nb',\r\n 'nl',\r\n 'nl-be',\r\n 'pl',\r\n 'pt-br',\r\n 'ro',\r\n 'ru',\r\n 'sk',\r\n 'sl',\r\n 'sq',\r\n 'sv',\r\n 'th',\r\n 'th-be',\r\n 'tr',\r\n 'uk',\r\n 'vi',\r\n 'zh-cn',\r\n ];\r\n\r\n static registerNgxBootstrapDatePickerLocales(): Promise {\r\n if (abp.localization.currentLanguage.name === 'en') {\r\n return Promise.resolve(true);\r\n }\r\n\r\n let supportedLocale = new NgxBootstrapLocaleMappingService().map(abp.localization.currentLanguage.name).toLowerCase();\r\n let moduleLocaleName = new NgxBootstrapLocaleMappingService().getModuleName(abp.localization.currentLanguage.name);\r\n\r\n let isLocaleNotSupported = NgxBootstrapDatePickerConfigService._supportedLocales.indexOf(supportedLocale.toLowerCase()) == -1;\r\n if (isLocaleNotSupported) {\r\n console.warn('Not IMPLEMENTED hy lang for dateme picker');\r\n return Promise.resolve(true);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n import(`/node_modules/ngx-bootstrap/chronos/esm2020/i18n/${supportedLocale}.mjs`)\r\n .then(module => {\r\n defineLocale(abp.localization.currentLanguage.name.toLowerCase(), module[`${moduleLocaleName}Locale`]);\r\n resolve(true);\r\n }, () => {\r\n console.error(`Not FOUND ${supportedLocale} lang for dateme picker`);\r\n return Promise.resolve(true);\r\n });\r\n });\r\n }\r\n}\r\n","/**\n * @license Angular v14.3.0\n * (c) 2010-2022 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { ɵAnimationGroupPlayer, NoopAnimationPlayer, AUTO_STYLE, ɵPRE_STYLE, sequence, style } from '@angular/animations';\nimport * as i0 from '@angular/core';\nimport { ɵRuntimeError, Injectable } from '@angular/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 */\nconst LINE_START = '\\n - ';\nfunction invalidTimingValue(exp) {\n return new ɵRuntimeError(3000 /* RuntimeErrorCode.INVALID_TIMING_VALUE */, ngDevMode && `The provided timing value \"${exp}\" is invalid.`);\n}\nfunction negativeStepValue() {\n return new ɵRuntimeError(3100 /* RuntimeErrorCode.NEGATIVE_STEP_VALUE */, ngDevMode && 'Duration values below 0 are not allowed for this animation step.');\n}\nfunction negativeDelayValue() {\n return new ɵRuntimeError(3101 /* RuntimeErrorCode.NEGATIVE_DELAY_VALUE */, ngDevMode && 'Delay values below 0 are not allowed for this animation step.');\n}\nfunction invalidStyleParams(varName) {\n return new ɵRuntimeError(3001 /* RuntimeErrorCode.INVALID_STYLE_PARAMS */, ngDevMode &&\n `Unable to resolve the local animation param ${varName} in the given list of values`);\n}\nfunction invalidParamValue(varName) {\n return new ɵRuntimeError(3003 /* RuntimeErrorCode.INVALID_PARAM_VALUE */, ngDevMode && `Please provide a value for the animation param ${varName}`);\n}\nfunction invalidNodeType(nodeType) {\n return new ɵRuntimeError(3004 /* RuntimeErrorCode.INVALID_NODE_TYPE */, ngDevMode && `Unable to resolve animation metadata node #${nodeType}`);\n}\nfunction invalidCssUnitValue(userProvidedProperty, value) {\n return new ɵRuntimeError(3005 /* RuntimeErrorCode.INVALID_CSS_UNIT_VALUE */, ngDevMode && `Please provide a CSS unit value for ${userProvidedProperty}:${value}`);\n}\nfunction invalidTrigger() {\n return new ɵRuntimeError(3006 /* RuntimeErrorCode.INVALID_TRIGGER */, ngDevMode &&\n 'animation triggers cannot be prefixed with an `@` sign (e.g. trigger(\\'@foo\\', [...]))');\n}\nfunction invalidDefinition() {\n return new ɵRuntimeError(3007 /* RuntimeErrorCode.INVALID_DEFINITION */, ngDevMode && 'only state() and transition() definitions can sit inside of a trigger()');\n}\nfunction invalidState(metadataName, missingSubs) {\n return new ɵRuntimeError(3008 /* RuntimeErrorCode.INVALID_STATE */, ngDevMode &&\n `state(\"${metadataName}\", ...) must define default values for all the following style substitutions: ${missingSubs.join(', ')}`);\n}\nfunction invalidStyleValue(value) {\n return new ɵRuntimeError(3002 /* RuntimeErrorCode.INVALID_STYLE_VALUE */, ngDevMode && `The provided style string value ${value} is not allowed.`);\n}\nfunction invalidProperty(prop) {\n return new ɵRuntimeError(3009 /* RuntimeErrorCode.INVALID_PROPERTY */, ngDevMode &&\n `The provided animation property \"${prop}\" is not a supported CSS property for animations`);\n}\nfunction invalidParallelAnimation(prop, firstStart, firstEnd, secondStart, secondEnd) {\n return new ɵRuntimeError(3010 /* RuntimeErrorCode.INVALID_PARALLEL_ANIMATION */, ngDevMode &&\n `The CSS property \"${prop}\" that exists between the times of \"${firstStart}ms\" and \"${firstEnd}ms\" is also being animated in a parallel animation between the times of \"${secondStart}ms\" and \"${secondEnd}ms\"`);\n}\nfunction invalidKeyframes() {\n return new ɵRuntimeError(3011 /* RuntimeErrorCode.INVALID_KEYFRAMES */, ngDevMode && `keyframes() must be placed inside of a call to animate()`);\n}\nfunction invalidOffset() {\n return new ɵRuntimeError(3012 /* RuntimeErrorCode.INVALID_OFFSET */, ngDevMode && `Please ensure that all keyframe offsets are between 0 and 1`);\n}\nfunction keyframeOffsetsOutOfOrder() {\n return new ɵRuntimeError(3200 /* RuntimeErrorCode.KEYFRAME_OFFSETS_OUT_OF_ORDER */, ngDevMode && `Please ensure that all keyframe offsets are in order`);\n}\nfunction keyframesMissingOffsets() {\n return new ɵRuntimeError(3202 /* RuntimeErrorCode.KEYFRAMES_MISSING_OFFSETS */, ngDevMode && `Not all style() steps within the declared keyframes() contain offsets`);\n}\nfunction invalidStagger() {\n return new ɵRuntimeError(3013 /* RuntimeErrorCode.INVALID_STAGGER */, ngDevMode && `stagger() can only be used inside of query()`);\n}\nfunction invalidQuery(selector) {\n return new ɵRuntimeError(3014 /* RuntimeErrorCode.INVALID_QUERY */, ngDevMode &&\n `\\`query(\"${selector}\")\\` returned zero elements. (Use \\`query(\"${selector}\", { optional: true })\\` if you wish to allow this.)`);\n}\nfunction invalidExpression(expr) {\n return new ɵRuntimeError(3015 /* RuntimeErrorCode.INVALID_EXPRESSION */, ngDevMode && `The provided transition expression \"${expr}\" is not supported`);\n}\nfunction invalidTransitionAlias(alias) {\n return new ɵRuntimeError(3016 /* RuntimeErrorCode.INVALID_TRANSITION_ALIAS */, ngDevMode && `The transition alias value \"${alias}\" is not supported`);\n}\nfunction validationFailed(errors) {\n return new ɵRuntimeError(3500 /* RuntimeErrorCode.VALIDATION_FAILED */, ngDevMode && `animation validation failed:\\n${errors.map(err => err.message).join('\\n')}`);\n}\nfunction buildingFailed(errors) {\n return new ɵRuntimeError(3501 /* RuntimeErrorCode.BUILDING_FAILED */, ngDevMode && `animation building failed:\\n${errors.map(err => err.message).join('\\n')}`);\n}\nfunction triggerBuildFailed(name, errors) {\n return new ɵRuntimeError(3404 /* RuntimeErrorCode.TRIGGER_BUILD_FAILED */, ngDevMode &&\n `The animation trigger \"${name}\" has failed to build due to the following errors:\\n - ${errors.map(err => err.message).join('\\n - ')}`);\n}\nfunction animationFailed(errors) {\n return new ɵRuntimeError(3502 /* RuntimeErrorCode.ANIMATION_FAILED */, ngDevMode &&\n `Unable to animate due to the following errors:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`);\n}\nfunction registerFailed(errors) {\n return new ɵRuntimeError(3503 /* RuntimeErrorCode.REGISTRATION_FAILED */, ngDevMode &&\n `Unable to build the animation due to the following errors: ${errors.map(err => err.message).join('\\n')}`);\n}\nfunction missingOrDestroyedAnimation() {\n return new ɵRuntimeError(3300 /* RuntimeErrorCode.MISSING_OR_DESTROYED_ANIMATION */, ngDevMode && 'The requested animation doesn\\'t exist or has already been destroyed');\n}\nfunction createAnimationFailed(errors) {\n return new ɵRuntimeError(3504 /* RuntimeErrorCode.CREATE_ANIMATION_FAILED */, ngDevMode &&\n `Unable to create the animation due to the following errors:${errors.map(err => err.message).join('\\n')}`);\n}\nfunction missingPlayer(id) {\n return new ɵRuntimeError(3301 /* RuntimeErrorCode.MISSING_PLAYER */, ngDevMode && `Unable to find the timeline player referenced by ${id}`);\n}\nfunction missingTrigger(phase, name) {\n return new ɵRuntimeError(3302 /* RuntimeErrorCode.MISSING_TRIGGER */, ngDevMode &&\n `Unable to listen on the animation trigger event \"${phase}\" because the animation trigger \"${name}\" doesn\\'t exist!`);\n}\nfunction missingEvent(name) {\n return new ɵRuntimeError(3303 /* RuntimeErrorCode.MISSING_EVENT */, ngDevMode &&\n `Unable to listen on the animation trigger \"${name}\" because the provided event is undefined!`);\n}\nfunction unsupportedTriggerEvent(phase, name) {\n return new ɵRuntimeError(3400 /* RuntimeErrorCode.UNSUPPORTED_TRIGGER_EVENT */, ngDevMode &&\n `The provided animation trigger event \"${phase}\" for the animation trigger \"${name}\" is not supported!`);\n}\nfunction unregisteredTrigger(name) {\n return new ɵRuntimeError(3401 /* RuntimeErrorCode.UNREGISTERED_TRIGGER */, ngDevMode && `The provided animation trigger \"${name}\" has not been registered!`);\n}\nfunction triggerTransitionsFailed(errors) {\n return new ɵRuntimeError(3402 /* RuntimeErrorCode.TRIGGER_TRANSITIONS_FAILED */, ngDevMode &&\n `Unable to process animations due to the following failed trigger transitions\\n ${errors.map(err => err.message).join('\\n')}`);\n}\nfunction triggerParsingFailed(name, errors) {\n return new ɵRuntimeError(3403 /* RuntimeErrorCode.TRIGGER_PARSING_FAILED */, ngDevMode &&\n `Animation parsing for the ${name} trigger have failed:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`);\n}\nfunction transitionFailed(name, errors) {\n return new ɵRuntimeError(3505 /* RuntimeErrorCode.TRANSITION_FAILED */, ngDevMode && `@${name} has failed due to:\\n ${errors.map(err => err.message).join('\\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 * Set of all animatable CSS properties\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties\n */\nconst ANIMATABLE_PROP_SET = new Set([\n '-moz-outline-radius',\n '-moz-outline-radius-bottomleft',\n '-moz-outline-radius-bottomright',\n '-moz-outline-radius-topleft',\n '-moz-outline-radius-topright',\n '-ms-grid-columns',\n '-ms-grid-rows',\n '-webkit-line-clamp',\n '-webkit-text-fill-color',\n '-webkit-text-stroke',\n '-webkit-text-stroke-color',\n 'accent-color',\n 'all',\n 'backdrop-filter',\n 'background',\n 'background-color',\n 'background-position',\n 'background-size',\n 'block-size',\n 'border',\n 'border-block-end',\n 'border-block-end-color',\n 'border-block-end-width',\n 'border-block-start',\n 'border-block-start-color',\n 'border-block-start-width',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-width',\n 'border-color',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-image-outset',\n 'border-image-slice',\n 'border-image-width',\n 'border-inline-end',\n 'border-inline-end-color',\n 'border-inline-end-width',\n 'border-inline-start',\n 'border-inline-start-color',\n 'border-inline-start-width',\n 'border-left',\n 'border-left-color',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-width',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-shadow',\n 'caret-color',\n 'clip',\n 'clip-path',\n 'color',\n 'column-count',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-width',\n 'column-width',\n 'columns',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-grow',\n 'flex-shrink',\n 'font',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-variation-settings',\n 'font-weight',\n 'gap',\n 'grid-column-gap',\n 'grid-gap',\n 'grid-row-gap',\n 'grid-template-columns',\n 'grid-template-rows',\n 'height',\n 'inline-size',\n 'input-security',\n 'inset',\n 'inset-block',\n 'inset-block-end',\n 'inset-block-start',\n 'inset-inline',\n 'inset-inline-end',\n 'inset-inline-start',\n 'left',\n 'letter-spacing',\n 'line-clamp',\n 'line-height',\n 'margin',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'mask',\n 'mask-border',\n 'mask-position',\n 'mask-size',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-lines',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'object-position',\n 'offset',\n 'offset-anchor',\n 'offset-distance',\n 'offset-path',\n 'offset-position',\n 'offset-rotate',\n 'opacity',\n 'order',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-width',\n 'padding',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'perspective',\n 'perspective-origin',\n 'right',\n 'rotate',\n 'row-gap',\n 'scale',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-coordinate',\n 'scroll-snap-destination',\n 'scrollbar-color',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'tab-size',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-indent',\n 'text-shadow',\n 'text-underline-offset',\n 'top',\n 'transform',\n 'transform-origin',\n 'translate',\n 'vertical-align',\n 'visibility',\n 'width',\n 'word-spacing',\n 'z-index',\n 'zoom',\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 */\nfunction isBrowser() {\n return (typeof window !== 'undefined' && typeof window.document !== 'undefined');\n}\nfunction isNode() {\n // Checking only for `process` isn't enough to identify whether or not we're in a Node\n // environment, because Webpack by default will polyfill the `process`. While we can discern\n // that Webpack polyfilled it by looking at `process.browser`, it's very Webpack-specific and\n // might not be future-proof. Instead we look at the stringified version of `process` which\n // is `[object process]` in Node and `[object Object]` when polyfilled.\n return typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n}\nfunction optimizeGroupPlayer(players) {\n switch (players.length) {\n case 0:\n return new NoopAnimationPlayer();\n case 1:\n return players[0];\n default:\n return new ɵAnimationGroupPlayer(players);\n }\n}\nfunction normalizeKeyframes$1(driver, normalizer, element, keyframes, preStyles = new Map(), postStyles = new Map()) {\n const errors = [];\n const normalizedKeyframes = [];\n let previousOffset = -1;\n let previousKeyframe = null;\n keyframes.forEach(kf => {\n const offset = kf.get('offset');\n const isSameOffset = offset == previousOffset;\n const normalizedKeyframe = (isSameOffset && previousKeyframe) || new Map();\n kf.forEach((val, prop) => {\n let normalizedProp = prop;\n let normalizedValue = val;\n if (prop !== 'offset') {\n normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);\n switch (normalizedValue) {\n case ɵPRE_STYLE:\n normalizedValue = preStyles.get(prop);\n break;\n case AUTO_STYLE:\n normalizedValue = postStyles.get(prop);\n break;\n default:\n normalizedValue =\n normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);\n break;\n }\n }\n normalizedKeyframe.set(normalizedProp, normalizedValue);\n });\n if (!isSameOffset) {\n normalizedKeyframes.push(normalizedKeyframe);\n }\n previousKeyframe = normalizedKeyframe;\n previousOffset = offset;\n });\n if (errors.length) {\n throw animationFailed(errors);\n }\n return normalizedKeyframes;\n}\nfunction listenOnPlayer(player, eventName, event, callback) {\n switch (eventName) {\n case 'start':\n player.onStart(() => callback(event && copyAnimationEvent(event, 'start', player)));\n break;\n case 'done':\n player.onDone(() => callback(event && copyAnimationEvent(event, 'done', player)));\n break;\n case 'destroy':\n player.onDestroy(() => callback(event && copyAnimationEvent(event, 'destroy', player)));\n break;\n }\n}\nfunction copyAnimationEvent(e, phaseName, player) {\n const totalTime = player.totalTime;\n const disabled = player.disabled ? true : false;\n const event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime, disabled);\n const data = e['_data'];\n if (data != null) {\n event['_data'] = data;\n }\n return event;\n}\nfunction makeAnimationEvent(element, triggerName, fromState, toState, phaseName = '', totalTime = 0, disabled) {\n return { element, triggerName, fromState, toState, phaseName, totalTime, disabled: !!disabled };\n}\nfunction getOrSetDefaultValue(map, key, defaultValue) {\n let value = map.get(key);\n if (!value) {\n map.set(key, value = defaultValue);\n }\n return value;\n}\nfunction parseTimelineCommand(command) {\n const separatorPos = command.indexOf(':');\n const id = command.substring(1, separatorPos);\n const action = command.slice(separatorPos + 1);\n return [id, action];\n}\nlet _contains = (elm1, elm2) => false;\nlet _query = (element, selector, multi) => {\n return [];\n};\nlet _documentElement = null;\nfunction getParentElement(element) {\n const parent = element.parentNode || element.host; // consider host to support shadow DOM\n if (parent === _documentElement) {\n return null;\n }\n return parent;\n}\n// Define utility methods for browsers and platform-server(domino) where Element\n// and utility methods exist.\nconst _isNode = isNode();\nif (_isNode || typeof Element !== 'undefined') {\n if (!isBrowser()) {\n _contains = (elm1, elm2) => elm1.contains(elm2);\n }\n else {\n // Read the document element in an IIFE that's been marked pure to avoid a top-level property\n // read that may prevent tree-shaking.\n _documentElement = /* @__PURE__ */ (() => document.documentElement)();\n _contains = (elm1, elm2) => {\n while (elm2) {\n if (elm2 === elm1) {\n return true;\n }\n elm2 = getParentElement(elm2);\n }\n return false;\n };\n }\n _query = (element, selector, multi) => {\n if (multi) {\n return Array.from(element.querySelectorAll(selector));\n }\n const elem = element.querySelector(selector);\n return elem ? [elem] : [];\n };\n}\nfunction containsVendorPrefix(prop) {\n // Webkit is the only real popular vendor prefix nowadays\n // cc: http://shouldiprefix.com/\n return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit\n}\nlet _CACHED_BODY = null;\nlet _IS_WEBKIT = false;\nfunction validateStyleProperty(prop) {\n if (!_CACHED_BODY) {\n _CACHED_BODY = getBodyNode() || {};\n _IS_WEBKIT = _CACHED_BODY.style ? ('WebkitAppearance' in _CACHED_BODY.style) : false;\n }\n let result = true;\n if (_CACHED_BODY.style && !containsVendorPrefix(prop)) {\n result = prop in _CACHED_BODY.style;\n if (!result && _IS_WEBKIT) {\n const camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.slice(1);\n result = camelProp in _CACHED_BODY.style;\n }\n }\n return result;\n}\nfunction validateWebAnimatableStyleProperty(prop) {\n return ANIMATABLE_PROP_SET.has(prop);\n}\nfunction getBodyNode() {\n if (typeof document != 'undefined') {\n return document.body;\n }\n return null;\n}\nconst containsElement = _contains;\nconst invokeQuery = _query;\nfunction hypenatePropsKeys(original) {\n const newMap = new Map();\n original.forEach((val, prop) => {\n const newProp = prop.replace(/([a-z])([A-Z])/g, '$1-$2');\n newMap.set(newProp, val);\n });\n return newMap;\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 * @publicApi\n */\nclass NoopAnimationDriver {\n validateStyleProperty(prop) {\n return validateStyleProperty(prop);\n }\n matchesElement(_element, _selector) {\n // This method is deprecated and no longer in use so we return false.\n return false;\n }\n containsElement(elm1, elm2) {\n return containsElement(elm1, elm2);\n }\n getParentElement(element) {\n return getParentElement(element);\n }\n query(element, selector, multi) {\n return invokeQuery(element, selector, multi);\n }\n computeStyle(element, prop, defaultValue) {\n return defaultValue || '';\n }\n animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) {\n return new NoopAnimationPlayer(duration, delay);\n }\n}\nNoopAnimationDriver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationDriver, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nNoopAnimationDriver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationDriver });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationDriver, decorators: [{\n type: Injectable\n }] });\n/**\n * @publicApi\n */\nclass AnimationDriver {\n}\nAnimationDriver.NOOP = ( /* @__PURE__ */new NoopAnimationDriver());\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 ONE_SECOND = 1000;\nconst SUBSTITUTION_EXPR_START = '{{';\nconst SUBSTITUTION_EXPR_END = '}}';\nconst ENTER_CLASSNAME = 'ng-enter';\nconst LEAVE_CLASSNAME = 'ng-leave';\nconst NG_TRIGGER_CLASSNAME = 'ng-trigger';\nconst NG_TRIGGER_SELECTOR = '.ng-trigger';\nconst NG_ANIMATING_CLASSNAME = 'ng-animating';\nconst NG_ANIMATING_SELECTOR = '.ng-animating';\nfunction resolveTimingValue(value) {\n if (typeof value == 'number')\n return value;\n const matches = value.match(/^(-?[\\.\\d]+)(m?s)/);\n if (!matches || matches.length < 2)\n return 0;\n return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n}\nfunction _convertTimeValueToMS(value, unit) {\n switch (unit) {\n case 's':\n return value * ONE_SECOND;\n default: // ms or something else\n return value;\n }\n}\nfunction resolveTiming(timings, errors, allowNegativeValues) {\n return timings.hasOwnProperty('duration') ?\n timings :\n parseTimeExpression(timings, errors, allowNegativeValues);\n}\nfunction parseTimeExpression(exp, errors, allowNegativeValues) {\n const regex = /^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i;\n let duration;\n let delay = 0;\n let easing = '';\n if (typeof exp === 'string') {\n const matches = exp.match(regex);\n if (matches === null) {\n errors.push(invalidTimingValue(exp));\n return { duration: 0, delay: 0, easing: '' };\n }\n duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n const delayMatch = matches[3];\n if (delayMatch != null) {\n delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]);\n }\n const easingVal = matches[5];\n if (easingVal) {\n easing = easingVal;\n }\n }\n else {\n duration = exp;\n }\n if (!allowNegativeValues) {\n let containsErrors = false;\n let startIndex = errors.length;\n if (duration < 0) {\n errors.push(negativeStepValue());\n containsErrors = true;\n }\n if (delay < 0) {\n errors.push(negativeDelayValue());\n containsErrors = true;\n }\n if (containsErrors) {\n errors.splice(startIndex, 0, invalidTimingValue(exp));\n }\n }\n return { duration, delay, easing };\n}\nfunction copyObj(obj, destination = {}) {\n Object.keys(obj).forEach(prop => {\n destination[prop] = obj[prop];\n });\n return destination;\n}\nfunction convertToMap(obj) {\n const styleMap = new Map();\n Object.keys(obj).forEach(prop => {\n const val = obj[prop];\n styleMap.set(prop, val);\n });\n return styleMap;\n}\nfunction normalizeKeyframes(keyframes) {\n if (!keyframes.length) {\n return [];\n }\n if (keyframes[0] instanceof Map) {\n return keyframes;\n }\n return keyframes.map(kf => convertToMap(kf));\n}\nfunction normalizeStyles(styles) {\n const normalizedStyles = new Map();\n if (Array.isArray(styles)) {\n styles.forEach(data => copyStyles(data, normalizedStyles));\n }\n else {\n copyStyles(styles, normalizedStyles);\n }\n return normalizedStyles;\n}\nfunction copyStyles(styles, destination = new Map(), backfill) {\n if (backfill) {\n for (let [prop, val] of backfill) {\n destination.set(prop, val);\n }\n }\n for (let [prop, val] of styles) {\n destination.set(prop, val);\n }\n return destination;\n}\nfunction getStyleAttributeString(element, key, value) {\n // Return the key-value pair string to be added to the style attribute for the\n // given CSS style key.\n if (value) {\n return key + ':' + value + ';';\n }\n else {\n return '';\n }\n}\nfunction writeStyleAttribute(element) {\n // Read the style property of the element and manually reflect it to the\n // style attribute. This is needed because Domino on platform-server doesn't\n // understand the full set of allowed CSS properties and doesn't reflect some\n // of them automatically.\n let styleAttrValue = '';\n for (let i = 0; i < element.style.length; i++) {\n const key = element.style.item(i);\n styleAttrValue += getStyleAttributeString(element, key, element.style.getPropertyValue(key));\n }\n for (const key in element.style) {\n // Skip internal Domino properties that don't need to be reflected.\n if (!element.style.hasOwnProperty(key) || key.startsWith('_')) {\n continue;\n }\n const dashKey = camelCaseToDashCase(key);\n styleAttrValue += getStyleAttributeString(element, dashKey, element.style[key]);\n }\n element.setAttribute('style', styleAttrValue);\n}\nfunction setStyles(element, styles, formerStyles) {\n if (element['style']) {\n styles.forEach((val, prop) => {\n const camelProp = dashCaseToCamelCase(prop);\n if (formerStyles && !formerStyles.has(prop)) {\n formerStyles.set(prop, element.style[camelProp]);\n }\n element.style[camelProp] = val;\n });\n // On the server set the 'style' attribute since it's not automatically reflected.\n if (isNode()) {\n writeStyleAttribute(element);\n }\n }\n}\nfunction eraseStyles(element, styles) {\n if (element['style']) {\n styles.forEach((_, prop) => {\n const camelProp = dashCaseToCamelCase(prop);\n element.style[camelProp] = '';\n });\n // On the server set the 'style' attribute since it's not automatically reflected.\n if (isNode()) {\n writeStyleAttribute(element);\n }\n }\n}\nfunction normalizeAnimationEntry(steps) {\n if (Array.isArray(steps)) {\n if (steps.length == 1)\n return steps[0];\n return sequence(steps);\n }\n return steps;\n}\nfunction validateStyleParams(value, options, errors) {\n const params = options.params || {};\n const matches = extractStyleParams(value);\n if (matches.length) {\n matches.forEach(varName => {\n if (!params.hasOwnProperty(varName)) {\n errors.push(invalidStyleParams(varName));\n }\n });\n }\n}\nconst PARAM_REGEX = new RegExp(`${SUBSTITUTION_EXPR_START}\\\\s*(.+?)\\\\s*${SUBSTITUTION_EXPR_END}`, 'g');\nfunction extractStyleParams(value) {\n let params = [];\n if (typeof value === 'string') {\n let match;\n while (match = PARAM_REGEX.exec(value)) {\n params.push(match[1]);\n }\n PARAM_REGEX.lastIndex = 0;\n }\n return params;\n}\nfunction interpolateParams(value, params, errors) {\n const original = value.toString();\n const str = original.replace(PARAM_REGEX, (_, varName) => {\n let localVal = params[varName];\n // this means that the value was never overridden by the data passed in by the user\n if (localVal == null) {\n errors.push(invalidParamValue(varName));\n localVal = '';\n }\n return localVal.toString();\n });\n // we do this to assert that numeric values stay as they are\n return str == original ? value : str;\n}\nfunction iteratorToArray(iterator) {\n const arr = [];\n let item = iterator.next();\n while (!item.done) {\n arr.push(item.value);\n item = iterator.next();\n }\n return arr;\n}\nconst DASH_CASE_REGEXP = /-+([a-z0-9])/g;\nfunction dashCaseToCamelCase(input) {\n return input.replace(DASH_CASE_REGEXP, (...m) => m[1].toUpperCase());\n}\nfunction camelCaseToDashCase(input) {\n return input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\nfunction allowPreviousPlayerStylesMerge(duration, delay) {\n return duration === 0 || delay === 0;\n}\nfunction balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles) {\n if (previousStyles.size && keyframes.length) {\n let startingKeyframe = keyframes[0];\n let missingStyleProps = [];\n previousStyles.forEach((val, prop) => {\n if (!startingKeyframe.has(prop)) {\n missingStyleProps.push(prop);\n }\n startingKeyframe.set(prop, val);\n });\n if (missingStyleProps.length) {\n for (let i = 1; i < keyframes.length; i++) {\n let kf = keyframes[i];\n missingStyleProps.forEach(prop => kf.set(prop, computeStyle(element, prop)));\n }\n }\n }\n return keyframes;\n}\nfunction visitDslNode(visitor, node, context) {\n switch (node.type) {\n case 7 /* AnimationMetadataType.Trigger */:\n return visitor.visitTrigger(node, context);\n case 0 /* AnimationMetadataType.State */:\n return visitor.visitState(node, context);\n case 1 /* AnimationMetadataType.Transition */:\n return visitor.visitTransition(node, context);\n case 2 /* AnimationMetadataType.Sequence */:\n return visitor.visitSequence(node, context);\n case 3 /* AnimationMetadataType.Group */:\n return visitor.visitGroup(node, context);\n case 4 /* AnimationMetadataType.Animate */:\n return visitor.visitAnimate(node, context);\n case 5 /* AnimationMetadataType.Keyframes */:\n return visitor.visitKeyframes(node, context);\n case 6 /* AnimationMetadataType.Style */:\n return visitor.visitStyle(node, context);\n case 8 /* AnimationMetadataType.Reference */:\n return visitor.visitReference(node, context);\n case 9 /* AnimationMetadataType.AnimateChild */:\n return visitor.visitAnimateChild(node, context);\n case 10 /* AnimationMetadataType.AnimateRef */:\n return visitor.visitAnimateRef(node, context);\n case 11 /* AnimationMetadataType.Query */:\n return visitor.visitQuery(node, context);\n case 12 /* AnimationMetadataType.Stagger */:\n return visitor.visitStagger(node, context);\n default:\n throw invalidNodeType(node.type);\n }\n}\nfunction computeStyle(element, prop) {\n return window.getComputedStyle(element)[prop];\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 NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode;\nfunction createListOfWarnings(warnings) {\n const LINE_START = '\\n - ';\n return `${LINE_START}${warnings.filter(Boolean).map(warning => warning).join(LINE_START)}`;\n}\nfunction warnValidation(warnings) {\n NG_DEV_MODE && console.warn(`animation validation warnings:${createListOfWarnings(warnings)}`);\n}\nfunction warnTriggerBuild(name, warnings) {\n NG_DEV_MODE &&\n console.warn(`The animation trigger \"${name}\" has built with the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction warnRegister(warnings) {\n NG_DEV_MODE &&\n console.warn(`Animation built with the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction triggerParsingWarnings(name, warnings) {\n NG_DEV_MODE &&\n console.warn(`Animation parsing for the ${name} trigger presents the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction pushUnrecognizedPropertiesWarning(warnings, props) {\n if (props.length) {\n warnings.push(`The following provided properties are not recognized: ${props.join(', ')}`);\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 */\nconst ANY_STATE = '*';\nfunction parseTransitionExpr(transitionValue, errors) {\n const expressions = [];\n if (typeof transitionValue == 'string') {\n transitionValue.split(/\\s*,\\s*/).forEach(str => parseInnerTransitionStr(str, expressions, errors));\n }\n else {\n expressions.push(transitionValue);\n }\n return expressions;\n}\nfunction parseInnerTransitionStr(eventStr, expressions, errors) {\n if (eventStr[0] == ':') {\n const result = parseAnimationAlias(eventStr, errors);\n if (typeof result == 'function') {\n expressions.push(result);\n return;\n }\n eventStr = result;\n }\n const match = eventStr.match(/^(\\*|[-\\w]+)\\s*()\\s*(\\*|[-\\w]+)$/);\n if (match == null || match.length < 4) {\n errors.push(invalidExpression(eventStr));\n return expressions;\n }\n const fromState = match[1];\n const separator = match[2];\n const toState = match[3];\n expressions.push(makeLambdaFromStates(fromState, toState));\n const isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE;\n if (separator[0] == '<' && !isFullAnyStateExpr) {\n expressions.push(makeLambdaFromStates(toState, fromState));\n }\n}\nfunction parseAnimationAlias(alias, errors) {\n switch (alias) {\n case ':enter':\n return 'void => *';\n case ':leave':\n return '* => void';\n case ':increment':\n return (fromState, toState) => parseFloat(toState) > parseFloat(fromState);\n case ':decrement':\n return (fromState, toState) => parseFloat(toState) < parseFloat(fromState);\n default:\n errors.push(invalidTransitionAlias(alias));\n return '* => *';\n }\n}\n// DO NOT REFACTOR ... keep the follow set instantiations\n// with the values intact (closure compiler for some reason\n// removes follow-up lines that add the values outside of\n// the constructor...\nconst TRUE_BOOLEAN_VALUES = new Set(['true', '1']);\nconst FALSE_BOOLEAN_VALUES = new Set(['false', '0']);\nfunction makeLambdaFromStates(lhs, rhs) {\n const LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);\n const RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);\n return (fromState, toState) => {\n let lhsMatch = lhs == ANY_STATE || lhs == fromState;\n let rhsMatch = rhs == ANY_STATE || rhs == toState;\n if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') {\n lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);\n }\n if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') {\n rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);\n }\n return lhsMatch && rhsMatch;\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 */\nconst SELF_TOKEN = ':self';\nconst SELF_TOKEN_REGEX = new RegExp(`\\s*${SELF_TOKEN}\\s*,?`, 'g');\n/*\n * [Validation]\n * The visitor code below will traverse the animation AST generated by the animation verb functions\n * (the output is a tree of objects) and attempt to perform a series of validations on the data. The\n * following corner-cases will be validated:\n *\n * 1. Overlap of animations\n * Given that a CSS property cannot be animated in more than one place at the same time, it's\n * important that this behavior is detected and validated. The way in which this occurs is that\n * each time a style property is examined, a string-map containing the property will be updated with\n * the start and end times for when the property is used within an animation step.\n *\n * If there are two or more parallel animations that are currently running (these are invoked by the\n * group()) on the same element then the validator will throw an error. Since the start/end timing\n * values are collected for each property then if the current animation step is animating the same\n * property and its timing values fall anywhere into the window of time that the property is\n * currently being animated within then this is what causes an error.\n *\n * 2. Timing values\n * The validator will validate to see if a timing value of `duration delay easing` or\n * `durationNumber` is valid or not.\n *\n * (note that upon validation the code below will replace the timing data with an object containing\n * {duration,delay,easing}.\n *\n * 3. Offset Validation\n * Each of the style() calls are allowed to have an offset value when placed inside of keyframes().\n * Offsets within keyframes() are considered valid when:\n *\n * - No offsets are used at all\n * - Each style() entry contains an offset value\n * - Each offset is between 0 and 1\n * - Each offset is greater to or equal than the previous one\n *\n * Otherwise an error will be thrown.\n */\nfunction buildAnimationAst(driver, metadata, errors, warnings) {\n return new AnimationAstBuilderVisitor(driver).build(metadata, errors, warnings);\n}\nconst ROOT_SELECTOR = '';\nclass AnimationAstBuilderVisitor {\n constructor(_driver) {\n this._driver = _driver;\n }\n build(metadata, errors, warnings) {\n const context = new AnimationAstBuilderContext(errors);\n this._resetContextStyleTimingState(context);\n const ast = visitDslNode(this, normalizeAnimationEntry(metadata), context);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (context.unsupportedCSSPropertiesFound.size) {\n pushUnrecognizedPropertiesWarning(warnings, [...context.unsupportedCSSPropertiesFound.keys()]);\n }\n }\n return ast;\n }\n _resetContextStyleTimingState(context) {\n context.currentQuerySelector = ROOT_SELECTOR;\n context.collectedStyles = new Map();\n context.collectedStyles.set(ROOT_SELECTOR, new Map());\n context.currentTime = 0;\n }\n visitTrigger(metadata, context) {\n let queryCount = context.queryCount = 0;\n let depCount = context.depCount = 0;\n const states = [];\n const transitions = [];\n if (metadata.name.charAt(0) == '@') {\n context.errors.push(invalidTrigger());\n }\n metadata.definitions.forEach(def => {\n this._resetContextStyleTimingState(context);\n if (def.type == 0 /* AnimationMetadataType.State */) {\n const stateDef = def;\n const name = stateDef.name;\n name.toString().split(/\\s*,\\s*/).forEach(n => {\n stateDef.name = n;\n states.push(this.visitState(stateDef, context));\n });\n stateDef.name = name;\n }\n else if (def.type == 1 /* AnimationMetadataType.Transition */) {\n const transition = this.visitTransition(def, context);\n queryCount += transition.queryCount;\n depCount += transition.depCount;\n transitions.push(transition);\n }\n else {\n context.errors.push(invalidDefinition());\n }\n });\n return {\n type: 7 /* AnimationMetadataType.Trigger */,\n name: metadata.name,\n states,\n transitions,\n queryCount,\n depCount,\n options: null\n };\n }\n visitState(metadata, context) {\n const styleAst = this.visitStyle(metadata.styles, context);\n const astParams = (metadata.options && metadata.options.params) || null;\n if (styleAst.containsDynamicStyles) {\n const missingSubs = new Set();\n const params = astParams || {};\n styleAst.styles.forEach(style => {\n if (style instanceof Map) {\n style.forEach(value => {\n extractStyleParams(value).forEach(sub => {\n if (!params.hasOwnProperty(sub)) {\n missingSubs.add(sub);\n }\n });\n });\n }\n });\n if (missingSubs.size) {\n const missingSubsArr = iteratorToArray(missingSubs.values());\n context.errors.push(invalidState(metadata.name, missingSubsArr));\n }\n }\n return {\n type: 0 /* AnimationMetadataType.State */,\n name: metadata.name,\n style: styleAst,\n options: astParams ? { params: astParams } : null\n };\n }\n visitTransition(metadata, context) {\n context.queryCount = 0;\n context.depCount = 0;\n const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n const matchers = parseTransitionExpr(metadata.expr, context.errors);\n return {\n type: 1 /* AnimationMetadataType.Transition */,\n matchers,\n animation,\n queryCount: context.queryCount,\n depCount: context.depCount,\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitSequence(metadata, context) {\n return {\n type: 2 /* AnimationMetadataType.Sequence */,\n steps: metadata.steps.map(s => visitDslNode(this, s, context)),\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitGroup(metadata, context) {\n const currentTime = context.currentTime;\n let furthestTime = 0;\n const steps = metadata.steps.map(step => {\n context.currentTime = currentTime;\n const innerAst = visitDslNode(this, step, context);\n furthestTime = Math.max(furthestTime, context.currentTime);\n return innerAst;\n });\n context.currentTime = furthestTime;\n return {\n type: 3 /* AnimationMetadataType.Group */,\n steps,\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitAnimate(metadata, context) {\n const timingAst = constructTimingAst(metadata.timings, context.errors);\n context.currentAnimateTimings = timingAst;\n let styleAst;\n let styleMetadata = metadata.styles ? metadata.styles : style({});\n if (styleMetadata.type == 5 /* AnimationMetadataType.Keyframes */) {\n styleAst = this.visitKeyframes(styleMetadata, context);\n }\n else {\n let styleMetadata = metadata.styles;\n let isEmpty = false;\n if (!styleMetadata) {\n isEmpty = true;\n const newStyleData = {};\n if (timingAst.easing) {\n newStyleData['easing'] = timingAst.easing;\n }\n styleMetadata = style(newStyleData);\n }\n context.currentTime += timingAst.duration + timingAst.delay;\n const _styleAst = this.visitStyle(styleMetadata, context);\n _styleAst.isEmptyStep = isEmpty;\n styleAst = _styleAst;\n }\n context.currentAnimateTimings = null;\n return {\n type: 4 /* AnimationMetadataType.Animate */,\n timings: timingAst,\n style: styleAst,\n options: null\n };\n }\n visitStyle(metadata, context) {\n const ast = this._makeStyleAst(metadata, context);\n this._validateStyleAst(ast, context);\n return ast;\n }\n _makeStyleAst(metadata, context) {\n const styles = [];\n const metadataStyles = Array.isArray(metadata.styles) ? metadata.styles : [metadata.styles];\n for (let styleTuple of metadataStyles) {\n if (typeof styleTuple === 'string') {\n if (styleTuple === AUTO_STYLE) {\n styles.push(styleTuple);\n }\n else {\n context.errors.push(invalidStyleValue(styleTuple));\n }\n }\n else {\n styles.push(convertToMap(styleTuple));\n }\n }\n let containsDynamicStyles = false;\n let collectedEasing = null;\n styles.forEach(styleData => {\n if (styleData instanceof Map) {\n if (styleData.has('easing')) {\n collectedEasing = styleData.get('easing');\n styleData.delete('easing');\n }\n if (!containsDynamicStyles) {\n for (let value of styleData.values()) {\n if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) {\n containsDynamicStyles = true;\n break;\n }\n }\n }\n }\n });\n return {\n type: 6 /* AnimationMetadataType.Style */,\n styles,\n easing: collectedEasing,\n offset: metadata.offset,\n containsDynamicStyles,\n options: null\n };\n }\n _validateStyleAst(ast, context) {\n const timings = context.currentAnimateTimings;\n let endTime = context.currentTime;\n let startTime = context.currentTime;\n if (timings && startTime > 0) {\n startTime -= timings.duration + timings.delay;\n }\n ast.styles.forEach(tuple => {\n if (typeof tuple === 'string')\n return;\n tuple.forEach((value, prop) => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._driver.validateStyleProperty(prop)) {\n tuple.delete(prop);\n context.unsupportedCSSPropertiesFound.add(prop);\n return;\n }\n }\n // This is guaranteed to have a defined Map at this querySelector location making it\n // safe to add the assertion here. It is set as a default empty map in prior methods.\n const collectedStyles = context.collectedStyles.get(context.currentQuerySelector);\n const collectedEntry = collectedStyles.get(prop);\n let updateCollectedStyle = true;\n if (collectedEntry) {\n if (startTime != endTime && startTime >= collectedEntry.startTime &&\n endTime <= collectedEntry.endTime) {\n context.errors.push(invalidParallelAnimation(prop, collectedEntry.startTime, collectedEntry.endTime, startTime, endTime));\n updateCollectedStyle = false;\n }\n // we always choose the smaller start time value since we\n // want to have a record of the entire animation window where\n // the style property is being animated in between\n startTime = collectedEntry.startTime;\n }\n if (updateCollectedStyle) {\n collectedStyles.set(prop, { startTime, endTime });\n }\n if (context.options) {\n validateStyleParams(value, context.options, context.errors);\n }\n });\n });\n }\n visitKeyframes(metadata, context) {\n const ast = { type: 5 /* AnimationMetadataType.Keyframes */, styles: [], options: null };\n if (!context.currentAnimateTimings) {\n context.errors.push(invalidKeyframes());\n return ast;\n }\n const MAX_KEYFRAME_OFFSET = 1;\n let totalKeyframesWithOffsets = 0;\n const offsets = [];\n let offsetsOutOfOrder = false;\n let keyframesOutOfRange = false;\n let previousOffset = 0;\n const keyframes = metadata.steps.map(styles => {\n const style = this._makeStyleAst(styles, context);\n let offsetVal = style.offset != null ? style.offset : consumeOffset(style.styles);\n let offset = 0;\n if (offsetVal != null) {\n totalKeyframesWithOffsets++;\n offset = style.offset = offsetVal;\n }\n keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1;\n offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset;\n previousOffset = offset;\n offsets.push(offset);\n return style;\n });\n if (keyframesOutOfRange) {\n context.errors.push(invalidOffset());\n }\n if (offsetsOutOfOrder) {\n context.errors.push(keyframeOffsetsOutOfOrder());\n }\n const length = metadata.steps.length;\n let generatedOffset = 0;\n if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {\n context.errors.push(keyframesMissingOffsets());\n }\n else if (totalKeyframesWithOffsets == 0) {\n generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);\n }\n const limit = length - 1;\n const currentTime = context.currentTime;\n const currentAnimateTimings = context.currentAnimateTimings;\n const animateDuration = currentAnimateTimings.duration;\n keyframes.forEach((kf, i) => {\n const offset = generatedOffset > 0 ? (i == limit ? 1 : (generatedOffset * i)) : offsets[i];\n const durationUpToThisFrame = offset * animateDuration;\n context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame;\n currentAnimateTimings.duration = durationUpToThisFrame;\n this._validateStyleAst(kf, context);\n kf.offset = offset;\n ast.styles.push(kf);\n });\n return ast;\n }\n visitReference(metadata, context) {\n return {\n type: 8 /* AnimationMetadataType.Reference */,\n animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitAnimateChild(metadata, context) {\n context.depCount++;\n return {\n type: 9 /* AnimationMetadataType.AnimateChild */,\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitAnimateRef(metadata, context) {\n return {\n type: 10 /* AnimationMetadataType.AnimateRef */,\n animation: this.visitReference(metadata.animation, context),\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitQuery(metadata, context) {\n const parentSelector = context.currentQuerySelector;\n const options = (metadata.options || {});\n context.queryCount++;\n context.currentQuery = metadata;\n const [selector, includeSelf] = normalizeSelector(metadata.selector);\n context.currentQuerySelector =\n parentSelector.length ? (parentSelector + ' ' + selector) : selector;\n getOrSetDefaultValue(context.collectedStyles, context.currentQuerySelector, new Map());\n const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n context.currentQuery = null;\n context.currentQuerySelector = parentSelector;\n return {\n type: 11 /* AnimationMetadataType.Query */,\n selector,\n limit: options.limit || 0,\n optional: !!options.optional,\n includeSelf,\n animation,\n originalSelector: metadata.selector,\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitStagger(metadata, context) {\n if (!context.currentQuery) {\n context.errors.push(invalidStagger());\n }\n const timings = metadata.timings === 'full' ?\n { duration: 0, delay: 0, easing: 'full' } :\n resolveTiming(metadata.timings, context.errors, true);\n return {\n type: 12 /* AnimationMetadataType.Stagger */,\n animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n timings,\n options: null\n };\n }\n}\nfunction normalizeSelector(selector) {\n const hasAmpersand = selector.split(/\\s*,\\s*/).find(token => token == SELF_TOKEN) ? true : false;\n if (hasAmpersand) {\n selector = selector.replace(SELF_TOKEN_REGEX, '');\n }\n // Note: the :enter and :leave aren't normalized here since those\n // selectors are filled in at runtime during timeline building\n selector = selector.replace(/@\\*/g, NG_TRIGGER_SELECTOR)\n .replace(/@\\w+/g, match => NG_TRIGGER_SELECTOR + '-' + match.slice(1))\n .replace(/:animating/g, NG_ANIMATING_SELECTOR);\n return [selector, hasAmpersand];\n}\nfunction normalizeParams(obj) {\n return obj ? copyObj(obj) : null;\n}\nclass AnimationAstBuilderContext {\n constructor(errors) {\n this.errors = errors;\n this.queryCount = 0;\n this.depCount = 0;\n this.currentTransition = null;\n this.currentQuery = null;\n this.currentQuerySelector = null;\n this.currentAnimateTimings = null;\n this.currentTime = 0;\n this.collectedStyles = new Map();\n this.options = null;\n this.unsupportedCSSPropertiesFound = new Set();\n }\n}\nfunction consumeOffset(styles) {\n if (typeof styles == 'string')\n return null;\n let offset = null;\n if (Array.isArray(styles)) {\n styles.forEach(styleTuple => {\n if (styleTuple instanceof Map && styleTuple.has('offset')) {\n const obj = styleTuple;\n offset = parseFloat(obj.get('offset'));\n obj.delete('offset');\n }\n });\n }\n else if (styles instanceof Map && styles.has('offset')) {\n const obj = styles;\n offset = parseFloat(obj.get('offset'));\n obj.delete('offset');\n }\n return offset;\n}\nfunction constructTimingAst(value, errors) {\n if (value.hasOwnProperty('duration')) {\n return value;\n }\n if (typeof value == 'number') {\n const duration = resolveTiming(value, errors).duration;\n return makeTimingAst(duration, 0, '');\n }\n const strValue = value;\n const isDynamic = strValue.split(/\\s+/).some(v => v.charAt(0) == '{' && v.charAt(1) == '{');\n if (isDynamic) {\n const ast = makeTimingAst(0, 0, '');\n ast.dynamic = true;\n ast.strValue = strValue;\n return ast;\n }\n const timings = resolveTiming(strValue, errors);\n return makeTimingAst(timings.duration, timings.delay, timings.easing);\n}\nfunction normalizeAnimationOptions(options) {\n if (options) {\n options = copyObj(options);\n if (options['params']) {\n options['params'] = normalizeParams(options['params']);\n }\n }\n else {\n options = {};\n }\n return options;\n}\nfunction makeTimingAst(duration, delay, easing) {\n return { duration, delay, easing };\n}\n\nfunction createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay, easing = null, subTimeline = false) {\n return {\n type: 1 /* AnimationTransitionInstructionType.TimelineAnimation */,\n element,\n keyframes,\n preStyleProps,\n postStyleProps,\n duration,\n delay,\n totalTime: duration + delay,\n easing,\n subTimeline\n };\n}\n\nclass ElementInstructionMap {\n constructor() {\n this._map = new Map();\n }\n get(element) {\n return this._map.get(element) || [];\n }\n append(element, instructions) {\n let existingInstructions = this._map.get(element);\n if (!existingInstructions) {\n this._map.set(element, existingInstructions = []);\n }\n existingInstructions.push(...instructions);\n }\n has(element) {\n return this._map.has(element);\n }\n clear() {\n this._map.clear();\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 */\nconst ONE_FRAME_IN_MILLISECONDS = 1;\nconst ENTER_TOKEN = ':enter';\nconst ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g');\nconst LEAVE_TOKEN = ':leave';\nconst LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g');\n/*\n * The code within this file aims to generate web-animations-compatible keyframes from Angular's\n * animation DSL code.\n *\n * The code below will be converted from:\n *\n * ```\n * sequence([\n * style({ opacity: 0 }),\n * animate(1000, style({ opacity: 0 }))\n * ])\n * ```\n *\n * To:\n * ```\n * keyframes = [{ opacity: 0, offset: 0 }, { opacity: 1, offset: 1 }]\n * duration = 1000\n * delay = 0\n * easing = ''\n * ```\n *\n * For this operation to cover the combination of animation verbs (style, animate, group, etc...) a\n * combination of AST traversal and merge-sort-like algorithms are used.\n *\n * [AST Traversal]\n * Each of the animation verbs, when executed, will return an string-map object representing what\n * type of action it is (style, animate, group, etc...) and the data associated with it. This means\n * that when functional composition mix of these functions is evaluated (like in the example above)\n * then it will end up producing a tree of objects representing the animation itself.\n *\n * When this animation object tree is processed by the visitor code below it will visit each of the\n * verb statements within the visitor. And during each visit it will build the context of the\n * animation keyframes by interacting with the `TimelineBuilder`.\n *\n * [TimelineBuilder]\n * This class is responsible for tracking the styles and building a series of keyframe objects for a\n * timeline between a start and end time. The builder starts off with an initial timeline and each\n * time the AST comes across a `group()`, `keyframes()` or a combination of the two within a\n * `sequence()` then it will generate a sub timeline for each step as well as a new one after\n * they are complete.\n *\n * As the AST is traversed, the timing state on each of the timelines will be incremented. If a sub\n * timeline was created (based on one of the cases above) then the parent timeline will attempt to\n * merge the styles used within the sub timelines into itself (only with group() this will happen).\n * This happens with a merge operation (much like how the merge works in mergeSort) and it will only\n * copy the most recently used styles from the sub timelines into the parent timeline. This ensures\n * that if the styles are used later on in another phase of the animation then they will be the most\n * up-to-date values.\n *\n * [How Missing Styles Are Updated]\n * Each timeline has a `backFill` property which is responsible for filling in new styles into\n * already processed keyframes if a new style shows up later within the animation sequence.\n *\n * ```\n * sequence([\n * style({ width: 0 }),\n * animate(1000, style({ width: 100 })),\n * animate(1000, style({ width: 200 })),\n * animate(1000, style({ width: 300 }))\n * animate(1000, style({ width: 400, height: 400 })) // notice how `height` doesn't exist anywhere\n * else\n * ])\n * ```\n *\n * What is happening here is that the `height` value is added later in the sequence, but is missing\n * from all previous animation steps. Therefore when a keyframe is created it would also be missing\n * from all previous keyframes up until where it is first used. For the timeline keyframe generation\n * to properly fill in the style it will place the previous value (the value from the parent\n * timeline) or a default value of `*` into the backFill map. The `copyStyles` method in util.ts\n * handles propagating that backfill map to the styles object.\n *\n * When a sub-timeline is created it will have its own backFill property. This is done so that\n * styles present within the sub-timeline do not accidentally seep into the previous/future timeline\n * keyframes\n *\n * [Validation]\n * The code in this file is not responsible for validation. That functionality happens with within\n * the `AnimationValidatorVisitor` code.\n */\nfunction buildAnimationTimelines(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles = new Map(), finalStyles = new Map(), options, subInstructions, errors = []) {\n return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors);\n}\nclass AnimationTimelineBuilderVisitor {\n buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors = []) {\n subInstructions = subInstructions || new ElementInstructionMap();\n const context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []);\n context.options = options;\n const delay = options.delay ? resolveTimingValue(options.delay) : 0;\n context.currentTimeline.delayNextStep(delay);\n context.currentTimeline.setStyles([startingStyles], null, context.errors, options);\n visitDslNode(this, ast, context);\n // this checks to see if an actual animation happened\n const timelines = context.timelines.filter(timeline => timeline.containsAnimation());\n // note: we just want to apply the final styles for the rootElement, so we do not\n // just apply the styles to the last timeline but the last timeline which\n // element is the root one (basically `*`-styles are replaced with the actual\n // state style values only for the root element)\n if (timelines.length && finalStyles.size) {\n let lastRootTimeline;\n for (let i = timelines.length - 1; i >= 0; i--) {\n const timeline = timelines[i];\n if (timeline.element === rootElement) {\n lastRootTimeline = timeline;\n break;\n }\n }\n if (lastRootTimeline && !lastRootTimeline.allowOnlyTimelineStyles()) {\n lastRootTimeline.setStyles([finalStyles], null, context.errors, options);\n }\n }\n return timelines.length ?\n timelines.map(timeline => timeline.buildKeyframes()) :\n [createTimelineInstruction(rootElement, [], [], [], 0, delay, '', false)];\n }\n visitTrigger(ast, context) {\n // these values are not visited in this AST\n }\n visitState(ast, context) {\n // these values are not visited in this AST\n }\n visitTransition(ast, context) {\n // these values are not visited in this AST\n }\n visitAnimateChild(ast, context) {\n const elementInstructions = context.subInstructions.get(context.element);\n if (elementInstructions) {\n const innerContext = context.createSubContext(ast.options);\n const startTime = context.currentTimeline.currentTime;\n const endTime = this._visitSubInstructions(elementInstructions, innerContext, innerContext.options);\n if (startTime != endTime) {\n // we do this on the upper context because we created a sub context for\n // the sub child animations\n context.transformIntoNewTimeline(endTime);\n }\n }\n context.previousNode = ast;\n }\n visitAnimateRef(ast, context) {\n const innerContext = context.createSubContext(ast.options);\n innerContext.transformIntoNewTimeline();\n this._applyAnimationRefDelays([ast.options, ast.animation.options], context, innerContext);\n this.visitReference(ast.animation, innerContext);\n context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime);\n context.previousNode = ast;\n }\n _applyAnimationRefDelays(animationsRefsOptions, context, innerContext) {\n var _a;\n for (const animationRefOptions of animationsRefsOptions) {\n const animationDelay = animationRefOptions === null || animationRefOptions === void 0 ? void 0 : animationRefOptions.delay;\n if (animationDelay) {\n const animationDelayValue = typeof animationDelay === 'number' ?\n animationDelay :\n resolveTimingValue(interpolateParams(animationDelay, (_a = animationRefOptions === null || animationRefOptions === void 0 ? void 0 : animationRefOptions.params) !== null && _a !== void 0 ? _a : {}, context.errors));\n innerContext.delayNextStep(animationDelayValue);\n }\n }\n }\n _visitSubInstructions(instructions, context, options) {\n const startTime = context.currentTimeline.currentTime;\n let furthestTime = startTime;\n // this is a special-case for when a user wants to skip a sub\n // animation from being fired entirely.\n const duration = options.duration != null ? resolveTimingValue(options.duration) : null;\n const delay = options.delay != null ? resolveTimingValue(options.delay) : null;\n if (duration !== 0) {\n instructions.forEach(instruction => {\n const instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay);\n furthestTime =\n Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay);\n });\n }\n return furthestTime;\n }\n visitReference(ast, context) {\n context.updateOptions(ast.options, true);\n visitDslNode(this, ast.animation, context);\n context.previousNode = ast;\n }\n visitSequence(ast, context) {\n const subContextCount = context.subContextCount;\n let ctx = context;\n const options = ast.options;\n if (options && (options.params || options.delay)) {\n ctx = context.createSubContext(options);\n ctx.transformIntoNewTimeline();\n if (options.delay != null) {\n if (ctx.previousNode.type == 6 /* AnimationMetadataType.Style */) {\n ctx.currentTimeline.snapshotCurrentStyles();\n ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n }\n const delay = resolveTimingValue(options.delay);\n ctx.delayNextStep(delay);\n }\n }\n if (ast.steps.length) {\n ast.steps.forEach(s => visitDslNode(this, s, ctx));\n // this is here just in case the inner steps only contain or end with a style() call\n ctx.currentTimeline.applyStylesToKeyframe();\n // this means that some animation function within the sequence\n // ended up creating a sub timeline (which means the current\n // timeline cannot overlap with the contents of the sequence)\n if (ctx.subContextCount > subContextCount) {\n ctx.transformIntoNewTimeline();\n }\n }\n context.previousNode = ast;\n }\n visitGroup(ast, context) {\n const innerTimelines = [];\n let furthestTime = context.currentTimeline.currentTime;\n const delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;\n ast.steps.forEach(s => {\n const innerContext = context.createSubContext(ast.options);\n if (delay) {\n innerContext.delayNextStep(delay);\n }\n visitDslNode(this, s, innerContext);\n furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime);\n innerTimelines.push(innerContext.currentTimeline);\n });\n // this operation is run after the AST loop because otherwise\n // if the parent timeline's collected styles were updated then\n // it would pass in invalid data into the new-to-be forked items\n innerTimelines.forEach(timeline => context.currentTimeline.mergeTimelineCollectedStyles(timeline));\n context.transformIntoNewTimeline(furthestTime);\n context.previousNode = ast;\n }\n _visitTiming(ast, context) {\n if (ast.dynamic) {\n const strValue = ast.strValue;\n const timingValue = context.params ? interpolateParams(strValue, context.params, context.errors) : strValue;\n return resolveTiming(timingValue, context.errors);\n }\n else {\n return { duration: ast.duration, delay: ast.delay, easing: ast.easing };\n }\n }\n visitAnimate(ast, context) {\n const timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);\n const timeline = context.currentTimeline;\n if (timings.delay) {\n context.incrementTime(timings.delay);\n timeline.snapshotCurrentStyles();\n }\n const style = ast.style;\n if (style.type == 5 /* AnimationMetadataType.Keyframes */) {\n this.visitKeyframes(style, context);\n }\n else {\n context.incrementTime(timings.duration);\n this.visitStyle(style, context);\n timeline.applyStylesToKeyframe();\n }\n context.currentAnimateTimings = null;\n context.previousNode = ast;\n }\n visitStyle(ast, context) {\n const timeline = context.currentTimeline;\n const timings = context.currentAnimateTimings;\n // this is a special case for when a style() call\n // directly follows an animate() call (but not inside of an animate() call)\n if (!timings && timeline.hasCurrentStyleProperties()) {\n timeline.forwardFrame();\n }\n const easing = (timings && timings.easing) || ast.easing;\n if (ast.isEmptyStep) {\n timeline.applyEmptyStep(easing);\n }\n else {\n timeline.setStyles(ast.styles, easing, context.errors, context.options);\n }\n context.previousNode = ast;\n }\n visitKeyframes(ast, context) {\n const currentAnimateTimings = context.currentAnimateTimings;\n const startTime = (context.currentTimeline).duration;\n const duration = currentAnimateTimings.duration;\n const innerContext = context.createSubContext();\n const innerTimeline = innerContext.currentTimeline;\n innerTimeline.easing = currentAnimateTimings.easing;\n ast.styles.forEach(step => {\n const offset = step.offset || 0;\n innerTimeline.forwardTime(offset * duration);\n innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options);\n innerTimeline.applyStylesToKeyframe();\n });\n // this will ensure that the parent timeline gets all the styles from\n // the child even if the new timeline below is not used\n context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline);\n // we do this because the window between this timeline and the sub timeline\n // should ensure that the styles within are exactly the same as they were before\n context.transformIntoNewTimeline(startTime + duration);\n context.previousNode = ast;\n }\n visitQuery(ast, context) {\n // in the event that the first step before this is a style step we need\n // to ensure the styles are applied before the children are animated\n const startTime = context.currentTimeline.currentTime;\n const options = (ast.options || {});\n const delay = options.delay ? resolveTimingValue(options.delay) : 0;\n if (delay &&\n (context.previousNode.type === 6 /* AnimationMetadataType.Style */ ||\n (startTime == 0 && context.currentTimeline.hasCurrentStyleProperties()))) {\n context.currentTimeline.snapshotCurrentStyles();\n context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n }\n let furthestTime = startTime;\n const elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);\n context.currentQueryTotal = elms.length;\n let sameElementTimeline = null;\n elms.forEach((element, i) => {\n context.currentQueryIndex = i;\n const innerContext = context.createSubContext(ast.options, element);\n if (delay) {\n innerContext.delayNextStep(delay);\n }\n if (element === context.element) {\n sameElementTimeline = innerContext.currentTimeline;\n }\n visitDslNode(this, ast.animation, innerContext);\n // this is here just incase the inner steps only contain or end\n // with a style() call (which is here to signal that this is a preparatory\n // call to style an element before it is animated again)\n innerContext.currentTimeline.applyStylesToKeyframe();\n const endTime = innerContext.currentTimeline.currentTime;\n furthestTime = Math.max(furthestTime, endTime);\n });\n context.currentQueryIndex = 0;\n context.currentQueryTotal = 0;\n context.transformIntoNewTimeline(furthestTime);\n if (sameElementTimeline) {\n context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline);\n context.currentTimeline.snapshotCurrentStyles();\n }\n context.previousNode = ast;\n }\n visitStagger(ast, context) {\n const parentContext = context.parentContext;\n const tl = context.currentTimeline;\n const timings = ast.timings;\n const duration = Math.abs(timings.duration);\n const maxTime = duration * (context.currentQueryTotal - 1);\n let delay = duration * context.currentQueryIndex;\n let staggerTransformer = timings.duration < 0 ? 'reverse' : timings.easing;\n switch (staggerTransformer) {\n case 'reverse':\n delay = maxTime - delay;\n break;\n case 'full':\n delay = parentContext.currentStaggerTime;\n break;\n }\n const timeline = context.currentTimeline;\n if (delay) {\n timeline.delayNextStep(delay);\n }\n const startingTime = timeline.currentTime;\n visitDslNode(this, ast.animation, context);\n context.previousNode = ast;\n // time = duration + delay\n // the reason why this computation is so complex is because\n // the inner timeline may either have a delay value or a stretched\n // keyframe depending on if a subtimeline is not used or is used.\n parentContext.currentStaggerTime =\n (tl.currentTime - startingTime) + (tl.startTime - parentContext.currentTimeline.startTime);\n }\n}\nconst DEFAULT_NOOP_PREVIOUS_NODE = {};\nclass AnimationTimelineContext {\n constructor(_driver, element, subInstructions, _enterClassName, _leaveClassName, errors, timelines, initialTimeline) {\n this._driver = _driver;\n this.element = element;\n this.subInstructions = subInstructions;\n this._enterClassName = _enterClassName;\n this._leaveClassName = _leaveClassName;\n this.errors = errors;\n this.timelines = timelines;\n this.parentContext = null;\n this.currentAnimateTimings = null;\n this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n this.subContextCount = 0;\n this.options = {};\n this.currentQueryIndex = 0;\n this.currentQueryTotal = 0;\n this.currentStaggerTime = 0;\n this.currentTimeline = initialTimeline || new TimelineBuilder(this._driver, element, 0);\n timelines.push(this.currentTimeline);\n }\n get params() {\n return this.options.params;\n }\n updateOptions(options, skipIfExists) {\n if (!options)\n return;\n const newOptions = options;\n let optionsToUpdate = this.options;\n // NOTE: this will get patched up when other animation methods support duration overrides\n if (newOptions.duration != null) {\n optionsToUpdate.duration = resolveTimingValue(newOptions.duration);\n }\n if (newOptions.delay != null) {\n optionsToUpdate.delay = resolveTimingValue(newOptions.delay);\n }\n const newParams = newOptions.params;\n if (newParams) {\n let paramsToUpdate = optionsToUpdate.params;\n if (!paramsToUpdate) {\n paramsToUpdate = this.options.params = {};\n }\n Object.keys(newParams).forEach(name => {\n if (!skipIfExists || !paramsToUpdate.hasOwnProperty(name)) {\n paramsToUpdate[name] = interpolateParams(newParams[name], paramsToUpdate, this.errors);\n }\n });\n }\n }\n _copyOptions() {\n const options = {};\n if (this.options) {\n const oldParams = this.options.params;\n if (oldParams) {\n const params = options['params'] = {};\n Object.keys(oldParams).forEach(name => {\n params[name] = oldParams[name];\n });\n }\n }\n return options;\n }\n createSubContext(options = null, element, newTime) {\n const target = element || this.element;\n const context = new AnimationTimelineContext(this._driver, target, this.subInstructions, this._enterClassName, this._leaveClassName, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0));\n context.previousNode = this.previousNode;\n context.currentAnimateTimings = this.currentAnimateTimings;\n context.options = this._copyOptions();\n context.updateOptions(options);\n context.currentQueryIndex = this.currentQueryIndex;\n context.currentQueryTotal = this.currentQueryTotal;\n context.parentContext = this;\n this.subContextCount++;\n return context;\n }\n transformIntoNewTimeline(newTime) {\n this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n this.currentTimeline = this.currentTimeline.fork(this.element, newTime);\n this.timelines.push(this.currentTimeline);\n return this.currentTimeline;\n }\n appendInstructionToTimeline(instruction, duration, delay) {\n const updatedTimings = {\n duration: duration != null ? duration : instruction.duration,\n delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,\n easing: ''\n };\n const builder = new SubTimelineBuilder(this._driver, instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe);\n this.timelines.push(builder);\n return updatedTimings;\n }\n incrementTime(time) {\n this.currentTimeline.forwardTime(this.currentTimeline.duration + time);\n }\n delayNextStep(delay) {\n // negative delays are not yet supported\n if (delay > 0) {\n this.currentTimeline.delayNextStep(delay);\n }\n }\n invokeQuery(selector, originalSelector, limit, includeSelf, optional, errors) {\n let results = [];\n if (includeSelf) {\n results.push(this.element);\n }\n if (selector.length > 0) { // only if :self is used then the selector can be empty\n selector = selector.replace(ENTER_TOKEN_REGEX, '.' + this._enterClassName);\n selector = selector.replace(LEAVE_TOKEN_REGEX, '.' + this._leaveClassName);\n const multi = limit != 1;\n let elements = this._driver.query(this.element, selector, multi);\n if (limit !== 0) {\n elements = limit < 0 ? elements.slice(elements.length + limit, elements.length) :\n elements.slice(0, limit);\n }\n results.push(...elements);\n }\n if (!optional && results.length == 0) {\n errors.push(invalidQuery(originalSelector));\n }\n return results;\n }\n}\nclass TimelineBuilder {\n constructor(_driver, element, startTime, _elementTimelineStylesLookup) {\n this._driver = _driver;\n this.element = element;\n this.startTime = startTime;\n this._elementTimelineStylesLookup = _elementTimelineStylesLookup;\n this.duration = 0;\n this._previousKeyframe = new Map();\n this._currentKeyframe = new Map();\n this._keyframes = new Map();\n this._styleSummary = new Map();\n this._localTimelineStyles = new Map();\n this._pendingStyles = new Map();\n this._backFill = new Map();\n this._currentEmptyStepKeyframe = null;\n if (!this._elementTimelineStylesLookup) {\n this._elementTimelineStylesLookup = new Map();\n }\n this._globalTimelineStyles = this._elementTimelineStylesLookup.get(element);\n if (!this._globalTimelineStyles) {\n this._globalTimelineStyles = this._localTimelineStyles;\n this._elementTimelineStylesLookup.set(element, this._localTimelineStyles);\n }\n this._loadKeyframe();\n }\n containsAnimation() {\n switch (this._keyframes.size) {\n case 0:\n return false;\n case 1:\n return this.hasCurrentStyleProperties();\n default:\n return true;\n }\n }\n hasCurrentStyleProperties() {\n return this._currentKeyframe.size > 0;\n }\n get currentTime() {\n return this.startTime + this.duration;\n }\n delayNextStep(delay) {\n // in the event that a style() step is placed right before a stagger()\n // and that style() step is the very first style() value in the animation\n // then we need to make a copy of the keyframe [0, copy, 1] so that the delay\n // properly applies the style() values to work with the stagger...\n const hasPreStyleStep = this._keyframes.size === 1 && this._pendingStyles.size;\n if (this.duration || hasPreStyleStep) {\n this.forwardTime(this.currentTime + delay);\n if (hasPreStyleStep) {\n this.snapshotCurrentStyles();\n }\n }\n else {\n this.startTime += delay;\n }\n }\n fork(element, currentTime) {\n this.applyStylesToKeyframe();\n return new TimelineBuilder(this._driver, element, currentTime || this.currentTime, this._elementTimelineStylesLookup);\n }\n _loadKeyframe() {\n if (this._currentKeyframe) {\n this._previousKeyframe = this._currentKeyframe;\n }\n this._currentKeyframe = this._keyframes.get(this.duration);\n if (!this._currentKeyframe) {\n this._currentKeyframe = new Map();\n this._keyframes.set(this.duration, this._currentKeyframe);\n }\n }\n forwardFrame() {\n this.duration += ONE_FRAME_IN_MILLISECONDS;\n this._loadKeyframe();\n }\n forwardTime(time) {\n this.applyStylesToKeyframe();\n this.duration = time;\n this._loadKeyframe();\n }\n _updateStyle(prop, value) {\n this._localTimelineStyles.set(prop, value);\n this._globalTimelineStyles.set(prop, value);\n this._styleSummary.set(prop, { time: this.currentTime, value });\n }\n allowOnlyTimelineStyles() {\n return this._currentEmptyStepKeyframe !== this._currentKeyframe;\n }\n applyEmptyStep(easing) {\n if (easing) {\n this._previousKeyframe.set('easing', easing);\n }\n // special case for animate(duration):\n // all missing styles are filled with a `*` value then\n // if any destination styles are filled in later on the same\n // keyframe then they will override the overridden styles\n // We use `_globalTimelineStyles` here because there may be\n // styles in previous keyframes that are not present in this timeline\n for (let [prop, value] of this._globalTimelineStyles) {\n this._backFill.set(prop, value || AUTO_STYLE);\n this._currentKeyframe.set(prop, AUTO_STYLE);\n }\n this._currentEmptyStepKeyframe = this._currentKeyframe;\n }\n setStyles(input, easing, errors, options) {\n var _a;\n if (easing) {\n this._previousKeyframe.set('easing', easing);\n }\n const params = (options && options.params) || {};\n const styles = flattenStyles(input, this._globalTimelineStyles);\n for (let [prop, value] of styles) {\n const val = interpolateParams(value, params, errors);\n this._pendingStyles.set(prop, val);\n if (!this._localTimelineStyles.has(prop)) {\n this._backFill.set(prop, (_a = this._globalTimelineStyles.get(prop)) !== null && _a !== void 0 ? _a : AUTO_STYLE);\n }\n this._updateStyle(prop, val);\n }\n }\n applyStylesToKeyframe() {\n if (this._pendingStyles.size == 0)\n return;\n this._pendingStyles.forEach((val, prop) => {\n this._currentKeyframe.set(prop, val);\n });\n this._pendingStyles.clear();\n this._localTimelineStyles.forEach((val, prop) => {\n if (!this._currentKeyframe.has(prop)) {\n this._currentKeyframe.set(prop, val);\n }\n });\n }\n snapshotCurrentStyles() {\n for (let [prop, val] of this._localTimelineStyles) {\n this._pendingStyles.set(prop, val);\n this._updateStyle(prop, val);\n }\n }\n getFinalKeyframe() {\n return this._keyframes.get(this.duration);\n }\n get properties() {\n const properties = [];\n for (let prop in this._currentKeyframe) {\n properties.push(prop);\n }\n return properties;\n }\n mergeTimelineCollectedStyles(timeline) {\n timeline._styleSummary.forEach((details1, prop) => {\n const details0 = this._styleSummary.get(prop);\n if (!details0 || details1.time > details0.time) {\n this._updateStyle(prop, details1.value);\n }\n });\n }\n buildKeyframes() {\n this.applyStylesToKeyframe();\n const preStyleProps = new Set();\n const postStyleProps = new Set();\n const isEmpty = this._keyframes.size === 1 && this.duration === 0;\n let finalKeyframes = [];\n this._keyframes.forEach((keyframe, time) => {\n const finalKeyframe = copyStyles(keyframe, new Map(), this._backFill);\n finalKeyframe.forEach((value, prop) => {\n if (value === ɵPRE_STYLE) {\n preStyleProps.add(prop);\n }\n else if (value === AUTO_STYLE) {\n postStyleProps.add(prop);\n }\n });\n if (!isEmpty) {\n finalKeyframe.set('offset', time / this.duration);\n }\n finalKeyframes.push(finalKeyframe);\n });\n const preProps = preStyleProps.size ? iteratorToArray(preStyleProps.values()) : [];\n const postProps = postStyleProps.size ? iteratorToArray(postStyleProps.values()) : [];\n // special case for a 0-second animation (which is designed just to place styles onscreen)\n if (isEmpty) {\n const kf0 = finalKeyframes[0];\n const kf1 = new Map(kf0);\n kf0.set('offset', 0);\n kf1.set('offset', 1);\n finalKeyframes = [kf0, kf1];\n }\n return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false);\n }\n}\nclass SubTimelineBuilder extends TimelineBuilder {\n constructor(driver, element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe = false) {\n super(driver, element, timings.delay);\n this.keyframes = keyframes;\n this.preStyleProps = preStyleProps;\n this.postStyleProps = postStyleProps;\n this._stretchStartingKeyframe = _stretchStartingKeyframe;\n this.timings = { duration: timings.duration, delay: timings.delay, easing: timings.easing };\n }\n containsAnimation() {\n return this.keyframes.length > 1;\n }\n buildKeyframes() {\n let keyframes = this.keyframes;\n let { delay, duration, easing } = this.timings;\n if (this._stretchStartingKeyframe && delay) {\n const newKeyframes = [];\n const totalTime = duration + delay;\n const startingGap = delay / totalTime;\n // the original starting keyframe now starts once the delay is done\n const newFirstKeyframe = copyStyles(keyframes[0]);\n newFirstKeyframe.set('offset', 0);\n newKeyframes.push(newFirstKeyframe);\n const oldFirstKeyframe = copyStyles(keyframes[0]);\n oldFirstKeyframe.set('offset', roundOffset(startingGap));\n newKeyframes.push(oldFirstKeyframe);\n /*\n When the keyframe is stretched then it means that the delay before the animation\n starts is gone. Instead the first keyframe is placed at the start of the animation\n and it is then copied to where it starts when the original delay is over. This basically\n means nothing animates during that delay, but the styles are still rendered. For this\n to work the original offset values that exist in the original keyframes must be \"warped\"\n so that they can take the new keyframe + delay into account.\n \n delay=1000, duration=1000, keyframes = 0 .5 1\n \n turns into\n \n delay=0, duration=2000, keyframes = 0 .33 .66 1\n */\n // offsets between 1 ... n -1 are all warped by the keyframe stretch\n const limit = keyframes.length - 1;\n for (let i = 1; i <= limit; i++) {\n let kf = copyStyles(keyframes[i]);\n const oldOffset = kf.get('offset');\n const timeAtKeyframe = delay + oldOffset * duration;\n kf.set('offset', roundOffset(timeAtKeyframe / totalTime));\n newKeyframes.push(kf);\n }\n // the new starting keyframe should be added at the start\n duration = totalTime;\n delay = 0;\n easing = '';\n keyframes = newKeyframes;\n }\n return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true);\n }\n}\nfunction roundOffset(offset, decimalPoints = 3) {\n const mult = Math.pow(10, decimalPoints - 1);\n return Math.round(offset * mult) / mult;\n}\nfunction flattenStyles(input, allStyles) {\n const styles = new Map();\n let allProperties;\n input.forEach(token => {\n if (token === '*') {\n allProperties = allProperties || allStyles.keys();\n for (let prop of allProperties) {\n styles.set(prop, AUTO_STYLE);\n }\n }\n else {\n copyStyles(token, styles);\n }\n });\n return styles;\n}\n\nclass Animation {\n constructor(_driver, input) {\n this._driver = _driver;\n const errors = [];\n const warnings = [];\n const ast = buildAnimationAst(_driver, input, errors, warnings);\n if (errors.length) {\n throw validationFailed(errors);\n }\n if (warnings.length) {\n warnValidation(warnings);\n }\n this._animationAst = ast;\n }\n buildTimelines(element, startingStyles, destinationStyles, options, subInstructions) {\n const start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) :\n startingStyles;\n const dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) :\n destinationStyles;\n const errors = [];\n subInstructions = subInstructions || new ElementInstructionMap();\n const result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);\n if (errors.length) {\n throw buildingFailed(errors);\n }\n return result;\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 * @publicApi\n */\nclass AnimationStyleNormalizer {\n}\n/**\n * @publicApi\n */\nclass NoopAnimationStyleNormalizer {\n normalizePropertyName(propertyName, errors) {\n return propertyName;\n }\n normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {\n return value;\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 */\nconst DIMENSIONAL_PROP_SET = new Set([\n 'width',\n 'height',\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight',\n 'left',\n 'top',\n 'bottom',\n 'right',\n 'fontSize',\n 'outlineWidth',\n 'outlineOffset',\n 'paddingTop',\n 'paddingLeft',\n 'paddingBottom',\n 'paddingRight',\n 'marginTop',\n 'marginLeft',\n 'marginBottom',\n 'marginRight',\n 'borderRadius',\n 'borderWidth',\n 'borderTopWidth',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'textIndent',\n 'perspective'\n]);\nclass WebAnimationsStyleNormalizer extends AnimationStyleNormalizer {\n normalizePropertyName(propertyName, errors) {\n return dashCaseToCamelCase(propertyName);\n }\n normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {\n let unit = '';\n const strVal = value.toString().trim();\n if (DIMENSIONAL_PROP_SET.has(normalizedProperty) && value !== 0 && value !== '0') {\n if (typeof value === 'number') {\n unit = 'px';\n }\n else {\n const valAndSuffixMatch = value.match(/^[+-]?[\\d\\.]+([a-z]*)$/);\n if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {\n errors.push(invalidCssUnitValue(userProvidedProperty, value));\n }\n }\n }\n return strVal + unit;\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 */\nfunction createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, totalTime, errors) {\n return {\n type: 0 /* AnimationTransitionInstructionType.TransitionAnimation */,\n element,\n triggerName,\n isRemovalTransition,\n fromState,\n fromStyles,\n toState,\n toStyles,\n timelines,\n queriedElements,\n preStyleProps,\n postStyleProps,\n totalTime,\n errors\n };\n}\n\nconst EMPTY_OBJECT = {};\nclass AnimationTransitionFactory {\n constructor(_triggerName, ast, _stateStyles) {\n this._triggerName = _triggerName;\n this.ast = ast;\n this._stateStyles = _stateStyles;\n }\n match(currentState, nextState, element, params) {\n return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState, element, params);\n }\n buildStyles(stateName, params, errors) {\n let styler = this._stateStyles.get('*');\n if (stateName !== undefined) {\n styler = this._stateStyles.get(stateName === null || stateName === void 0 ? void 0 : stateName.toString()) || styler;\n }\n return styler ? styler.buildStyles(params, errors) : new Map();\n }\n build(driver, element, currentState, nextState, enterClassName, leaveClassName, currentOptions, nextOptions, subInstructions, skipAstBuild) {\n var _a;\n const errors = [];\n const transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT;\n const currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT;\n const currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);\n const nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT;\n const nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);\n const queriedElements = new Set();\n const preStyleMap = new Map();\n const postStyleMap = new Map();\n const isRemoval = nextState === 'void';\n const animationOptions = {\n params: applyParamDefaults(nextAnimationParams, transitionAnimationParams),\n delay: (_a = this.ast.options) === null || _a === void 0 ? void 0 : _a.delay,\n };\n const timelines = skipAstBuild ?\n [] :\n buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);\n let totalTime = 0;\n timelines.forEach(tl => {\n totalTime = Math.max(tl.duration + tl.delay, totalTime);\n });\n if (errors.length) {\n return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, totalTime, errors);\n }\n timelines.forEach(tl => {\n const elm = tl.element;\n const preProps = getOrSetDefaultValue(preStyleMap, elm, new Set());\n tl.preStyleProps.forEach(prop => preProps.add(prop));\n const postProps = getOrSetDefaultValue(postStyleMap, elm, new Set());\n tl.postStyleProps.forEach(prop => postProps.add(prop));\n if (elm !== element) {\n queriedElements.add(elm);\n }\n });\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n checkNonAnimatableInTimelines(timelines, this._triggerName, driver);\n }\n const queriedElementsList = iteratorToArray(queriedElements.values());\n return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, queriedElementsList, preStyleMap, postStyleMap, totalTime);\n }\n}\n/**\n * Checks inside a set of timelines if they try to animate a css property which is not considered\n * animatable, in that case it prints a warning on the console.\n * Besides that the function doesn't have any other effect.\n *\n * Note: this check is done here after the timelines are built instead of doing on a lower level so\n * that we can make sure that the warning appears only once per instruction (we can aggregate here\n * all the issues instead of finding them separately).\n *\n * @param timelines The built timelines for the current instruction.\n * @param triggerName The name of the trigger for the current instruction.\n * @param driver Animation driver used to perform the check.\n *\n */\nfunction checkNonAnimatableInTimelines(timelines, triggerName, driver) {\n if (!driver.validateAnimatableStyleProperty) {\n return;\n }\n const invalidNonAnimatableProps = new Set();\n timelines.forEach(({ keyframes }) => {\n const nonAnimatablePropsInitialValues = new Map();\n keyframes.forEach(keyframe => {\n for (const [prop, value] of keyframe.entries()) {\n if (!driver.validateAnimatableStyleProperty(prop)) {\n if (nonAnimatablePropsInitialValues.has(prop) && !invalidNonAnimatableProps.has(prop)) {\n const propInitialValue = nonAnimatablePropsInitialValues.get(prop);\n if (propInitialValue !== value) {\n invalidNonAnimatableProps.add(prop);\n }\n }\n else {\n nonAnimatablePropsInitialValues.set(prop, value);\n }\n }\n }\n });\n });\n if (invalidNonAnimatableProps.size > 0) {\n console.warn(`Warning: The animation trigger \"${triggerName}\" is attempting to animate the following` +\n ' not animatable properties: ' + Array.from(invalidNonAnimatableProps).join(', ') + '\\n' +\n '(to check the list of all animatable properties visit https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties)');\n }\n}\nfunction oneOrMoreTransitionsMatch(matchFns, currentState, nextState, element, params) {\n return matchFns.some(fn => fn(currentState, nextState, element, params));\n}\nfunction applyParamDefaults(userParams, defaults) {\n const result = copyObj(defaults);\n for (const key in userParams) {\n if (userParams.hasOwnProperty(key) && userParams[key] != null) {\n result[key] = userParams[key];\n }\n }\n return result;\n}\nclass AnimationStateStyles {\n constructor(styles, defaultParams, normalizer) {\n this.styles = styles;\n this.defaultParams = defaultParams;\n this.normalizer = normalizer;\n }\n buildStyles(params, errors) {\n const finalStyles = new Map();\n const combinedParams = copyObj(this.defaultParams);\n Object.keys(params).forEach(key => {\n const value = params[key];\n if (value !== null) {\n combinedParams[key] = value;\n }\n });\n this.styles.styles.forEach(value => {\n if (typeof value !== 'string') {\n value.forEach((val, prop) => {\n if (val) {\n val = interpolateParams(val, combinedParams, errors);\n }\n const normalizedProp = this.normalizer.normalizePropertyName(prop, errors);\n val = this.normalizer.normalizeStyleValue(prop, normalizedProp, val, errors);\n finalStyles.set(normalizedProp, val);\n });\n }\n });\n return finalStyles;\n }\n}\n\nfunction buildTrigger(name, ast, normalizer) {\n return new AnimationTrigger(name, ast, normalizer);\n}\nclass AnimationTrigger {\n constructor(name, ast, _normalizer) {\n this.name = name;\n this.ast = ast;\n this._normalizer = _normalizer;\n this.transitionFactories = [];\n this.states = new Map();\n ast.states.forEach(ast => {\n const defaultParams = (ast.options && ast.options.params) || {};\n this.states.set(ast.name, new AnimationStateStyles(ast.style, defaultParams, _normalizer));\n });\n balanceProperties(this.states, 'true', '1');\n balanceProperties(this.states, 'false', '0');\n ast.transitions.forEach(ast => {\n this.transitionFactories.push(new AnimationTransitionFactory(name, ast, this.states));\n });\n this.fallbackTransition = createFallbackTransition(name, this.states, this._normalizer);\n }\n get containsQueries() {\n return this.ast.queryCount > 0;\n }\n matchTransition(currentState, nextState, element, params) {\n const entry = this.transitionFactories.find(f => f.match(currentState, nextState, element, params));\n return entry || null;\n }\n matchStyles(currentState, params, errors) {\n return this.fallbackTransition.buildStyles(currentState, params, errors);\n }\n}\nfunction createFallbackTransition(triggerName, states, normalizer) {\n const matchers = [(fromState, toState) => true];\n const animation = { type: 2 /* AnimationMetadataType.Sequence */, steps: [], options: null };\n const transition = {\n type: 1 /* AnimationMetadataType.Transition */,\n animation,\n matchers,\n options: null,\n queryCount: 0,\n depCount: 0\n };\n return new AnimationTransitionFactory(triggerName, transition, states);\n}\nfunction balanceProperties(stateMap, key1, key2) {\n if (stateMap.has(key1)) {\n if (!stateMap.has(key2)) {\n stateMap.set(key2, stateMap.get(key1));\n }\n }\n else if (stateMap.has(key2)) {\n stateMap.set(key1, stateMap.get(key2));\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 */\nconst EMPTY_INSTRUCTION_MAP = new ElementInstructionMap();\nclass TimelineAnimationEngine {\n constructor(bodyNode, _driver, _normalizer) {\n this.bodyNode = bodyNode;\n this._driver = _driver;\n this._normalizer = _normalizer;\n this._animations = new Map();\n this._playersById = new Map();\n this.players = [];\n }\n register(id, metadata) {\n const errors = [];\n const warnings = [];\n const ast = buildAnimationAst(this._driver, metadata, errors, warnings);\n if (errors.length) {\n throw registerFailed(errors);\n }\n else {\n if (warnings.length) {\n warnRegister(warnings);\n }\n this._animations.set(id, ast);\n }\n }\n _buildPlayer(i, preStyles, postStyles) {\n const element = i.element;\n const keyframes = normalizeKeyframes$1(this._driver, this._normalizer, element, i.keyframes, preStyles, postStyles);\n return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, [], true);\n }\n create(id, element, options = {}) {\n const errors = [];\n const ast = this._animations.get(id);\n let instructions;\n const autoStylesMap = new Map();\n if (ast) {\n instructions = buildAnimationTimelines(this._driver, element, ast, ENTER_CLASSNAME, LEAVE_CLASSNAME, new Map(), new Map(), options, EMPTY_INSTRUCTION_MAP, errors);\n instructions.forEach(inst => {\n const styles = getOrSetDefaultValue(autoStylesMap, inst.element, new Map());\n inst.postStyleProps.forEach(prop => styles.set(prop, null));\n });\n }\n else {\n errors.push(missingOrDestroyedAnimation());\n instructions = [];\n }\n if (errors.length) {\n throw createAnimationFailed(errors);\n }\n autoStylesMap.forEach((styles, element) => {\n styles.forEach((_, prop) => {\n styles.set(prop, this._driver.computeStyle(element, prop, AUTO_STYLE));\n });\n });\n const players = instructions.map(i => {\n const styles = autoStylesMap.get(i.element);\n return this._buildPlayer(i, new Map(), styles);\n });\n const player = optimizeGroupPlayer(players);\n this._playersById.set(id, player);\n player.onDestroy(() => this.destroy(id));\n this.players.push(player);\n return player;\n }\n destroy(id) {\n const player = this._getPlayer(id);\n player.destroy();\n this._playersById.delete(id);\n const index = this.players.indexOf(player);\n if (index >= 0) {\n this.players.splice(index, 1);\n }\n }\n _getPlayer(id) {\n const player = this._playersById.get(id);\n if (!player) {\n throw missingPlayer(id);\n }\n return player;\n }\n listen(id, element, eventName, callback) {\n // triggerName, fromState, toState are all ignored for timeline animations\n const baseEvent = makeAnimationEvent(element, '', '', '');\n listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);\n return () => { };\n }\n command(id, element, command, args) {\n if (command == 'register') {\n this.register(id, args[0]);\n return;\n }\n if (command == 'create') {\n const options = (args[0] || {});\n this.create(id, element, options);\n return;\n }\n const player = this._getPlayer(id);\n switch (command) {\n case 'play':\n player.play();\n break;\n case 'pause':\n player.pause();\n break;\n case 'reset':\n player.reset();\n break;\n case 'restart':\n player.restart();\n break;\n case 'finish':\n player.finish();\n break;\n case 'init':\n player.init();\n break;\n case 'setPosition':\n player.setPosition(parseFloat(args[0]));\n break;\n case 'destroy':\n this.destroy(id);\n break;\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 */\nconst QUEUED_CLASSNAME = 'ng-animate-queued';\nconst QUEUED_SELECTOR = '.ng-animate-queued';\nconst DISABLED_CLASSNAME = 'ng-animate-disabled';\nconst DISABLED_SELECTOR = '.ng-animate-disabled';\nconst STAR_CLASSNAME = 'ng-star-inserted';\nconst STAR_SELECTOR = '.ng-star-inserted';\nconst EMPTY_PLAYER_ARRAY = [];\nconst NULL_REMOVAL_STATE = {\n namespaceId: '',\n setForRemoval: false,\n setForMove: false,\n hasAnimation: false,\n removedBeforeQueried: false\n};\nconst NULL_REMOVED_QUERIED_STATE = {\n namespaceId: '',\n setForMove: false,\n setForRemoval: false,\n hasAnimation: false,\n removedBeforeQueried: true\n};\nconst REMOVAL_FLAG = '__ng_removed';\nclass StateValue {\n constructor(input, namespaceId = '') {\n this.namespaceId = namespaceId;\n const isObj = input && input.hasOwnProperty('value');\n const value = isObj ? input['value'] : input;\n this.value = normalizeTriggerValue(value);\n if (isObj) {\n const options = copyObj(input);\n delete options['value'];\n this.options = options;\n }\n else {\n this.options = {};\n }\n if (!this.options.params) {\n this.options.params = {};\n }\n }\n get params() {\n return this.options.params;\n }\n absorbOptions(options) {\n const newParams = options.params;\n if (newParams) {\n const oldParams = this.options.params;\n Object.keys(newParams).forEach(prop => {\n if (oldParams[prop] == null) {\n oldParams[prop] = newParams[prop];\n }\n });\n }\n }\n}\nconst VOID_VALUE = 'void';\nconst DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE);\nclass AnimationTransitionNamespace {\n constructor(id, hostElement, _engine) {\n this.id = id;\n this.hostElement = hostElement;\n this._engine = _engine;\n this.players = [];\n this._triggers = new Map();\n this._queue = [];\n this._elementListeners = new Map();\n this._hostClassName = 'ng-tns-' + id;\n addClass(hostElement, this._hostClassName);\n }\n listen(element, name, phase, callback) {\n if (!this._triggers.has(name)) {\n throw missingTrigger(phase, name);\n }\n if (phase == null || phase.length == 0) {\n throw missingEvent(name);\n }\n if (!isTriggerEventValid(phase)) {\n throw unsupportedTriggerEvent(phase, name);\n }\n const listeners = getOrSetDefaultValue(this._elementListeners, element, []);\n const data = { name, phase, callback };\n listeners.push(data);\n const triggersWithStates = getOrSetDefaultValue(this._engine.statesByElement, element, new Map());\n if (!triggersWithStates.has(name)) {\n addClass(element, NG_TRIGGER_CLASSNAME);\n addClass(element, NG_TRIGGER_CLASSNAME + '-' + name);\n triggersWithStates.set(name, DEFAULT_STATE_VALUE);\n }\n return () => {\n // the event listener is removed AFTER the flush has occurred such\n // that leave animations callbacks can fire (otherwise if the node\n // is removed in between then the listeners would be deregistered)\n this._engine.afterFlush(() => {\n const index = listeners.indexOf(data);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n if (!this._triggers.has(name)) {\n triggersWithStates.delete(name);\n }\n });\n };\n }\n register(name, ast) {\n if (this._triggers.has(name)) {\n // throw\n return false;\n }\n else {\n this._triggers.set(name, ast);\n return true;\n }\n }\n _getTrigger(name) {\n const trigger = this._triggers.get(name);\n if (!trigger) {\n throw unregisteredTrigger(name);\n }\n return trigger;\n }\n trigger(element, triggerName, value, defaultToFallback = true) {\n const trigger = this._getTrigger(triggerName);\n const player = new TransitionAnimationPlayer(this.id, triggerName, element);\n let triggersWithStates = this._engine.statesByElement.get(element);\n if (!triggersWithStates) {\n addClass(element, NG_TRIGGER_CLASSNAME);\n addClass(element, NG_TRIGGER_CLASSNAME + '-' + triggerName);\n this._engine.statesByElement.set(element, triggersWithStates = new Map());\n }\n let fromState = triggersWithStates.get(triggerName);\n const toState = new StateValue(value, this.id);\n const isObj = value && value.hasOwnProperty('value');\n if (!isObj && fromState) {\n toState.absorbOptions(fromState.options);\n }\n triggersWithStates.set(triggerName, toState);\n if (!fromState) {\n fromState = DEFAULT_STATE_VALUE;\n }\n const isRemoval = toState.value === VOID_VALUE;\n // normally this isn't reached by here, however, if an object expression\n // is passed in then it may be a new object each time. Comparing the value\n // is important since that will stay the same despite there being a new object.\n // The removal arc here is special cased because the same element is triggered\n // twice in the event that it contains animations on the outer/inner portions\n // of the host container\n if (!isRemoval && fromState.value === toState.value) {\n // this means that despite the value not changing, some inner params\n // have changed which means that the animation final styles need to be applied\n if (!objEquals(fromState.params, toState.params)) {\n const errors = [];\n const fromStyles = trigger.matchStyles(fromState.value, fromState.params, errors);\n const toStyles = trigger.matchStyles(toState.value, toState.params, errors);\n if (errors.length) {\n this._engine.reportError(errors);\n }\n else {\n this._engine.afterFlush(() => {\n eraseStyles(element, fromStyles);\n setStyles(element, toStyles);\n });\n }\n }\n return;\n }\n const playersOnElement = getOrSetDefaultValue(this._engine.playersByElement, element, []);\n playersOnElement.forEach(player => {\n // only remove the player if it is queued on the EXACT same trigger/namespace\n // we only also deal with queued players here because if the animation has\n // started then we want to keep the player alive until the flush happens\n // (which is where the previousPlayers are passed into the new player)\n if (player.namespaceId == this.id && player.triggerName == triggerName && player.queued) {\n player.destroy();\n }\n });\n let transition = trigger.matchTransition(fromState.value, toState.value, element, toState.params);\n let isFallbackTransition = false;\n if (!transition) {\n if (!defaultToFallback)\n return;\n transition = trigger.fallbackTransition;\n isFallbackTransition = true;\n }\n this._engine.totalQueuedPlayers++;\n this._queue.push({ element, triggerName, transition, fromState, toState, player, isFallbackTransition });\n if (!isFallbackTransition) {\n addClass(element, QUEUED_CLASSNAME);\n player.onStart(() => {\n removeClass(element, QUEUED_CLASSNAME);\n });\n }\n player.onDone(() => {\n let index = this.players.indexOf(player);\n if (index >= 0) {\n this.players.splice(index, 1);\n }\n const players = this._engine.playersByElement.get(element);\n if (players) {\n let index = players.indexOf(player);\n if (index >= 0) {\n players.splice(index, 1);\n }\n }\n });\n this.players.push(player);\n playersOnElement.push(player);\n return player;\n }\n deregister(name) {\n this._triggers.delete(name);\n this._engine.statesByElement.forEach(stateMap => stateMap.delete(name));\n this._elementListeners.forEach((listeners, element) => {\n this._elementListeners.set(element, listeners.filter(entry => {\n return entry.name != name;\n }));\n });\n }\n clearElementCache(element) {\n this._engine.statesByElement.delete(element);\n this._elementListeners.delete(element);\n const elementPlayers = this._engine.playersByElement.get(element);\n if (elementPlayers) {\n elementPlayers.forEach(player => player.destroy());\n this._engine.playersByElement.delete(element);\n }\n }\n _signalRemovalForInnerTriggers(rootElement, context) {\n const elements = this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true);\n // emulate a leave animation for all inner nodes within this node.\n // If there are no animations found for any of the nodes then clear the cache\n // for the element.\n elements.forEach(elm => {\n // this means that an inner remove() operation has already kicked off\n // the animation on this element...\n if (elm[REMOVAL_FLAG])\n return;\n const namespaces = this._engine.fetchNamespacesByElement(elm);\n if (namespaces.size) {\n namespaces.forEach(ns => ns.triggerLeaveAnimation(elm, context, false, true));\n }\n else {\n this.clearElementCache(elm);\n }\n });\n // If the child elements were removed along with the parent, their animations might not\n // have completed. Clear all the elements from the cache so we don't end up with a memory leak.\n this._engine.afterFlushAnimationsDone(() => elements.forEach(elm => this.clearElementCache(elm)));\n }\n triggerLeaveAnimation(element, context, destroyAfterComplete, defaultToFallback) {\n const triggerStates = this._engine.statesByElement.get(element);\n const previousTriggersValues = new Map();\n if (triggerStates) {\n const players = [];\n triggerStates.forEach((state, triggerName) => {\n previousTriggersValues.set(triggerName, state.value);\n // this check is here in the event that an element is removed\n // twice (both on the host level and the component level)\n if (this._triggers.has(triggerName)) {\n const player = this.trigger(element, triggerName, VOID_VALUE, defaultToFallback);\n if (player) {\n players.push(player);\n }\n }\n });\n if (players.length) {\n this._engine.markElementAsRemoved(this.id, element, true, context, previousTriggersValues);\n if (destroyAfterComplete) {\n optimizeGroupPlayer(players).onDone(() => this._engine.processLeaveNode(element));\n }\n return true;\n }\n }\n return false;\n }\n prepareLeaveAnimationListeners(element) {\n const listeners = this._elementListeners.get(element);\n const elementStates = this._engine.statesByElement.get(element);\n // if this statement fails then it means that the element was picked up\n // by an earlier flush (or there are no listeners at all to track the leave).\n if (listeners && elementStates) {\n const visitedTriggers = new Set();\n listeners.forEach(listener => {\n const triggerName = listener.name;\n if (visitedTriggers.has(triggerName))\n return;\n visitedTriggers.add(triggerName);\n const trigger = this._triggers.get(triggerName);\n const transition = trigger.fallbackTransition;\n const fromState = elementStates.get(triggerName) || DEFAULT_STATE_VALUE;\n const toState = new StateValue(VOID_VALUE);\n const player = new TransitionAnimationPlayer(this.id, triggerName, element);\n this._engine.totalQueuedPlayers++;\n this._queue.push({\n element,\n triggerName,\n transition,\n fromState,\n toState,\n player,\n isFallbackTransition: true\n });\n });\n }\n }\n removeNode(element, context) {\n const engine = this._engine;\n if (element.childElementCount) {\n this._signalRemovalForInnerTriggers(element, context);\n }\n // this means that a * => VOID animation was detected and kicked off\n if (this.triggerLeaveAnimation(element, context, true))\n return;\n // find the player that is animating and make sure that the\n // removal is delayed until that player has completed\n let containsPotentialParentTransition = false;\n if (engine.totalAnimations) {\n const currentPlayers = engine.players.length ? engine.playersByQueriedElement.get(element) : [];\n // when this `if statement` does not continue forward it means that\n // a previous animation query has selected the current element and\n // is animating it. In this situation want to continue forwards and\n // allow the element to be queued up for animation later.\n if (currentPlayers && currentPlayers.length) {\n containsPotentialParentTransition = true;\n }\n else {\n let parent = element;\n while (parent = parent.parentNode) {\n const triggers = engine.statesByElement.get(parent);\n if (triggers) {\n containsPotentialParentTransition = true;\n break;\n }\n }\n }\n }\n // at this stage we know that the element will either get removed\n // during flush or will be picked up by a parent query. Either way\n // we need to fire the listeners for this element when it DOES get\n // removed (once the query parent animation is done or after flush)\n this.prepareLeaveAnimationListeners(element);\n // whether or not a parent has an animation we need to delay the deferral of the leave\n // operation until we have more information (which we do after flush() has been called)\n if (containsPotentialParentTransition) {\n engine.markElementAsRemoved(this.id, element, false, context);\n }\n else {\n const removalFlag = element[REMOVAL_FLAG];\n if (!removalFlag || removalFlag === NULL_REMOVAL_STATE) {\n // we do this after the flush has occurred such\n // that the callbacks can be fired\n engine.afterFlush(() => this.clearElementCache(element));\n engine.destroyInnerAnimations(element);\n engine._onRemovalComplete(element, context);\n }\n }\n }\n insertNode(element, parent) {\n addClass(element, this._hostClassName);\n }\n drainQueuedTransitions(microtaskId) {\n const instructions = [];\n this._queue.forEach(entry => {\n const player = entry.player;\n if (player.destroyed)\n return;\n const element = entry.element;\n const listeners = this._elementListeners.get(element);\n if (listeners) {\n listeners.forEach((listener) => {\n if (listener.name == entry.triggerName) {\n const baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);\n baseEvent['_data'] = microtaskId;\n listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);\n }\n });\n }\n if (player.markedForDestroy) {\n this._engine.afterFlush(() => {\n // now we can destroy the element properly since the event listeners have\n // been bound to the player\n player.destroy();\n });\n }\n else {\n instructions.push(entry);\n }\n });\n this._queue = [];\n return instructions.sort((a, b) => {\n // if depCount == 0 them move to front\n // otherwise if a contains b then move back\n const d0 = a.transition.ast.depCount;\n const d1 = b.transition.ast.depCount;\n if (d0 == 0 || d1 == 0) {\n return d0 - d1;\n }\n return this._engine.driver.containsElement(a.element, b.element) ? 1 : -1;\n });\n }\n destroy(context) {\n this.players.forEach(p => p.destroy());\n this._signalRemovalForInnerTriggers(this.hostElement, context);\n }\n elementContainsData(element) {\n let containsData = false;\n if (this._elementListeners.has(element))\n containsData = true;\n containsData =\n (this._queue.find(entry => entry.element === element) ? true : false) || containsData;\n return containsData;\n }\n}\nclass TransitionAnimationEngine {\n constructor(bodyNode, driver, _normalizer) {\n this.bodyNode = bodyNode;\n this.driver = driver;\n this._normalizer = _normalizer;\n this.players = [];\n this.newHostElements = new Map();\n this.playersByElement = new Map();\n this.playersByQueriedElement = new Map();\n this.statesByElement = new Map();\n this.disabledNodes = new Set();\n this.totalAnimations = 0;\n this.totalQueuedPlayers = 0;\n this._namespaceLookup = {};\n this._namespaceList = [];\n this._flushFns = [];\n this._whenQuietFns = [];\n this.namespacesByHostElement = new Map();\n this.collectedEnterElements = [];\n this.collectedLeaveElements = [];\n // this method is designed to be overridden by the code that uses this engine\n this.onRemovalComplete = (element, context) => { };\n }\n /** @internal */\n _onRemovalComplete(element, context) {\n this.onRemovalComplete(element, context);\n }\n get queuedPlayers() {\n const players = [];\n this._namespaceList.forEach(ns => {\n ns.players.forEach(player => {\n if (player.queued) {\n players.push(player);\n }\n });\n });\n return players;\n }\n createNamespace(namespaceId, hostElement) {\n const ns = new AnimationTransitionNamespace(namespaceId, hostElement, this);\n if (this.bodyNode && this.driver.containsElement(this.bodyNode, hostElement)) {\n this._balanceNamespaceList(ns, hostElement);\n }\n else {\n // defer this later until flush during when the host element has\n // been inserted so that we know exactly where to place it in\n // the namespace list\n this.newHostElements.set(hostElement, ns);\n // given that this host element is a part of the animation code, it\n // may or may not be inserted by a parent node that is of an\n // animation renderer type. If this happens then we can still have\n // access to this item when we query for :enter nodes. If the parent\n // is a renderer then the set data-structure will normalize the entry\n this.collectEnterElement(hostElement);\n }\n return this._namespaceLookup[namespaceId] = ns;\n }\n _balanceNamespaceList(ns, hostElement) {\n const namespaceList = this._namespaceList;\n const namespacesByHostElement = this.namespacesByHostElement;\n const limit = namespaceList.length - 1;\n if (limit >= 0) {\n let found = false;\n // Find the closest ancestor with an existing namespace so we can then insert `ns` after it,\n // establishing a top-down ordering of namespaces in `this._namespaceList`.\n let ancestor = this.driver.getParentElement(hostElement);\n while (ancestor) {\n const ancestorNs = namespacesByHostElement.get(ancestor);\n if (ancestorNs) {\n // An animation namespace has been registered for this ancestor, so we insert `ns`\n // right after it to establish top-down ordering of animation namespaces.\n const index = namespaceList.indexOf(ancestorNs);\n namespaceList.splice(index + 1, 0, ns);\n found = true;\n break;\n }\n ancestor = this.driver.getParentElement(ancestor);\n }\n if (!found) {\n // No namespace exists that is an ancestor of `ns`, so `ns` is inserted at the front to\n // ensure that any existing descendants are ordered after `ns`, retaining the desired\n // top-down ordering.\n namespaceList.unshift(ns);\n }\n }\n else {\n namespaceList.push(ns);\n }\n namespacesByHostElement.set(hostElement, ns);\n return ns;\n }\n register(namespaceId, hostElement) {\n let ns = this._namespaceLookup[namespaceId];\n if (!ns) {\n ns = this.createNamespace(namespaceId, hostElement);\n }\n return ns;\n }\n registerTrigger(namespaceId, name, trigger) {\n let ns = this._namespaceLookup[namespaceId];\n if (ns && ns.register(name, trigger)) {\n this.totalAnimations++;\n }\n }\n destroy(namespaceId, context) {\n if (!namespaceId)\n return;\n const ns = this._fetchNamespace(namespaceId);\n this.afterFlush(() => {\n this.namespacesByHostElement.delete(ns.hostElement);\n delete this._namespaceLookup[namespaceId];\n const index = this._namespaceList.indexOf(ns);\n if (index >= 0) {\n this._namespaceList.splice(index, 1);\n }\n });\n this.afterFlushAnimationsDone(() => ns.destroy(context));\n }\n _fetchNamespace(id) {\n return this._namespaceLookup[id];\n }\n fetchNamespacesByElement(element) {\n // normally there should only be one namespace per element, however\n // if @triggers are placed on both the component element and then\n // its host element (within the component code) then there will be\n // two namespaces returned. We use a set here to simply deduplicate\n // the namespaces in case (for the reason described above) there are multiple triggers\n const namespaces = new Set();\n const elementStates = this.statesByElement.get(element);\n if (elementStates) {\n for (let stateValue of elementStates.values()) {\n if (stateValue.namespaceId) {\n const ns = this._fetchNamespace(stateValue.namespaceId);\n if (ns) {\n namespaces.add(ns);\n }\n }\n }\n }\n return namespaces;\n }\n trigger(namespaceId, element, name, value) {\n if (isElementNode(element)) {\n const ns = this._fetchNamespace(namespaceId);\n if (ns) {\n ns.trigger(element, name, value);\n return true;\n }\n }\n return false;\n }\n insertNode(namespaceId, element, parent, insertBefore) {\n if (!isElementNode(element))\n return;\n // special case for when an element is removed and reinserted (move operation)\n // when this occurs we do not want to use the element for deletion later\n const details = element[REMOVAL_FLAG];\n if (details && details.setForRemoval) {\n details.setForRemoval = false;\n details.setForMove = true;\n const index = this.collectedLeaveElements.indexOf(element);\n if (index >= 0) {\n this.collectedLeaveElements.splice(index, 1);\n }\n }\n // in the event that the namespaceId is blank then the caller\n // code does not contain any animation code in it, but it is\n // just being called so that the node is marked as being inserted\n if (namespaceId) {\n const ns = this._fetchNamespace(namespaceId);\n // This if-statement is a workaround for router issue #21947.\n // The router sometimes hits a race condition where while a route\n // is being instantiated a new navigation arrives, triggering leave\n // animation of DOM that has not been fully initialized, until this\n // is resolved, we need to handle the scenario when DOM is not in a\n // consistent state during the animation.\n if (ns) {\n ns.insertNode(element, parent);\n }\n }\n // only *directives and host elements are inserted before\n if (insertBefore) {\n this.collectEnterElement(element);\n }\n }\n collectEnterElement(element) {\n this.collectedEnterElements.push(element);\n }\n markElementAsDisabled(element, value) {\n if (value) {\n if (!this.disabledNodes.has(element)) {\n this.disabledNodes.add(element);\n addClass(element, DISABLED_CLASSNAME);\n }\n }\n else if (this.disabledNodes.has(element)) {\n this.disabledNodes.delete(element);\n removeClass(element, DISABLED_CLASSNAME);\n }\n }\n removeNode(namespaceId, element, isHostElement, context) {\n if (isElementNode(element)) {\n const ns = namespaceId ? this._fetchNamespace(namespaceId) : null;\n if (ns) {\n ns.removeNode(element, context);\n }\n else {\n this.markElementAsRemoved(namespaceId, element, false, context);\n }\n if (isHostElement) {\n const hostNS = this.namespacesByHostElement.get(element);\n if (hostNS && hostNS.id !== namespaceId) {\n hostNS.removeNode(element, context);\n }\n }\n }\n else {\n this._onRemovalComplete(element, context);\n }\n }\n markElementAsRemoved(namespaceId, element, hasAnimation, context, previousTriggersValues) {\n this.collectedLeaveElements.push(element);\n element[REMOVAL_FLAG] = {\n namespaceId,\n setForRemoval: context,\n hasAnimation,\n removedBeforeQueried: false,\n previousTriggersValues\n };\n }\n listen(namespaceId, element, name, phase, callback) {\n if (isElementNode(element)) {\n return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);\n }\n return () => { };\n }\n _buildInstruction(entry, subTimelines, enterClassName, leaveClassName, skipBuildAst) {\n return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, enterClassName, leaveClassName, entry.fromState.options, entry.toState.options, subTimelines, skipBuildAst);\n }\n destroyInnerAnimations(containerElement) {\n let elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);\n elements.forEach(element => this.destroyActiveAnimationsForElement(element));\n if (this.playersByQueriedElement.size == 0)\n return;\n elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);\n elements.forEach(element => this.finishActiveQueriedAnimationOnElement(element));\n }\n destroyActiveAnimationsForElement(element) {\n const players = this.playersByElement.get(element);\n if (players) {\n players.forEach(player => {\n // special case for when an element is set for destruction, but hasn't started.\n // in this situation we want to delay the destruction until the flush occurs\n // so that any event listeners attached to the player are triggered.\n if (player.queued) {\n player.markedForDestroy = true;\n }\n else {\n player.destroy();\n }\n });\n }\n }\n finishActiveQueriedAnimationOnElement(element) {\n const players = this.playersByQueriedElement.get(element);\n if (players) {\n players.forEach(player => player.finish());\n }\n }\n whenRenderingDone() {\n return new Promise(resolve => {\n if (this.players.length) {\n return optimizeGroupPlayer(this.players).onDone(() => resolve());\n }\n else {\n resolve();\n }\n });\n }\n processLeaveNode(element) {\n var _a;\n const details = element[REMOVAL_FLAG];\n if (details && details.setForRemoval) {\n // this will prevent it from removing it twice\n element[REMOVAL_FLAG] = NULL_REMOVAL_STATE;\n if (details.namespaceId) {\n this.destroyInnerAnimations(element);\n const ns = this._fetchNamespace(details.namespaceId);\n if (ns) {\n ns.clearElementCache(element);\n }\n }\n this._onRemovalComplete(element, details.setForRemoval);\n }\n if ((_a = element.classList) === null || _a === void 0 ? void 0 : _a.contains(DISABLED_CLASSNAME)) {\n this.markElementAsDisabled(element, false);\n }\n this.driver.query(element, DISABLED_SELECTOR, true).forEach(node => {\n this.markElementAsDisabled(node, false);\n });\n }\n flush(microtaskId = -1) {\n let players = [];\n if (this.newHostElements.size) {\n this.newHostElements.forEach((ns, element) => this._balanceNamespaceList(ns, element));\n this.newHostElements.clear();\n }\n if (this.totalAnimations && this.collectedEnterElements.length) {\n for (let i = 0; i < this.collectedEnterElements.length; i++) {\n const elm = this.collectedEnterElements[i];\n addClass(elm, STAR_CLASSNAME);\n }\n }\n if (this._namespaceList.length &&\n (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {\n const cleanupFns = [];\n try {\n players = this._flushAnimations(cleanupFns, microtaskId);\n }\n finally {\n for (let i = 0; i < cleanupFns.length; i++) {\n cleanupFns[i]();\n }\n }\n }\n else {\n for (let i = 0; i < this.collectedLeaveElements.length; i++) {\n const element = this.collectedLeaveElements[i];\n this.processLeaveNode(element);\n }\n }\n this.totalQueuedPlayers = 0;\n this.collectedEnterElements.length = 0;\n this.collectedLeaveElements.length = 0;\n this._flushFns.forEach(fn => fn());\n this._flushFns = [];\n if (this._whenQuietFns.length) {\n // we move these over to a variable so that\n // if any new callbacks are registered in another\n // flush they do not populate the existing set\n const quietFns = this._whenQuietFns;\n this._whenQuietFns = [];\n if (players.length) {\n optimizeGroupPlayer(players).onDone(() => {\n quietFns.forEach(fn => fn());\n });\n }\n else {\n quietFns.forEach(fn => fn());\n }\n }\n }\n reportError(errors) {\n throw triggerTransitionsFailed(errors);\n }\n _flushAnimations(cleanupFns, microtaskId) {\n const subTimelines = new ElementInstructionMap();\n const skippedPlayers = [];\n const skippedPlayersMap = new Map();\n const queuedInstructions = [];\n const queriedElements = new Map();\n const allPreStyleElements = new Map();\n const allPostStyleElements = new Map();\n const disabledElementsSet = new Set();\n this.disabledNodes.forEach(node => {\n disabledElementsSet.add(node);\n const nodesThatAreDisabled = this.driver.query(node, QUEUED_SELECTOR, true);\n for (let i = 0; i < nodesThatAreDisabled.length; i++) {\n disabledElementsSet.add(nodesThatAreDisabled[i]);\n }\n });\n const bodyNode = this.bodyNode;\n const allTriggerElements = Array.from(this.statesByElement.keys());\n const enterNodeMap = buildRootMap(allTriggerElements, this.collectedEnterElements);\n // this must occur before the instructions are built below such that\n // the :enter queries match the elements (since the timeline queries\n // are fired during instruction building).\n const enterNodeMapIds = new Map();\n let i = 0;\n enterNodeMap.forEach((nodes, root) => {\n const className = ENTER_CLASSNAME + i++;\n enterNodeMapIds.set(root, className);\n nodes.forEach(node => addClass(node, className));\n });\n const allLeaveNodes = [];\n const mergedLeaveNodes = new Set();\n const leaveNodesWithoutAnimations = new Set();\n for (let i = 0; i < this.collectedLeaveElements.length; i++) {\n const element = this.collectedLeaveElements[i];\n const details = element[REMOVAL_FLAG];\n if (details && details.setForRemoval) {\n allLeaveNodes.push(element);\n mergedLeaveNodes.add(element);\n if (details.hasAnimation) {\n this.driver.query(element, STAR_SELECTOR, true).forEach(elm => mergedLeaveNodes.add(elm));\n }\n else {\n leaveNodesWithoutAnimations.add(element);\n }\n }\n }\n const leaveNodeMapIds = new Map();\n const leaveNodeMap = buildRootMap(allTriggerElements, Array.from(mergedLeaveNodes));\n leaveNodeMap.forEach((nodes, root) => {\n const className = LEAVE_CLASSNAME + i++;\n leaveNodeMapIds.set(root, className);\n nodes.forEach(node => addClass(node, className));\n });\n cleanupFns.push(() => {\n enterNodeMap.forEach((nodes, root) => {\n const className = enterNodeMapIds.get(root);\n nodes.forEach(node => removeClass(node, className));\n });\n leaveNodeMap.forEach((nodes, root) => {\n const className = leaveNodeMapIds.get(root);\n nodes.forEach(node => removeClass(node, className));\n });\n allLeaveNodes.forEach(element => {\n this.processLeaveNode(element);\n });\n });\n const allPlayers = [];\n const erroneousTransitions = [];\n for (let i = this._namespaceList.length - 1; i >= 0; i--) {\n const ns = this._namespaceList[i];\n ns.drainQueuedTransitions(microtaskId).forEach(entry => {\n const player = entry.player;\n const element = entry.element;\n allPlayers.push(player);\n if (this.collectedEnterElements.length) {\n const details = element[REMOVAL_FLAG];\n // animations for move operations (elements being removed and reinserted,\n // e.g. when the order of an *ngFor list changes) are currently not supported\n if (details && details.setForMove) {\n if (details.previousTriggersValues &&\n details.previousTriggersValues.has(entry.triggerName)) {\n const previousValue = details.previousTriggersValues.get(entry.triggerName);\n // we need to restore the previous trigger value since the element has\n // only been moved and hasn't actually left the DOM\n const triggersWithStates = this.statesByElement.get(entry.element);\n if (triggersWithStates && triggersWithStates.has(entry.triggerName)) {\n const state = triggersWithStates.get(entry.triggerName);\n state.value = previousValue;\n triggersWithStates.set(entry.triggerName, state);\n }\n }\n player.destroy();\n return;\n }\n }\n const nodeIsOrphaned = !bodyNode || !this.driver.containsElement(bodyNode, element);\n const leaveClassName = leaveNodeMapIds.get(element);\n const enterClassName = enterNodeMapIds.get(element);\n const instruction = this._buildInstruction(entry, subTimelines, enterClassName, leaveClassName, nodeIsOrphaned);\n if (instruction.errors && instruction.errors.length) {\n erroneousTransitions.push(instruction);\n return;\n }\n // even though the element may not be in the DOM, it may still\n // be added at a later point (due to the mechanics of content\n // projection and/or dynamic component insertion) therefore it's\n // important to still style the element.\n if (nodeIsOrphaned) {\n player.onStart(() => eraseStyles(element, instruction.fromStyles));\n player.onDestroy(() => setStyles(element, instruction.toStyles));\n skippedPlayers.push(player);\n return;\n }\n // if an unmatched transition is queued and ready to go\n // then it SHOULD NOT render an animation and cancel the\n // previously running animations.\n if (entry.isFallbackTransition) {\n player.onStart(() => eraseStyles(element, instruction.fromStyles));\n player.onDestroy(() => setStyles(element, instruction.toStyles));\n skippedPlayers.push(player);\n return;\n }\n // this means that if a parent animation uses this animation as a sub-trigger\n // then it will instruct the timeline builder not to add a player delay, but\n // instead stretch the first keyframe gap until the animation starts. This is\n // important in order to prevent extra initialization styles from being\n // required by the user for the animation.\n const timelines = [];\n instruction.timelines.forEach(tl => {\n tl.stretchStartingKeyframe = true;\n if (!this.disabledNodes.has(tl.element)) {\n timelines.push(tl);\n }\n });\n instruction.timelines = timelines;\n subTimelines.append(element, instruction.timelines);\n const tuple = { instruction, player, element };\n queuedInstructions.push(tuple);\n instruction.queriedElements.forEach(element => getOrSetDefaultValue(queriedElements, element, []).push(player));\n instruction.preStyleProps.forEach((stringMap, element) => {\n if (stringMap.size) {\n let setVal = allPreStyleElements.get(element);\n if (!setVal) {\n allPreStyleElements.set(element, setVal = new Set());\n }\n stringMap.forEach((_, prop) => setVal.add(prop));\n }\n });\n instruction.postStyleProps.forEach((stringMap, element) => {\n let setVal = allPostStyleElements.get(element);\n if (!setVal) {\n allPostStyleElements.set(element, setVal = new Set());\n }\n stringMap.forEach((_, prop) => setVal.add(prop));\n });\n });\n }\n if (erroneousTransitions.length) {\n const errors = [];\n erroneousTransitions.forEach(instruction => {\n errors.push(transitionFailed(instruction.triggerName, instruction.errors));\n });\n allPlayers.forEach(player => player.destroy());\n this.reportError(errors);\n }\n const allPreviousPlayersMap = new Map();\n // this map tells us which element in the DOM tree is contained by\n // which animation. Further down this map will get populated once\n // the players are built and in doing so we can use it to efficiently\n // figure out if a sub player is skipped due to a parent player having priority.\n const animationElementMap = new Map();\n queuedInstructions.forEach(entry => {\n const element = entry.element;\n if (subTimelines.has(element)) {\n animationElementMap.set(element, element);\n this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);\n }\n });\n skippedPlayers.forEach(player => {\n const element = player.element;\n const previousPlayers = this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);\n previousPlayers.forEach(prevPlayer => {\n getOrSetDefaultValue(allPreviousPlayersMap, element, []).push(prevPlayer);\n prevPlayer.destroy();\n });\n });\n // this is a special case for nodes that will be removed either by\n // having their own leave animations or by being queried in a container\n // that will be removed once a parent animation is complete. The idea\n // here is that * styles must be identical to ! styles because of\n // backwards compatibility (* is also filled in by default in many places).\n // Otherwise * styles will return an empty value or \"auto\" since the element\n // passed to getComputedStyle will not be visible (since * === destination)\n const replaceNodes = allLeaveNodes.filter(node => {\n return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);\n });\n // POST STAGE: fill the * styles\n const postStylesMap = new Map();\n const allLeaveQueriedNodes = cloakAndComputeStyles(postStylesMap, this.driver, leaveNodesWithoutAnimations, allPostStyleElements, AUTO_STYLE);\n allLeaveQueriedNodes.forEach(node => {\n if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {\n replaceNodes.push(node);\n }\n });\n // PRE STAGE: fill the ! styles\n const preStylesMap = new Map();\n enterNodeMap.forEach((nodes, root) => {\n cloakAndComputeStyles(preStylesMap, this.driver, new Set(nodes), allPreStyleElements, ɵPRE_STYLE);\n });\n replaceNodes.forEach(node => {\n var _a, _b;\n const post = postStylesMap.get(node);\n const pre = preStylesMap.get(node);\n postStylesMap.set(node, new Map([...Array.from((_a = post === null || post === void 0 ? void 0 : post.entries()) !== null && _a !== void 0 ? _a : []), ...Array.from((_b = pre === null || pre === void 0 ? void 0 : pre.entries()) !== null && _b !== void 0 ? _b : [])]));\n });\n const rootPlayers = [];\n const subPlayers = [];\n const NO_PARENT_ANIMATION_ELEMENT_DETECTED = {};\n queuedInstructions.forEach(entry => {\n const { element, player, instruction } = entry;\n // this means that it was never consumed by a parent animation which\n // means that it is independent and therefore should be set for animation\n if (subTimelines.has(element)) {\n if (disabledElementsSet.has(element)) {\n player.onDestroy(() => setStyles(element, instruction.toStyles));\n player.disabled = true;\n player.overrideTotalTime(instruction.totalTime);\n skippedPlayers.push(player);\n return;\n }\n // this will flow up the DOM and query the map to figure out\n // if a parent animation has priority over it. In the situation\n // that a parent is detected then it will cancel the loop. If\n // nothing is detected, or it takes a few hops to find a parent,\n // then it will fill in the missing nodes and signal them as having\n // a detected parent (or a NO_PARENT value via a special constant).\n let parentWithAnimation = NO_PARENT_ANIMATION_ELEMENT_DETECTED;\n if (animationElementMap.size > 1) {\n let elm = element;\n const parentsToAdd = [];\n while (elm = elm.parentNode) {\n const detectedParent = animationElementMap.get(elm);\n if (detectedParent) {\n parentWithAnimation = detectedParent;\n break;\n }\n parentsToAdd.push(elm);\n }\n parentsToAdd.forEach(parent => animationElementMap.set(parent, parentWithAnimation));\n }\n const innerPlayer = this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);\n player.setRealPlayer(innerPlayer);\n if (parentWithAnimation === NO_PARENT_ANIMATION_ELEMENT_DETECTED) {\n rootPlayers.push(player);\n }\n else {\n const parentPlayers = this.playersByElement.get(parentWithAnimation);\n if (parentPlayers && parentPlayers.length) {\n player.parentPlayer = optimizeGroupPlayer(parentPlayers);\n }\n skippedPlayers.push(player);\n }\n }\n else {\n eraseStyles(element, instruction.fromStyles);\n player.onDestroy(() => setStyles(element, instruction.toStyles));\n // there still might be a ancestor player animating this\n // element therefore we will still add it as a sub player\n // even if its animation may be disabled\n subPlayers.push(player);\n if (disabledElementsSet.has(element)) {\n skippedPlayers.push(player);\n }\n }\n });\n // find all of the sub players' corresponding inner animation players\n subPlayers.forEach(player => {\n // even if no players are found for a sub animation it\n // will still complete itself after the next tick since it's Noop\n const playersForElement = skippedPlayersMap.get(player.element);\n if (playersForElement && playersForElement.length) {\n const innerPlayer = optimizeGroupPlayer(playersForElement);\n player.setRealPlayer(innerPlayer);\n }\n });\n // the reason why we don't actually play the animation is\n // because all that a skipped player is designed to do is to\n // fire the start/done transition callback events\n skippedPlayers.forEach(player => {\n if (player.parentPlayer) {\n player.syncPlayerEvents(player.parentPlayer);\n }\n else {\n player.destroy();\n }\n });\n // run through all of the queued removals and see if they\n // were picked up by a query. If not then perform the removal\n // operation right away unless a parent animation is ongoing.\n for (let i = 0; i < allLeaveNodes.length; i++) {\n const element = allLeaveNodes[i];\n const details = element[REMOVAL_FLAG];\n removeClass(element, LEAVE_CLASSNAME);\n // this means the element has a removal animation that is being\n // taken care of and therefore the inner elements will hang around\n // until that animation is over (or the parent queried animation)\n if (details && details.hasAnimation)\n continue;\n let players = [];\n // if this element is queried or if it contains queried children\n // then we want for the element not to be removed from the page\n // until the queried animations have finished\n if (queriedElements.size) {\n let queriedPlayerResults = queriedElements.get(element);\n if (queriedPlayerResults && queriedPlayerResults.length) {\n players.push(...queriedPlayerResults);\n }\n let queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true);\n for (let j = 0; j < queriedInnerElements.length; j++) {\n let queriedPlayers = queriedElements.get(queriedInnerElements[j]);\n if (queriedPlayers && queriedPlayers.length) {\n players.push(...queriedPlayers);\n }\n }\n }\n const activePlayers = players.filter(p => !p.destroyed);\n if (activePlayers.length) {\n removeNodesAfterAnimationDone(this, element, activePlayers);\n }\n else {\n this.processLeaveNode(element);\n }\n }\n // this is required so the cleanup method doesn't remove them\n allLeaveNodes.length = 0;\n rootPlayers.forEach(player => {\n this.players.push(player);\n player.onDone(() => {\n player.destroy();\n const index = this.players.indexOf(player);\n this.players.splice(index, 1);\n });\n player.play();\n });\n return rootPlayers;\n }\n elementContainsData(namespaceId, element) {\n let containsData = false;\n const details = element[REMOVAL_FLAG];\n if (details && details.setForRemoval)\n containsData = true;\n if (this.playersByElement.has(element))\n containsData = true;\n if (this.playersByQueriedElement.has(element))\n containsData = true;\n if (this.statesByElement.has(element))\n containsData = true;\n return this._fetchNamespace(namespaceId).elementContainsData(element) || containsData;\n }\n afterFlush(callback) {\n this._flushFns.push(callback);\n }\n afterFlushAnimationsDone(callback) {\n this._whenQuietFns.push(callback);\n }\n _getPreviousPlayers(element, isQueriedElement, namespaceId, triggerName, toStateValue) {\n let players = [];\n if (isQueriedElement) {\n const queriedElementPlayers = this.playersByQueriedElement.get(element);\n if (queriedElementPlayers) {\n players = queriedElementPlayers;\n }\n }\n else {\n const elementPlayers = this.playersByElement.get(element);\n if (elementPlayers) {\n const isRemovalAnimation = !toStateValue || toStateValue == VOID_VALUE;\n elementPlayers.forEach(player => {\n if (player.queued)\n return;\n if (!isRemovalAnimation && player.triggerName != triggerName)\n return;\n players.push(player);\n });\n }\n }\n if (namespaceId || triggerName) {\n players = players.filter(player => {\n if (namespaceId && namespaceId != player.namespaceId)\n return false;\n if (triggerName && triggerName != player.triggerName)\n return false;\n return true;\n });\n }\n return players;\n }\n _beforeAnimationBuild(namespaceId, instruction, allPreviousPlayersMap) {\n const triggerName = instruction.triggerName;\n const rootElement = instruction.element;\n // when a removal animation occurs, ALL previous players are collected\n // and destroyed (even if they are outside of the current namespace)\n const targetNameSpaceId = instruction.isRemovalTransition ? undefined : namespaceId;\n const targetTriggerName = instruction.isRemovalTransition ? undefined : triggerName;\n for (const timelineInstruction of instruction.timelines) {\n const element = timelineInstruction.element;\n const isQueriedElement = element !== rootElement;\n const players = getOrSetDefaultValue(allPreviousPlayersMap, element, []);\n const previousPlayers = this._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);\n previousPlayers.forEach(player => {\n const realPlayer = player.getRealPlayer();\n if (realPlayer.beforeDestroy) {\n realPlayer.beforeDestroy();\n }\n player.destroy();\n players.push(player);\n });\n }\n // this needs to be done so that the PRE/POST styles can be\n // computed properly without interfering with the previous animation\n eraseStyles(rootElement, instruction.fromStyles);\n }\n _buildAnimation(namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {\n const triggerName = instruction.triggerName;\n const rootElement = instruction.element;\n // we first run this so that the previous animation player\n // data can be passed into the successive animation players\n const allQueriedPlayers = [];\n const allConsumedElements = new Set();\n const allSubElements = new Set();\n const allNewPlayers = instruction.timelines.map(timelineInstruction => {\n const element = timelineInstruction.element;\n allConsumedElements.add(element);\n // FIXME (matsko): make sure to-be-removed animations are removed properly\n const details = element[REMOVAL_FLAG];\n if (details && details.removedBeforeQueried)\n return new NoopAnimationPlayer(timelineInstruction.duration, timelineInstruction.delay);\n const isQueriedElement = element !== rootElement;\n const previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY)\n .map(p => p.getRealPlayer()))\n .filter(p => {\n // the `element` is not apart of the AnimationPlayer definition, but\n // Mock/WebAnimations\n // use the element within their implementation. This will be added in Angular5 to\n // AnimationPlayer\n const pp = p;\n return pp.element ? pp.element === element : false;\n });\n const preStyles = preStylesMap.get(element);\n const postStyles = postStylesMap.get(element);\n const keyframes = normalizeKeyframes$1(this.driver, this._normalizer, element, timelineInstruction.keyframes, preStyles, postStyles);\n const player = this._buildPlayer(timelineInstruction, keyframes, previousPlayers);\n // this means that this particular player belongs to a sub trigger. It is\n // important that we match this player up with the corresponding (@trigger.listener)\n if (timelineInstruction.subTimeline && skippedPlayersMap) {\n allSubElements.add(element);\n }\n if (isQueriedElement) {\n const wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element);\n wrappedPlayer.setRealPlayer(player);\n allQueriedPlayers.push(wrappedPlayer);\n }\n return player;\n });\n allQueriedPlayers.forEach(player => {\n getOrSetDefaultValue(this.playersByQueriedElement, player.element, []).push(player);\n player.onDone(() => deleteOrUnsetInMap(this.playersByQueriedElement, player.element, player));\n });\n allConsumedElements.forEach(element => addClass(element, NG_ANIMATING_CLASSNAME));\n const player = optimizeGroupPlayer(allNewPlayers);\n player.onDestroy(() => {\n allConsumedElements.forEach(element => removeClass(element, NG_ANIMATING_CLASSNAME));\n setStyles(rootElement, instruction.toStyles);\n });\n // this basically makes all of the callbacks for sub element animations\n // be dependent on the upper players for when they finish\n allSubElements.forEach(element => {\n getOrSetDefaultValue(skippedPlayersMap, element, []).push(player);\n });\n return player;\n }\n _buildPlayer(instruction, keyframes, previousPlayers) {\n if (keyframes.length > 0) {\n return this.driver.animate(instruction.element, keyframes, instruction.duration, instruction.delay, instruction.easing, previousPlayers);\n }\n // special case for when an empty transition|definition is provided\n // ... there is no point in rendering an empty animation\n return new NoopAnimationPlayer(instruction.duration, instruction.delay);\n }\n}\nclass TransitionAnimationPlayer {\n constructor(namespaceId, triggerName, element) {\n this.namespaceId = namespaceId;\n this.triggerName = triggerName;\n this.element = element;\n this._player = new NoopAnimationPlayer();\n this._containsRealPlayer = false;\n this._queuedCallbacks = new Map();\n this.destroyed = false;\n this.markedForDestroy = false;\n this.disabled = false;\n this.queued = true;\n this.totalTime = 0;\n }\n setRealPlayer(player) {\n if (this._containsRealPlayer)\n return;\n this._player = player;\n this._queuedCallbacks.forEach((callbacks, phase) => {\n callbacks.forEach(callback => listenOnPlayer(player, phase, undefined, callback));\n });\n this._queuedCallbacks.clear();\n this._containsRealPlayer = true;\n this.overrideTotalTime(player.totalTime);\n this.queued = false;\n }\n getRealPlayer() {\n return this._player;\n }\n overrideTotalTime(totalTime) {\n this.totalTime = totalTime;\n }\n syncPlayerEvents(player) {\n const p = this._player;\n if (p.triggerCallback) {\n player.onStart(() => p.triggerCallback('start'));\n }\n player.onDone(() => this.finish());\n player.onDestroy(() => this.destroy());\n }\n _queueEvent(name, callback) {\n getOrSetDefaultValue(this._queuedCallbacks, name, []).push(callback);\n }\n onDone(fn) {\n if (this.queued) {\n this._queueEvent('done', fn);\n }\n this._player.onDone(fn);\n }\n onStart(fn) {\n if (this.queued) {\n this._queueEvent('start', fn);\n }\n this._player.onStart(fn);\n }\n onDestroy(fn) {\n if (this.queued) {\n this._queueEvent('destroy', fn);\n }\n this._player.onDestroy(fn);\n }\n init() {\n this._player.init();\n }\n hasStarted() {\n return this.queued ? false : this._player.hasStarted();\n }\n play() {\n !this.queued && this._player.play();\n }\n pause() {\n !this.queued && this._player.pause();\n }\n restart() {\n !this.queued && this._player.restart();\n }\n finish() {\n this._player.finish();\n }\n destroy() {\n this.destroyed = true;\n this._player.destroy();\n }\n reset() {\n !this.queued && this._player.reset();\n }\n setPosition(p) {\n if (!this.queued) {\n this._player.setPosition(p);\n }\n }\n getPosition() {\n return this.queued ? 0 : this._player.getPosition();\n }\n /** @internal */\n triggerCallback(phaseName) {\n const p = this._player;\n if (p.triggerCallback) {\n p.triggerCallback(phaseName);\n }\n }\n}\nfunction deleteOrUnsetInMap(map, key, value) {\n let currentValues = map.get(key);\n if (currentValues) {\n if (currentValues.length) {\n const index = currentValues.indexOf(value);\n currentValues.splice(index, 1);\n }\n if (currentValues.length == 0) {\n map.delete(key);\n }\n }\n return currentValues;\n}\nfunction normalizeTriggerValue(value) {\n // we use `!= null` here because it's the most simple\n // way to test against a \"falsy\" value without mixing\n // in empty strings or a zero value. DO NOT OPTIMIZE.\n return value != null ? value : null;\n}\nfunction isElementNode(node) {\n return node && node['nodeType'] === 1;\n}\nfunction isTriggerEventValid(eventName) {\n return eventName == 'start' || eventName == 'done';\n}\nfunction cloakElement(element, value) {\n const oldValue = element.style.display;\n element.style.display = value != null ? value : 'none';\n return oldValue;\n}\nfunction cloakAndComputeStyles(valuesMap, driver, elements, elementPropsMap, defaultStyle) {\n const cloakVals = [];\n elements.forEach(element => cloakVals.push(cloakElement(element)));\n const failedElements = [];\n elementPropsMap.forEach((props, element) => {\n const styles = new Map();\n props.forEach(prop => {\n const value = driver.computeStyle(element, prop, defaultStyle);\n styles.set(prop, value);\n // there is no easy way to detect this because a sub element could be removed\n // by a parent animation element being detached.\n if (!value || value.length == 0) {\n element[REMOVAL_FLAG] = NULL_REMOVED_QUERIED_STATE;\n failedElements.push(element);\n }\n });\n valuesMap.set(element, styles);\n });\n // we use a index variable here since Set.forEach(a, i) does not return\n // an index value for the closure (but instead just the value)\n let i = 0;\n elements.forEach(element => cloakElement(element, cloakVals[i++]));\n return failedElements;\n}\n/*\nSince the Angular renderer code will return a collection of inserted\nnodes in all areas of a DOM tree, it's up to this algorithm to figure\nout which nodes are roots for each animation @trigger.\n\nBy placing each inserted node into a Set and traversing upwards, it\nis possible to find the @trigger elements and well any direct *star\ninsertion nodes, if a @trigger root is found then the enter element\nis placed into the Map[@trigger] spot.\n */\nfunction buildRootMap(roots, nodes) {\n const rootMap = new Map();\n roots.forEach(root => rootMap.set(root, []));\n if (nodes.length == 0)\n return rootMap;\n const NULL_NODE = 1;\n const nodeSet = new Set(nodes);\n const localRootMap = new Map();\n function getRoot(node) {\n if (!node)\n return NULL_NODE;\n let root = localRootMap.get(node);\n if (root)\n return root;\n const parent = node.parentNode;\n if (rootMap.has(parent)) { // ngIf inside @trigger\n root = parent;\n }\n else if (nodeSet.has(parent)) { // ngIf inside ngIf\n root = NULL_NODE;\n }\n else { // recurse upwards\n root = getRoot(parent);\n }\n localRootMap.set(node, root);\n return root;\n }\n nodes.forEach(node => {\n const root = getRoot(node);\n if (root !== NULL_NODE) {\n rootMap.get(root).push(node);\n }\n });\n return rootMap;\n}\nfunction addClass(element, className) {\n var _a;\n (_a = element.classList) === null || _a === void 0 ? void 0 : _a.add(className);\n}\nfunction removeClass(element, className) {\n var _a;\n (_a = element.classList) === null || _a === void 0 ? void 0 : _a.remove(className);\n}\nfunction removeNodesAfterAnimationDone(engine, element, players) {\n optimizeGroupPlayer(players).onDone(() => engine.processLeaveNode(element));\n}\nfunction flattenGroupPlayers(players) {\n const finalPlayers = [];\n _flattenGroupPlayersRecur(players, finalPlayers);\n return finalPlayers;\n}\nfunction _flattenGroupPlayersRecur(players, finalPlayers) {\n for (let i = 0; i < players.length; i++) {\n const player = players[i];\n if (player instanceof ɵAnimationGroupPlayer) {\n _flattenGroupPlayersRecur(player.players, finalPlayers);\n }\n else {\n finalPlayers.push(player);\n }\n }\n}\nfunction objEquals(a, b) {\n const k1 = Object.keys(a);\n const k2 = Object.keys(b);\n if (k1.length != k2.length)\n return false;\n for (let i = 0; i < k1.length; i++) {\n const prop = k1[i];\n if (!b.hasOwnProperty(prop) || a[prop] !== b[prop])\n return false;\n }\n return true;\n}\nfunction replacePostStylesAsPre(element, allPreStyleElements, allPostStyleElements) {\n const postEntry = allPostStyleElements.get(element);\n if (!postEntry)\n return false;\n let preEntry = allPreStyleElements.get(element);\n if (preEntry) {\n postEntry.forEach(data => preEntry.add(data));\n }\n else {\n allPreStyleElements.set(element, postEntry);\n }\n allPostStyleElements.delete(element);\n return true;\n}\n\nclass AnimationEngine {\n constructor(bodyNode, _driver, _normalizer) {\n this.bodyNode = bodyNode;\n this._driver = _driver;\n this._normalizer = _normalizer;\n this._triggerCache = {};\n // this method is designed to be overridden by the code that uses this engine\n this.onRemovalComplete = (element, context) => { };\n this._transitionEngine = new TransitionAnimationEngine(bodyNode, _driver, _normalizer);\n this._timelineEngine = new TimelineAnimationEngine(bodyNode, _driver, _normalizer);\n this._transitionEngine.onRemovalComplete = (element, context) => this.onRemovalComplete(element, context);\n }\n registerTrigger(componentId, namespaceId, hostElement, name, metadata) {\n const cacheKey = componentId + '-' + name;\n let trigger = this._triggerCache[cacheKey];\n if (!trigger) {\n const errors = [];\n const warnings = [];\n const ast = buildAnimationAst(this._driver, metadata, errors, warnings);\n if (errors.length) {\n throw triggerBuildFailed(name, errors);\n }\n if (warnings.length) {\n warnTriggerBuild(name, warnings);\n }\n trigger = buildTrigger(name, ast, this._normalizer);\n this._triggerCache[cacheKey] = trigger;\n }\n this._transitionEngine.registerTrigger(namespaceId, name, trigger);\n }\n register(namespaceId, hostElement) {\n this._transitionEngine.register(namespaceId, hostElement);\n }\n destroy(namespaceId, context) {\n this._transitionEngine.destroy(namespaceId, context);\n }\n onInsert(namespaceId, element, parent, insertBefore) {\n this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);\n }\n onRemove(namespaceId, element, context, isHostElement) {\n this._transitionEngine.removeNode(namespaceId, element, isHostElement || false, context);\n }\n disableAnimations(element, disable) {\n this._transitionEngine.markElementAsDisabled(element, disable);\n }\n process(namespaceId, element, property, value) {\n if (property.charAt(0) == '@') {\n const [id, action] = parseTimelineCommand(property);\n const args = value;\n this._timelineEngine.command(id, element, action, args);\n }\n else {\n this._transitionEngine.trigger(namespaceId, element, property, value);\n }\n }\n listen(namespaceId, element, eventName, eventPhase, callback) {\n // @@listen\n if (eventName.charAt(0) == '@') {\n const [id, action] = parseTimelineCommand(eventName);\n return this._timelineEngine.listen(id, element, action, callback);\n }\n return this._transitionEngine.listen(namespaceId, element, eventName, eventPhase, callback);\n }\n flush(microtaskId = -1) {\n this._transitionEngine.flush(microtaskId);\n }\n get players() {\n return this._transitionEngine.players\n .concat(this._timelineEngine.players);\n }\n whenRenderingDone() {\n return this._transitionEngine.whenRenderingDone();\n }\n}\n\n/**\n * Returns an instance of `SpecialCasedStyles` if and when any special (non animateable) styles are\n * detected.\n *\n * In CSS there exist properties that cannot be animated within a keyframe animation\n * (whether it be via CSS keyframes or web-animations) and the animation implementation\n * will ignore them. This function is designed to detect those special cased styles and\n * return a container that will be executed at the start and end of the animation.\n *\n * @returns an instance of `SpecialCasedStyles` if any special styles are detected otherwise `null`\n */\nfunction packageNonAnimatableStyles(element, styles) {\n let startStyles = null;\n let endStyles = null;\n if (Array.isArray(styles) && styles.length) {\n startStyles = filterNonAnimatableStyles(styles[0]);\n if (styles.length > 1) {\n endStyles = filterNonAnimatableStyles(styles[styles.length - 1]);\n }\n }\n else if (styles instanceof Map) {\n startStyles = filterNonAnimatableStyles(styles);\n }\n return (startStyles || endStyles) ? new SpecialCasedStyles(element, startStyles, endStyles) :\n null;\n}\n/**\n * Designed to be executed during a keyframe-based animation to apply any special-cased styles.\n *\n * When started (when the `start()` method is run) then the provided `startStyles`\n * will be applied. When finished (when the `finish()` method is called) the\n * `endStyles` will be applied as well any any starting styles. Finally when\n * `destroy()` is called then all styles will be removed.\n */\nclass SpecialCasedStyles {\n constructor(_element, _startStyles, _endStyles) {\n this._element = _element;\n this._startStyles = _startStyles;\n this._endStyles = _endStyles;\n this._state = 0 /* SpecialCasedStylesState.Pending */;\n let initialStyles = SpecialCasedStyles.initialStylesByElement.get(_element);\n if (!initialStyles) {\n SpecialCasedStyles.initialStylesByElement.set(_element, initialStyles = new Map());\n }\n this._initialStyles = initialStyles;\n }\n start() {\n if (this._state < 1 /* SpecialCasedStylesState.Started */) {\n if (this._startStyles) {\n setStyles(this._element, this._startStyles, this._initialStyles);\n }\n this._state = 1 /* SpecialCasedStylesState.Started */;\n }\n }\n finish() {\n this.start();\n if (this._state < 2 /* SpecialCasedStylesState.Finished */) {\n setStyles(this._element, this._initialStyles);\n if (this._endStyles) {\n setStyles(this._element, this._endStyles);\n this._endStyles = null;\n }\n this._state = 1 /* SpecialCasedStylesState.Started */;\n }\n }\n destroy() {\n this.finish();\n if (this._state < 3 /* SpecialCasedStylesState.Destroyed */) {\n SpecialCasedStyles.initialStylesByElement.delete(this._element);\n if (this._startStyles) {\n eraseStyles(this._element, this._startStyles);\n this._endStyles = null;\n }\n if (this._endStyles) {\n eraseStyles(this._element, this._endStyles);\n this._endStyles = null;\n }\n setStyles(this._element, this._initialStyles);\n this._state = 3 /* SpecialCasedStylesState.Destroyed */;\n }\n }\n}\nSpecialCasedStyles.initialStylesByElement = ( /* @__PURE__ */new WeakMap());\nfunction filterNonAnimatableStyles(styles) {\n let result = null;\n styles.forEach((val, prop) => {\n if (isNonAnimatableStyle(prop)) {\n result = result || new Map();\n result.set(prop, val);\n }\n });\n return result;\n}\nfunction isNonAnimatableStyle(prop) {\n return prop === 'display' || prop === 'position';\n}\n\nclass WebAnimationsPlayer {\n constructor(element, keyframes, options, _specialStyles) {\n this.element = element;\n this.keyframes = keyframes;\n this.options = options;\n this._specialStyles = _specialStyles;\n this._onDoneFns = [];\n this._onStartFns = [];\n this._onDestroyFns = [];\n this._initialized = false;\n this._finished = false;\n this._started = false;\n this._destroyed = false;\n // the following original fns are persistent copies of the _onStartFns and _onDoneFns\n // and are used to reset the fns to their original values upon reset()\n // (since the _onStartFns and _onDoneFns get deleted after they are called)\n this._originalOnDoneFns = [];\n this._originalOnStartFns = [];\n this.time = 0;\n this.parentPlayer = null;\n this.currentSnapshot = new Map();\n this._duration = options['duration'];\n this._delay = options['delay'] || 0;\n this.time = this._duration + this._delay;\n }\n _onFinish() {\n if (!this._finished) {\n this._finished = true;\n this._onDoneFns.forEach(fn => fn());\n this._onDoneFns = [];\n }\n }\n init() {\n this._buildPlayer();\n this._preparePlayerBeforeStart();\n }\n _buildPlayer() {\n if (this._initialized)\n return;\n this._initialized = true;\n const keyframes = this.keyframes;\n this.domPlayer =\n this._triggerWebAnimation(this.element, keyframes, this.options);\n this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : new Map();\n this.domPlayer.addEventListener('finish', () => this._onFinish());\n }\n _preparePlayerBeforeStart() {\n // this is required so that the player doesn't start to animate right away\n if (this._delay) {\n this._resetDomPlayerState();\n }\n else {\n this.domPlayer.pause();\n }\n }\n _convertKeyframesToObject(keyframes) {\n const kfs = [];\n keyframes.forEach(frame => {\n kfs.push(Object.fromEntries(frame));\n });\n return kfs;\n }\n /** @internal */\n _triggerWebAnimation(element, keyframes, options) {\n // jscompiler doesn't seem to know animate is a native property because it's not fully\n // supported yet across common browsers (we polyfill it for Edge/Safari) [CL #143630929]\n return element['animate'](this._convertKeyframesToObject(keyframes), options);\n }\n onStart(fn) {\n this._originalOnStartFns.push(fn);\n this._onStartFns.push(fn);\n }\n onDone(fn) {\n this._originalOnDoneFns.push(fn);\n this._onDoneFns.push(fn);\n }\n onDestroy(fn) {\n this._onDestroyFns.push(fn);\n }\n play() {\n this._buildPlayer();\n if (!this.hasStarted()) {\n this._onStartFns.forEach(fn => fn());\n this._onStartFns = [];\n this._started = true;\n if (this._specialStyles) {\n this._specialStyles.start();\n }\n }\n this.domPlayer.play();\n }\n pause() {\n this.init();\n this.domPlayer.pause();\n }\n finish() {\n this.init();\n if (this._specialStyles) {\n this._specialStyles.finish();\n }\n this._onFinish();\n this.domPlayer.finish();\n }\n reset() {\n this._resetDomPlayerState();\n this._destroyed = false;\n this._finished = false;\n this._started = false;\n this._onStartFns = this._originalOnStartFns;\n this._onDoneFns = this._originalOnDoneFns;\n }\n _resetDomPlayerState() {\n if (this.domPlayer) {\n this.domPlayer.cancel();\n }\n }\n restart() {\n this.reset();\n this.play();\n }\n hasStarted() {\n return this._started;\n }\n destroy() {\n if (!this._destroyed) {\n this._destroyed = true;\n this._resetDomPlayerState();\n this._onFinish();\n if (this._specialStyles) {\n this._specialStyles.destroy();\n }\n this._onDestroyFns.forEach(fn => fn());\n this._onDestroyFns = [];\n }\n }\n setPosition(p) {\n if (this.domPlayer === undefined) {\n this.init();\n }\n this.domPlayer.currentTime = p * this.time;\n }\n getPosition() {\n return this.domPlayer.currentTime / this.time;\n }\n get totalTime() {\n return this._delay + this._duration;\n }\n beforeDestroy() {\n const styles = new Map();\n if (this.hasStarted()) {\n // note: this code is invoked only when the `play` function was called prior to this\n // (thus `hasStarted` returns true), this implies that the code that initializes\n // `_finalKeyframe` has also been executed and the non-null assertion can be safely used here\n const finalKeyframe = this._finalKeyframe;\n finalKeyframe.forEach((val, prop) => {\n if (prop !== 'offset') {\n styles.set(prop, this._finished ? val : computeStyle(this.element, prop));\n }\n });\n }\n this.currentSnapshot = styles;\n }\n /** @internal */\n triggerCallback(phaseName) {\n const methods = phaseName === 'start' ? this._onStartFns : this._onDoneFns;\n methods.forEach(fn => fn());\n methods.length = 0;\n }\n}\n\nclass WebAnimationsDriver {\n validateStyleProperty(prop) {\n // Perform actual validation in dev mode only, in prod mode this check is a noop.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n return validateStyleProperty(prop);\n }\n return true;\n }\n validateAnimatableStyleProperty(prop) {\n // Perform actual validation in dev mode only, in prod mode this check is a noop.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const cssProp = camelCaseToDashCase(prop);\n return validateWebAnimatableStyleProperty(cssProp);\n }\n return true;\n }\n matchesElement(_element, _selector) {\n // This method is deprecated and no longer in use so we return false.\n return false;\n }\n containsElement(elm1, elm2) {\n return containsElement(elm1, elm2);\n }\n getParentElement(element) {\n return getParentElement(element);\n }\n query(element, selector, multi) {\n return invokeQuery(element, selector, multi);\n }\n computeStyle(element, prop, defaultValue) {\n return window.getComputedStyle(element)[prop];\n }\n animate(element, keyframes, duration, delay, easing, previousPlayers = []) {\n const fill = delay == 0 ? 'both' : 'forwards';\n const playerOptions = { duration, delay, fill };\n // we check for this to avoid having a null|undefined value be present\n // for the easing (which results in an error for certain browsers #9752)\n if (easing) {\n playerOptions['easing'] = easing;\n }\n const previousStyles = new Map();\n const previousWebAnimationPlayers = previousPlayers.filter(player => player instanceof WebAnimationsPlayer);\n if (allowPreviousPlayerStylesMerge(duration, delay)) {\n previousWebAnimationPlayers.forEach(player => {\n player.currentSnapshot.forEach((val, prop) => previousStyles.set(prop, val));\n });\n }\n let _keyframes = normalizeKeyframes(keyframes).map(styles => copyStyles(styles));\n _keyframes = balancePreviousStylesIntoKeyframes(element, _keyframes, previousStyles);\n const specialStyles = packageNonAnimatableStyles(element, _keyframes);\n return new WebAnimationsPlayer(element, _keyframes, playerOptions, specialStyles);\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 * @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 { AnimationDriver, Animation as ɵAnimation, AnimationEngine as ɵAnimationEngine, AnimationStyleNormalizer as ɵAnimationStyleNormalizer, NoopAnimationDriver as ɵNoopAnimationDriver, NoopAnimationStyleNormalizer as ɵNoopAnimationStyleNormalizer, WebAnimationsDriver as ɵWebAnimationsDriver, WebAnimationsPlayer as ɵWebAnimationsPlayer, WebAnimationsStyleNormalizer as ɵWebAnimationsStyleNormalizer, allowPreviousPlayerStylesMerge as ɵallowPreviousPlayerStylesMerge, containsElement as ɵcontainsElement, getParentElement as ɵgetParentElement, invokeQuery as ɵinvokeQuery, normalizeKeyframes as ɵnormalizeKeyframes, validateStyleProperty as ɵvalidateStyleProperty };\n","/**\n * @license Angular v14.3.0\n * (c) 2010-2022 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { ViewEncapsulation, Injectable, Inject, RendererFactory2, NgZone, ANIMATION_MODULE_TYPE, NgModule } from '@angular/core';\nexport { ANIMATION_MODULE_TYPE } from '@angular/core';\nimport { ɵDomRendererFactory2, BrowserModule } from '@angular/platform-browser';\nimport { AnimationBuilder, sequence, AnimationFactory } from '@angular/animations';\nimport * as i1 from '@angular/animations/browser';\nimport { ɵAnimationEngine, ɵWebAnimationsStyleNormalizer, ɵAnimationStyleNormalizer, AnimationDriver, ɵWebAnimationsDriver, ɵNoopAnimationDriver } from '@angular/animations/browser';\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 */\nclass BrowserAnimationBuilder extends AnimationBuilder {\n constructor(rootRenderer, doc) {\n super();\n this._nextAnimationId = 0;\n const typeData = { id: '0', encapsulation: ViewEncapsulation.None, styles: [], data: { animation: [] } };\n this._renderer = rootRenderer.createRenderer(doc.body, typeData);\n }\n build(animation) {\n const id = this._nextAnimationId.toString();\n this._nextAnimationId++;\n const entry = Array.isArray(animation) ? sequence(animation) : animation;\n issueAnimationCommand(this._renderer, null, id, 'register', [entry]);\n return new BrowserAnimationFactory(id, this._renderer);\n }\n}\nBrowserAnimationBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationBuilder, deps: [{ token: i0.RendererFactory2 }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });\nBrowserAnimationBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationBuilder });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationBuilder, decorators: [{\n type: Injectable\n }], ctorParameters: function () {\n return [{ type: i0.RendererFactory2 }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }];\n } });\nclass BrowserAnimationFactory extends AnimationFactory {\n constructor(_id, _renderer) {\n super();\n this._id = _id;\n this._renderer = _renderer;\n }\n create(element, options) {\n return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);\n }\n}\nclass RendererAnimationPlayer {\n constructor(id, element, options, _renderer) {\n this.id = id;\n this.element = element;\n this._renderer = _renderer;\n this.parentPlayer = null;\n this._started = false;\n this.totalTime = 0;\n this._command('create', options);\n }\n _listen(eventName, callback) {\n return this._renderer.listen(this.element, `@@${this.id}:${eventName}`, callback);\n }\n _command(command, ...args) {\n return issueAnimationCommand(this._renderer, this.element, this.id, command, args);\n }\n onDone(fn) {\n this._listen('done', fn);\n }\n onStart(fn) {\n this._listen('start', fn);\n }\n onDestroy(fn) {\n this._listen('destroy', fn);\n }\n init() {\n this._command('init');\n }\n hasStarted() {\n return this._started;\n }\n play() {\n this._command('play');\n this._started = true;\n }\n pause() {\n this._command('pause');\n }\n restart() {\n this._command('restart');\n }\n finish() {\n this._command('finish');\n }\n destroy() {\n this._command('destroy');\n }\n reset() {\n this._command('reset');\n this._started = false;\n }\n setPosition(p) {\n this._command('setPosition', p);\n }\n getPosition() {\n var _a, _b;\n return (_b = (_a = this._renderer.engine.players[+this.id]) === null || _a === void 0 ? void 0 : _a.getPosition()) !== null && _b !== void 0 ? _b : 0;\n }\n}\nfunction issueAnimationCommand(renderer, element, id, command, args) {\n return renderer.setProperty(element, `@@${id}:${command}`, args);\n}\n\nconst ANIMATION_PREFIX = '@';\nconst DISABLE_ANIMATIONS_FLAG = '@.disabled';\nclass AnimationRendererFactory {\n constructor(delegate, engine, _zone) {\n this.delegate = delegate;\n this.engine = engine;\n this._zone = _zone;\n this._currentId = 0;\n this._microtaskId = 1;\n this._animationCallbacksBuffer = [];\n this._rendererCache = new Map();\n this._cdRecurDepth = 0;\n this.promise = Promise.resolve(0);\n engine.onRemovalComplete = (element, delegate) => {\n // Note: if a component element has a leave animation, and a host leave animation,\n // the view engine will call `removeChild` for the parent\n // component renderer as well as for the child component renderer.\n // Therefore, we need to check if we already removed the element.\n const parentNode = delegate === null || delegate === void 0 ? void 0 : delegate.parentNode(element);\n if (parentNode) {\n delegate.removeChild(parentNode, element);\n }\n };\n }\n createRenderer(hostElement, type) {\n const EMPTY_NAMESPACE_ID = '';\n // cache the delegates to find out which cached delegate can\n // be used by which cached renderer\n const delegate = this.delegate.createRenderer(hostElement, type);\n if (!hostElement || !type || !type.data || !type.data['animation']) {\n let renderer = this._rendererCache.get(delegate);\n if (!renderer) {\n // Ensure that the renderer is removed from the cache on destroy\n // since it may contain references to detached DOM nodes.\n const onRendererDestroy = () => this._rendererCache.delete(delegate);\n renderer =\n new BaseAnimationRenderer(EMPTY_NAMESPACE_ID, delegate, this.engine, onRendererDestroy);\n // only cache this result when the base renderer is used\n this._rendererCache.set(delegate, renderer);\n }\n return renderer;\n }\n const componentId = type.id;\n const namespaceId = type.id + '-' + this._currentId;\n this._currentId++;\n this.engine.register(namespaceId, hostElement);\n const registerTrigger = (trigger) => {\n if (Array.isArray(trigger)) {\n trigger.forEach(registerTrigger);\n }\n else {\n this.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger);\n }\n };\n const animationTriggers = type.data['animation'];\n animationTriggers.forEach(registerTrigger);\n return new AnimationRenderer(this, namespaceId, delegate, this.engine);\n }\n begin() {\n this._cdRecurDepth++;\n if (this.delegate.begin) {\n this.delegate.begin();\n }\n }\n _scheduleCountTask() {\n // always use promise to schedule microtask instead of use Zone\n this.promise.then(() => {\n this._microtaskId++;\n });\n }\n /** @internal */\n scheduleListenerCallback(count, fn, data) {\n if (count >= 0 && count < this._microtaskId) {\n this._zone.run(() => fn(data));\n return;\n }\n if (this._animationCallbacksBuffer.length == 0) {\n Promise.resolve(null).then(() => {\n this._zone.run(() => {\n this._animationCallbacksBuffer.forEach(tuple => {\n const [fn, data] = tuple;\n fn(data);\n });\n this._animationCallbacksBuffer = [];\n });\n });\n }\n this._animationCallbacksBuffer.push([fn, data]);\n }\n end() {\n this._cdRecurDepth--;\n // this is to prevent animations from running twice when an inner\n // component does CD when a parent component instead has inserted it\n if (this._cdRecurDepth == 0) {\n this._zone.runOutsideAngular(() => {\n this._scheduleCountTask();\n this.engine.flush(this._microtaskId);\n });\n }\n if (this.delegate.end) {\n this.delegate.end();\n }\n }\n whenRenderingDone() {\n return this.engine.whenRenderingDone();\n }\n}\nAnimationRendererFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AnimationRendererFactory, deps: [{ token: i0.RendererFactory2 }, { token: i1.ɵAnimationEngine }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nAnimationRendererFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AnimationRendererFactory });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AnimationRendererFactory, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }, { type: i1.ɵAnimationEngine }, { type: i0.NgZone }]; } });\nclass BaseAnimationRenderer {\n constructor(namespaceId, delegate, engine, _onDestroy) {\n this.namespaceId = namespaceId;\n this.delegate = delegate;\n this.engine = engine;\n this._onDestroy = _onDestroy;\n this.destroyNode = this.delegate.destroyNode ? (n) => delegate.destroyNode(n) : null;\n }\n get data() {\n return this.delegate.data;\n }\n destroy() {\n var _a;\n this.engine.destroy(this.namespaceId, this.delegate);\n this.delegate.destroy();\n (_a = this._onDestroy) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n createElement(name, namespace) {\n return this.delegate.createElement(name, namespace);\n }\n createComment(value) {\n return this.delegate.createComment(value);\n }\n createText(value) {\n return this.delegate.createText(value);\n }\n appendChild(parent, newChild) {\n this.delegate.appendChild(parent, newChild);\n this.engine.onInsert(this.namespaceId, newChild, parent, false);\n }\n insertBefore(parent, newChild, refChild, isMove = true) {\n this.delegate.insertBefore(parent, newChild, refChild);\n // If `isMove` true than we should animate this insert.\n this.engine.onInsert(this.namespaceId, newChild, parent, isMove);\n }\n removeChild(parent, oldChild, isHostElement) {\n this.engine.onRemove(this.namespaceId, oldChild, this.delegate, isHostElement);\n }\n selectRootElement(selectorOrNode, preserveContent) {\n return this.delegate.selectRootElement(selectorOrNode, preserveContent);\n }\n parentNode(node) {\n return this.delegate.parentNode(node);\n }\n nextSibling(node) {\n return this.delegate.nextSibling(node);\n }\n setAttribute(el, name, value, namespace) {\n this.delegate.setAttribute(el, name, value, namespace);\n }\n removeAttribute(el, name, namespace) {\n this.delegate.removeAttribute(el, name, namespace);\n }\n addClass(el, name) {\n this.delegate.addClass(el, name);\n }\n removeClass(el, name) {\n this.delegate.removeClass(el, name);\n }\n setStyle(el, style, value, flags) {\n this.delegate.setStyle(el, style, value, flags);\n }\n removeStyle(el, style, flags) {\n this.delegate.removeStyle(el, style, flags);\n }\n setProperty(el, name, value) {\n if (name.charAt(0) == ANIMATION_PREFIX && name == DISABLE_ANIMATIONS_FLAG) {\n this.disableAnimations(el, !!value);\n }\n else {\n this.delegate.setProperty(el, name, value);\n }\n }\n setValue(node, value) {\n this.delegate.setValue(node, value);\n }\n listen(target, eventName, callback) {\n return this.delegate.listen(target, eventName, callback);\n }\n disableAnimations(element, value) {\n this.engine.disableAnimations(element, value);\n }\n}\nclass AnimationRenderer extends BaseAnimationRenderer {\n constructor(factory, namespaceId, delegate, engine, onDestroy) {\n super(namespaceId, delegate, engine, onDestroy);\n this.factory = factory;\n this.namespaceId = namespaceId;\n }\n setProperty(el, name, value) {\n if (name.charAt(0) == ANIMATION_PREFIX) {\n if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {\n value = value === undefined ? true : !!value;\n this.disableAnimations(el, value);\n }\n else {\n this.engine.process(this.namespaceId, el, name.slice(1), value);\n }\n }\n else {\n this.delegate.setProperty(el, name, value);\n }\n }\n listen(target, eventName, callback) {\n if (eventName.charAt(0) == ANIMATION_PREFIX) {\n const element = resolveElementFromTarget(target);\n let name = eventName.slice(1);\n let phase = '';\n // @listener.phase is for trigger animation callbacks\n // @@listener is for animation builder callbacks\n if (name.charAt(0) != ANIMATION_PREFIX) {\n [name, phase] = parseTriggerCallbackName(name);\n }\n return this.engine.listen(this.namespaceId, element, name, phase, event => {\n const countId = event['_data'] || -1;\n this.factory.scheduleListenerCallback(countId, callback, event);\n });\n }\n return this.delegate.listen(target, eventName, callback);\n }\n}\nfunction resolveElementFromTarget(target) {\n switch (target) {\n case 'body':\n return document.body;\n case 'document':\n return document;\n case 'window':\n return window;\n default:\n return target;\n }\n}\nfunction parseTriggerCallbackName(triggerName) {\n const dotIndex = triggerName.indexOf('.');\n const trigger = triggerName.substring(0, dotIndex);\n const phase = triggerName.slice(dotIndex + 1);\n return [trigger, phase];\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 InjectableAnimationEngine extends ɵAnimationEngine {\n // The `ApplicationRef` is injected here explicitly to force the dependency ordering.\n // Since the `ApplicationRef` should be created earlier before the `AnimationEngine`, they\n // both have `ngOnDestroy` hooks and `flush()` must be called after all views are destroyed.\n constructor(doc, driver, normalizer, appRef) {\n super(doc.body, driver, normalizer);\n }\n ngOnDestroy() {\n this.flush();\n }\n}\nInjectableAnimationEngine.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: InjectableAnimationEngine, deps: [{ token: DOCUMENT }, { token: i1.AnimationDriver }, { token: i1.ɵAnimationStyleNormalizer }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable });\nInjectableAnimationEngine.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: InjectableAnimationEngine });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: InjectableAnimationEngine, decorators: [{\n type: Injectable\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i1.AnimationDriver }, { type: i1.ɵAnimationStyleNormalizer }, { type: i0.ApplicationRef }];\n } });\nfunction instantiateDefaultStyleNormalizer() {\n return new ɵWebAnimationsStyleNormalizer();\n}\nfunction instantiateRendererFactory(renderer, engine, zone) {\n return new AnimationRendererFactory(renderer, engine, zone);\n}\nconst SHARED_ANIMATION_PROVIDERS = [\n { provide: AnimationBuilder, useClass: BrowserAnimationBuilder },\n { provide: ɵAnimationStyleNormalizer, useFactory: instantiateDefaultStyleNormalizer },\n { provide: ɵAnimationEngine, useClass: InjectableAnimationEngine }, {\n provide: RendererFactory2,\n useFactory: instantiateRendererFactory,\n deps: [ɵDomRendererFactory2, ɵAnimationEngine, NgZone]\n }\n];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserModule.\n */\nconst BROWSER_ANIMATIONS_PROVIDERS = [\n { provide: AnimationDriver, useFactory: () => new ɵWebAnimationsDriver() },\n { provide: ANIMATION_MODULE_TYPE, useValue: 'BrowserAnimations' }, ...SHARED_ANIMATION_PROVIDERS\n];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserTestingModule.\n */\nconst BROWSER_NOOP_ANIMATIONS_PROVIDERS = [\n { provide: AnimationDriver, useClass: ɵNoopAnimationDriver },\n { provide: ANIMATION_MODULE_TYPE, useValue: 'NoopAnimations' }, ...SHARED_ANIMATION_PROVIDERS\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 * Exports `BrowserModule` with additional [dependency-injection providers](guide/glossary#provider)\n * for use with animations. See [Animations](guide/animations).\n * @publicApi\n */\nclass BrowserAnimationsModule {\n /**\n * Configures the module based on the specified object.\n *\n * @param config Object used to configure the behavior of the `BrowserAnimationsModule`.\n * @see `BrowserAnimationsModuleConfig`\n *\n * @usageNotes\n * When registering the `BrowserAnimationsModule`, you can use the `withConfig`\n * function as follows:\n * ```\n * @NgModule({\n * imports: [BrowserAnimationsModule.withConfig(config)]\n * })\n * class MyNgModule {}\n * ```\n */\n static withConfig(config) {\n return {\n ngModule: BrowserAnimationsModule,\n providers: config.disableAnimations ? BROWSER_NOOP_ANIMATIONS_PROVIDERS :\n BROWSER_ANIMATIONS_PROVIDERS\n };\n }\n}\nBrowserAnimationsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nBrowserAnimationsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationsModule, exports: [BrowserModule] });\nBrowserAnimationsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationsModule, providers: BROWSER_ANIMATIONS_PROVIDERS, imports: [BrowserModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [BrowserModule],\n providers: BROWSER_ANIMATIONS_PROVIDERS,\n }]\n }] });\n/**\n * Returns the set of [dependency-injection providers](guide/glossary#provider)\n * to enable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * @usageNotes\n *\n * The function is useful when you want to enable animations in an application\n * bootstrapped using the `bootstrapApplication` function. In this scenario there\n * is no need to import the `BrowserAnimationsModule` NgModule at all, just add\n * providers returned by this function to the `providers` list as show below.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideAnimations()\n * ]\n * });\n * ```\n *\n * @publicApi\n * @developerPreview\n */\nfunction provideAnimations() {\n // Return a copy to prevent changes to the original array in case any in-place\n // alterations are performed to the `provideAnimations` call results in app code.\n return [...BROWSER_ANIMATIONS_PROVIDERS];\n}\n/**\n * A null player that must be imported to allow disabling of animations.\n * @publicApi\n */\nclass NoopAnimationsModule {\n}\nNoopAnimationsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nNoopAnimationsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationsModule, exports: [BrowserModule] });\nNoopAnimationsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationsModule, providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS, imports: [BrowserModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [BrowserModule],\n providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS,\n }]\n }] });\n/**\n * Returns the set of [dependency-injection providers](guide/glossary#provider)\n * to disable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * @usageNotes\n *\n * The function is useful when you want to bootstrap an application using\n * the `bootstrapApplication` function, but you need to disable animations\n * (for example, when running tests).\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideNoopAnimations()\n * ]\n * });\n * ```\n *\n * @publicApi\n * @developerPreview\n */\nfunction provideNoopAnimations() {\n // Return a copy to prevent changes to the original array in case any in-place\n // alterations are performed to the `provideNoopAnimations` call results in app code.\n return [...BROWSER_NOOP_ANIMATIONS_PROVIDERS];\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 * @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 { BrowserAnimationsModule, NoopAnimationsModule, provideAnimations, provideNoopAnimations, AnimationRenderer as ɵAnimationRenderer, AnimationRendererFactory as ɵAnimationRendererFactory, BrowserAnimationBuilder as ɵBrowserAnimationBuilder, BrowserAnimationFactory as ɵBrowserAnimationFactory, InjectableAnimationEngine as ɵInjectableAnimationEngine };\n","import { AppConsts } from '@shared/AppConsts';\r\nimport * as rtlDetect from 'rtl-detect';\r\nimport { StyleLoaderService } from '@shared/utils/style-loader.service';\r\nimport { ThemeHelper } from '@app/shared/layout/themes/ThemeHelper';\r\nimport { ThemeAssetContributorFactory } from './ThemeAssetContributorFactory';\r\n\r\nexport class DynamicResourcesHelper {\r\n static loadResources(callback: () => void): void {\r\n Promise.all([DynamicResourcesHelper.loadStyles()]).then(() => {\r\n callback();\r\n });\r\n }\r\n\r\n static loadStyles(): Promise {\r\n let theme = ThemeHelper.getTheme();\r\n\r\n const isRtl = rtlDetect.isRtlLang(abp.localization.currentLanguage.name);\r\n\r\n if (isRtl) {\r\n document.documentElement.setAttribute('dir', 'rtl');\r\n }\r\n\r\n const skin = ThemeHelper.darkMode() ? 'dark' : 'light';\r\n document.documentElement.setAttribute('data-theme', skin);\r\n\r\n const cssPostfix = isRtl ? '.rtl' : '';\r\n const styleLoaderService = new StyleLoaderService();\r\n\r\n let styleUrls = [\r\n AppConsts.appBaseUrl +\r\n '/assets/metronic/themes/' +\r\n theme +\r\n '/css/style.bundle' +\r\n cssPostfix.replace('-', '.') +\r\n '.css',\r\n AppConsts.appBaseUrl +\r\n '/assets/metronic/themes/' +\r\n theme +\r\n '/plugins/global/plugins.bundle' +\r\n cssPostfix.replace('-', '.') +\r\n '.css',\r\n AppConsts.appBaseUrl +\r\n '/assets/primeng/themes/mdc-' +\r\n (ThemeHelper.darkMode() ? 'dark' : 'light') +\r\n '-indigo/theme.css', // PrimeNG Dark mode styles\r\n AppConsts.appBaseUrl + '/assets/primeng/datatable/css/primeng.datatable' + cssPostfix + '.min.css', // PrimeNG RTL styles\r\n AppConsts.appBaseUrl + '/assets/common/styles/metronic-customize.min.css',\r\n AppConsts.appBaseUrl + '/assets/common/styles/themes/' + theme + '/metronic-customize.min.css',\r\n AppConsts.appBaseUrl + '/assets/common/styles/metronic-customize-angular.min.css',\r\n ].concat(DynamicResourcesHelper.getAdditionalThemeAssets());\r\n\r\n DynamicResourcesHelper.setBodyAttributes();\r\n styleLoaderService.loadArray(styleUrls);\r\n\r\n if (isRtl) {\r\n styleLoaderService.load(AppConsts.appBaseUrl + '/assets/common/styles/abp-zero-template-rtl.min.css');\r\n }\r\n\r\n return Promise.resolve(true);\r\n }\r\n\r\n static getAdditionalThemeAssets(): string[] {\r\n let assetContributor = ThemeAssetContributorFactory.getCurrent();\r\n if (!assetContributor) {\r\n return [];\r\n }\r\n\r\n return assetContributor.getAssetUrls();\r\n }\r\n\r\n static setBodyAttributes(): void {\r\n let assetContributor = ThemeAssetContributorFactory.getCurrent();\r\n if (!assetContributor) {\r\n return;\r\n }\r\n\r\n var attributes = assetContributor.getBodyAttributes();\r\n for (var i = 0; i < attributes.length; i++) {\r\n var attr = attributes[i];\r\n document.body.setAttribute(attr.name, attr.value);\r\n }\r\n }\r\n}\r\n","import { CompilerOptions, NgModuleRef, Type } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\nimport { AppAuthService } from '@app/shared/common/auth/app-auth.service';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { SubdomainTenancyNameFinder } from '@shared/helpers/SubdomainTenancyNameFinder';\r\nimport { UrlHelper } from './shared/helpers/UrlHelper';\r\nimport { XmlHttpRequestHelper } from '@shared/helpers/XmlHttpRequestHelper';\r\nimport { DynamicResourcesHelper } from '@shared/helpers/DynamicResourcesHelper';\r\nimport { environment } from './environments/environment';\r\nimport { LocaleMappingService } from '@shared/locale-mapping.service';\r\nimport { LocalStorageService } from '@shared/utils/local-storage.service';\r\nimport { merge as _merge } from 'lodash-es';\r\nimport { DateTime, Settings } from 'luxon';\r\nimport {\r\n AccountServiceProxy,\r\n IsTenantAvailableInput,\r\n IsTenantAvailableOutput,\r\n TenantAvailabilityState,\r\n} from '@shared/service-proxies/service-proxies';\r\nimport { Injector } from '@angular/core';\r\n\r\nexport class AppPreBootstrap {\r\n static run(appRootUrl: string, injector: Injector, callback: () => void, resolve: any, reject: any): void {\r\n AppPreBootstrap.getApplicationConfig(appRootUrl, injector, () => {\r\n if (UrlHelper.isInstallUrl(location.href)) {\r\n AppPreBootstrap.loadAssetsForInstallPage(callback);\r\n return;\r\n }\r\n\r\n if (UrlHelper.isDownloadUrl(location.href)) {\r\n AppPreBootstrap.loadAssetsForDownloadPage(callback);\r\n return;\r\n }\r\n\r\n const queryStringObj = UrlHelper.getQueryParameters();\r\n\r\n if (queryStringObj.redirect && queryStringObj.redirect === 'TenantRegistration') {\r\n if (queryStringObj.forceNewRegistration) {\r\n new AppAuthService().logout();\r\n }\r\n\r\n location.href = AppConsts.appBaseUrl + '/account/select-edition';\r\n } else if (queryStringObj.impersonationToken) {\r\n if (queryStringObj.userDelegationId) {\r\n AppPreBootstrap.delegatedImpersonatedAuthenticate(\r\n queryStringObj.userDelegationId,\r\n queryStringObj.impersonationToken,\r\n queryStringObj.tenantId,\r\n () => {\r\n AppPreBootstrap.getUserConfiguration(callback);\r\n }\r\n );\r\n } else {\r\n AppPreBootstrap.impersonatedAuthenticate(\r\n queryStringObj.impersonationToken,\r\n queryStringObj.tenantId,\r\n () => {\r\n AppPreBootstrap.getUserConfiguration(callback);\r\n }\r\n );\r\n }\r\n } else if (queryStringObj.switchAccountToken) {\r\n AppPreBootstrap.linkedAccountAuthenticate(\r\n queryStringObj.switchAccountToken,\r\n queryStringObj.tenantId,\r\n () => {\r\n AppPreBootstrap.getUserConfiguration(callback);\r\n }\r\n );\r\n } else {\r\n AppPreBootstrap.getUserConfiguration(callback);\r\n }\r\n });\r\n }\r\n\r\n static bootstrap(\r\n moduleType: Type,\r\n compilerOptions?: CompilerOptions | CompilerOptions[]\r\n ): Promise> {\r\n return platformBrowserDynamic().bootstrapModule(moduleType, compilerOptions);\r\n }\r\n\r\n private static getApplicationConfig(appRootUrl: string, injector: Injector, callback: () => void) {\r\n let type = 'GET';\r\n let url = appRootUrl + 'assets/' + environment.appConfig;\r\n let customHeaders = [\r\n {\r\n name: abp.multiTenancy.tenantIdCookieName,\r\n value: abp.multiTenancy.getTenantIdCookie() + '',\r\n },\r\n ];\r\n\r\n XmlHttpRequestHelper.ajax(type, url, customHeaders, null, (result) => {\r\n const subdomainTenancyNameFinder = new SubdomainTenancyNameFinder();\r\n const tenancyName = subdomainTenancyNameFinder.getCurrentTenancyNameOrNull(result.appBaseUrl);\r\n\r\n AppConsts.localeMappings = result.localeMappings;\r\n AppConsts.appStore = result.appStore || {};\r\n\r\n AppConsts.appBaseUrlFormat = result.appBaseUrl;\r\n AppConsts.remoteServiceBaseUrlFormat = result.remoteServiceBaseUrl;\r\n\r\n if (tenancyName == null) {\r\n AppConsts.appBaseUrl = result.appBaseUrl.replace(AppConsts.tenancyNamePlaceHolderInUrl + '.', '');\r\n AppConsts.remoteServiceBaseUrl = result.remoteServiceBaseUrl.replace(\r\n AppConsts.tenancyNamePlaceHolderInUrl + '.',\r\n ''\r\n );\r\n\r\n callback();\r\n } else {\r\n AppConsts.appBaseUrl = result.appBaseUrl.replace(AppConsts.tenancyNamePlaceHolderInUrl, tenancyName);\r\n AppConsts.remoteServiceBaseUrl = result.remoteServiceBaseUrl.replace(\r\n AppConsts.tenancyNamePlaceHolderInUrl,\r\n tenancyName\r\n );\r\n\r\n const remoteServiceBaseUrl = result.remoteServiceBaseUrl;\r\n\r\n let accountServiceProxy: AccountServiceProxy = injector.get(AccountServiceProxy);\r\n let input = new IsTenantAvailableInput();\r\n input.tenancyName = tenancyName;\r\n\r\n accountServiceProxy.isTenantAvailable(input).subscribe((result: IsTenantAvailableOutput) => {\r\n if (result.state === TenantAvailabilityState.Available) {\r\n abp.multiTenancy.setTenantIdCookie(result.tenantId);\r\n } else if (AppConsts.PreventNotExistingTenantSubdomains) {\r\n if (subdomainTenancyNameFinder.urlHasTenancyNamePlaceholder(remoteServiceBaseUrl)) {\r\n const message = abp.localization.localize('ThereIsNoTenantDefinedWithName{0}', AppConsts.localization.defaultLocalizationSourceName);\r\n abp.message.warn(abp.utils.formatString(message, tenancyName));\r\n document.location.href = remoteServiceBaseUrl.replace(\r\n AppConsts.tenancyNamePlaceHolderInUrl + '.',\r\n ''\r\n );\r\n }\r\n }\r\n\r\n callback();\r\n });\r\n }\r\n });\r\n }\r\n\r\n private static getCurrentClockProvider(currentProviderName: string): abp.timing.IClockProvider {\r\n if (currentProviderName === 'unspecifiedClockProvider') {\r\n return abp.timing.unspecifiedClockProvider;\r\n }\r\n\r\n if (currentProviderName === 'utcClockProvider') {\r\n return abp.timing.utcClockProvider;\r\n }\r\n\r\n return abp.timing.localClockProvider;\r\n }\r\n\r\n private static getRequetHeadersWithDefaultValues() {\r\n const cookieLangValue = abp.utils.getCookieValue('Abp.Localization.CultureName');\r\n\r\n let requestHeaders = {\r\n '.AspNetCore.Culture': 'c=' + cookieLangValue + '|uic=' + cookieLangValue,\r\n [abp.multiTenancy.tenantIdCookieName]: abp.multiTenancy.getTenantIdCookie(),\r\n };\r\n\r\n if (!cookieLangValue) {\r\n delete requestHeaders['.AspNetCore.Culture'];\r\n }\r\n\r\n return requestHeaders;\r\n }\r\n\r\n private static impersonatedAuthenticate(impersonationToken: string, tenantId: number, callback: () => void): void {\r\n abp.multiTenancy.setTenantIdCookie(tenantId);\r\n let requestHeaders = AppPreBootstrap.getRequetHeadersWithDefaultValues();\r\n\r\n XmlHttpRequestHelper.ajax(\r\n 'POST',\r\n AppConsts.remoteServiceBaseUrl +\r\n '/api/TokenAuth/ImpersonatedAuthenticate?impersonationToken=' +\r\n impersonationToken,\r\n requestHeaders,\r\n null,\r\n (response) => {\r\n let result = response.result;\r\n abp.auth.setToken(result.accessToken);\r\n AppPreBootstrap.setEncryptedTokenCookie(result.encryptedAccessToken, () => {\r\n callback();\r\n location.search = '';\r\n });\r\n }\r\n );\r\n }\r\n\r\n private static delegatedImpersonatedAuthenticate(\r\n userDelegationId: number,\r\n impersonationToken: string,\r\n tenantId: number,\r\n callback: () => void\r\n ): void {\r\n abp.multiTenancy.setTenantIdCookie(tenantId);\r\n let requestHeaders = AppPreBootstrap.getRequetHeadersWithDefaultValues();\r\n\r\n XmlHttpRequestHelper.ajax(\r\n 'POST',\r\n AppConsts.remoteServiceBaseUrl +\r\n '/api/TokenAuth/DelegatedImpersonatedAuthenticate?userDelegationId=' +\r\n userDelegationId +\r\n '&impersonationToken=' +\r\n impersonationToken,\r\n requestHeaders,\r\n null,\r\n (response) => {\r\n let result = response.result;\r\n abp.auth.setToken(result.accessToken);\r\n AppPreBootstrap.setEncryptedTokenCookie(result.encryptedAccessToken, () => {\r\n callback();\r\n location.search = '';\r\n });\r\n }\r\n );\r\n }\r\n\r\n private static linkedAccountAuthenticate(switchAccountToken: string, tenantId: number, callback: () => void): void {\r\n abp.multiTenancy.setTenantIdCookie(tenantId);\r\n let requestHeaders = AppPreBootstrap.getRequetHeadersWithDefaultValues();\r\n\r\n XmlHttpRequestHelper.ajax(\r\n 'POST',\r\n AppConsts.remoteServiceBaseUrl +\r\n '/api/TokenAuth/LinkedAccountAuthenticate?switchAccountToken=' +\r\n switchAccountToken,\r\n requestHeaders,\r\n null,\r\n (response) => {\r\n let result = response.result;\r\n abp.auth.setToken(result.accessToken);\r\n AppPreBootstrap.setEncryptedTokenCookie(result.encryptedAccessToken, () => {\r\n callback();\r\n location.search = '';\r\n });\r\n }\r\n );\r\n }\r\n\r\n private static getUserConfiguration(callback: () => void): any {\r\n const token = abp.auth.getToken();\r\n\r\n let requestHeaders = AppPreBootstrap.getRequetHeadersWithDefaultValues();\r\n\r\n if (token) {\r\n requestHeaders['Authorization'] = 'Bearer ' + token;\r\n }\r\n\r\n return XmlHttpRequestHelper.ajax(\r\n 'GET',\r\n AppConsts.remoteServiceBaseUrl + '/AbpUserConfiguration/GetAll',\r\n requestHeaders,\r\n null,\r\n (response) => {\r\n let result = response.result;\r\n\r\n _merge(abp, result);\r\n\r\n abp.clock.provider = this.getCurrentClockProvider(result.clock.provider);\r\n\r\n AppPreBootstrap.configureLuxon();\r\n\r\n abp.event.trigger('abp.dynamicScriptsInitialized');\r\n\r\n AppConsts.recaptchaSiteKey = abp.setting.get('Recaptcha.SiteKey');\r\n AppConsts.subscriptionExpireNootifyDayCount = parseInt(\r\n abp.setting.get('App.TenantManagement.SubscriptionExpireNotifyDayCount')\r\n );\r\n\r\n DynamicResourcesHelper.loadResources(callback);\r\n }\r\n );\r\n }\r\n\r\n private static configureLuxon() {\r\n let luxonLocale = new LocaleMappingService().map('luxon', abp.localization.currentLanguage.name);\r\n\r\n DateTime.local().setLocale(luxonLocale);\r\n DateTime.utc().setLocale(luxonLocale);\r\n Settings.defaultLocale = luxonLocale;\r\n\r\n if (abp.clock.provider.supportsMultipleTimezone) {\r\n Settings.defaultZone = abp.timing.timeZoneInfo.iana.timeZoneId;\r\n }\r\n\r\n DateTime.prototype.toJSON = function () {\r\n if (!abp.clock.provider.supportsMultipleTimezone) {\r\n let localDate = this.setLocale('en');\r\n return localDate.toString();\r\n }\r\n\r\n let date = this.setLocale('en').setZone(abp.timing.timeZoneInfo.iana.timeZoneId) as DateTime;\r\n return date.toISO();\r\n };\r\n }\r\n\r\n private static setEncryptedTokenCookie(encryptedToken: string, callback: () => void) {\r\n new LocalStorageService().setItem(\r\n AppConsts.authorization.encrptedAuthTokenName,\r\n {\r\n token: encryptedToken,\r\n expireDate: new Date(new Date().getTime() + 365 * 86400000), //1 year\r\n },\r\n callback\r\n );\r\n }\r\n\r\n private static loadAssetsForDownloadPage(callback) {\r\n this.loadAssetsForInstallPage(callback);\r\n }\r\n\r\n private static loadAssetsForInstallPage(callback) {\r\n abp.setting.values['App.UiManagement.Theme'] = 'default';\r\n abp.setting.values['default.App.UiManagement.ThemeColor'] = 'default';\r\n\r\n DynamicResourcesHelper.loadResources(callback);\r\n }\r\n}\r\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\nvar mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n});\n\nexport default mergeWith;\n","var e={2099:e=>{e.exports='Accessibility IconA picture showing a person in a wheelchair.'},4888:e=>{e.exports='Add Item IconA picture showing an item with a plus sign being added to container.'},4100:e=>{e.exports='Add Filter IconA picture showing tree lines and a plus sign.'},4207:e=>{e.exports='Add Row IconA picture showing a rectangle with a plus sign.'},3335:e=>{e.exports='Aggregation IconA picture showing tree lines converging into a triangle pointing right.'},1156:e=>{e.exports='Aids Ribbon IconA picture showing a ribbon.'},8169:e=>{e.exports='Select All IconA picture showing tree lines and a check mark.'},2563:e=>{e.exports='Amazon IconA picture showing the Amazon logo.'},6:e=>{e.exports='Ambulance IconA picture showing an ambulance.'},8587:e=>{e.exports='American Express IconA picture showing the American Express logo.'},4565:e=>{e.exports='Anxiety IconA picture showing a stylized human head with a cloud and lighting inside.'},6872:e=>{e.exports='API IconA picture showing a rectangle with the letters A, P, and I written inside.'},2376:e=>{e.exports='App Symbol IconA picture showing the word app written inside.'},1785:e=>{e.exports='Apple App Store iconA picture showing the Apple AppStore logo.'},1612:e=>{e.exports='Apple Pay IconA picture showing the Apple Pay logo inside.'},8485:e=>{e.exports='Apple IconA picture showing the Apple logo.'},6603:e=>{e.exports='Arrow Down Left IconA picture showing an arrow pointing down attached to an arrow pointing left.'},7266:e=>{e.exports='Arrow Down Right IconA picture showing an arrow pointing down attached to an arrow pointing right.'},8542:e=>{e.exports='Arrow Up Left IconA picture showing an arrow pointing up attached to an arrow pointing left.'},6461:e=>{e.exports='Arrow Up Right IconA picture showing an arrow pointing up attached to an arrow pointing right.'},2976:e=>{e.exports='ATM Dollar IconA picture showing a screen with the Dollar sign and a keypad.'},4044:e=>{e.exports='ATM Euro IconA picture showing a screen with the Euro symbol and a keypad.'},5516:e=>{e.exports='ATM Pound IconA picture showing a screen with the British Pound symbol and a keypad.'},1249:e=>{e.exports='ATM Yen IconA picture showing a screen with the Japanese Yen symbol and a keypad.'},4134:e=>{e.exports='ATM IconA picture showing an empty screen and a keypad.'},2383:e=>{e.exports='Auction IconA picture showing a gavel inside a circle.'},1169:e=>{e.exports='Award IconA picture depicting a medal with the number 1 written inside.'},862:e=>{e.exports='Baby Bottle IconA picture depicting a baby bottle.'},9044:e=>{e.exports='Bacteria IconA picture depicting a bacteria.'},4943:e=>{e.exports='Bandage IconA picture depicting a bandage.'},8333:e=>{e.exports='Bank Safe IconA picture depicting a locked safe.'},2703:e=>{e.exports='Barcode IconA picture showing 6 vertically aligned rectangles, varying in width.'},8106:e=>{e.exports='Battle.net IconA picture showing the Battle.net logo.'},514:e=>{e.exports='Bear Market IconA picture depicting a bear.'},9075:e=>{e.exports='Behance IconA picture showing the Behance logo.'},6668:e=>{e.exports='Bill Paid IconA picture depicting a paper bill with a check mark at the end.'},6589:e=>{e.exports='Biohazard IconA picture showing the biohazard symbol.'},3468:e=>{e.exports='Bitcoin IconA picture showing the Bitcoin logo.'},1115:e=>{e.exports='Blood IconA picture showing two drops of liquid.'},6680:e=>{e.exports='Blu-Ray IconA picture showing the Blu-Ray logo.'},788:e=>{e.exports='Bottom recordsShows percentile records positioned at the bottom.'},2941:e=>{e.exports='Bottom recordsShows records positioned at the bottom.'},2233:e=>{e.exports='Box IconA picture showing the Box logo.'},3956:e=>{e.exports='Braille IconA picture showing 6 dots.'},9250:e=>{e.exports='Breast-feeding IconA picture depicting a woman breastfeeding her child.'},4774:e=>{e.exports='Brick Wall IconA picture depicting a wall made of bricks.'},2124:e=>{e.exports='Brush IconA picture showing a painting brush.'},8205:e=>{e.exports='Bucket IconA picture showing a bucket.'},1803:e=>{e.exports='Budget-Spending IconA picture showing an encircled dollar sign with arrows at the top, bottom, left, and right sides of it.'},7970:e=>{e.exports='Bug IconA picture showing an insect.'},5765:e=>{e.exports='Building IconA picture depicting a building.'},2374:e=>{e.exports='Bull Market IconA picture depicting bull head.'},4827:e=>{e.exports='Bulldozer IconA picture depicting a bulldozer.'},9979:e=>{e.exports='Business Development IconA picture depicting a globe inside a mechanical gear.'},6405:e=>{e.exports='Caduceus IconA picture depicting two snakes twisted around a poll.'},5156:e=>{e.exports='Calculator IconA picture depicting an electronic calculator.'},562:e=>{e.exports='Cancer Ribbon IconA picture depicting a ribbon.'},1046:e=>{e.exports='Candidate Results IconA picture depicting two people standing next to progress indicators.'},8760:e=>{e.exports='Case Sensitive IconA picture showing the letter A written in both upper and lower case.'},1786:e=>{e.exports='Cash IconA picture depicting a stack of cash.'},2353:e=>{e.exports='Cash IconA picture depicting a stack of cash.'},4578:e=>{e.exports='Cash-Only IconA picture depicting a crossed-out credit card.'},4303:e=>{e.exports='Cement Mixer IconA picture depicting a cement mixer truck.'},4175:e=>{e.exports='Certificate IconA picture depicting a badge of honor.'},1319:e=>{e.exports='Check IconA picture depicting a check mark.'},8593:e=>{e.exports='Chrome IconA picture showing the Chrome browser logo.'},3696:e=>{e.exports='Clinic IconA picture showing a house with the cross symbol in the center.'},2859:e=>{e.exports='Code Fork IconA picture depicting a line diverging into two separate lines.'},2906:e=>{e.exports='Code Review IconA picture showing encircled angle brackets with a dot between them.'},5536:e=>{e.exports='Code IconA picture showing encircled angle brackets.'},2801:e=>{e.exports='Commodities IconA picture depicting an oil barrel and 3 gold ingots.'},1027:e=>{e.exports='Condom Used IconA picture depicting a condom with a sperm inside.'},8603:e=>{e.exports='Condom IconA picture depicting an empty, open condom.'},7566:e=>{e.exports='Terminal IconA picture depicting a computer terminal.'},7909:e=>{e.exports='Construction Cone IconA picture depicting a construction cone.'},3960:e=>{e.exports='Construction Project IconA picture depicting a construction project or an architectural plan, a blueprint.'},2642:e=>{e.exports='Construction Trolley IconA picture depicting a construction trolley.'},7784:e=>{e.exports='Contains IconA picture showing the lowercase letter A in a square box.'},2517:e=>{e.exports='Contraception IconA picture depicting a pill.'},4666:e=>{e.exports='Cordless Screwdriver IconA picture depicting a cordless screwdriver.'},5445:e=>{e.exports='Corona Virus IconA picture depicting a virus cell.'},7781:e=>{e.exports='Country Home IconA picture depicting a house in the country with a garden and trees.'},3284:e=>{e.exports='Crane IconA picture depicting a tower crane with a hook.'},676:e=>{e.exports='Credit Cards IconA picture depicting a credit card.'},7915:e=>{e.exports='Credit Control IconA picture depicting a credit card with an eye in the middle.'},6786:e=>{e.exports='Crowd-Funding IconA picture depicting the dollar sign encircled.'},2558:e=>{e.exports='Custom Filter IconAn icon showing that custom filter is applied.'},5458:e=>{e.exports='Deafness IconA picture depicting a crossed-out human ear.'},8758:e=>{e.exports='Debate IconA picture depicting boxing gloves hitting each other.'},2082:e=>{e.exports='Debt IconA picture depicting a scale weight with the dollar symbol printed on it.'},2600:e=>{e.exports='Delivery IconA picture depicting a truck.'},2138:e=>{e.exports='Dental Floss IconA picture depicting a dental floss container.'},2816:e=>{e.exports='Dental Implant IconA picture depicting a tooth crown on a spiral.'},5640:e=>{e.exports='Development IconA picture depicting puzzle pieces.'},9079:e=>{e.exports='Diabetes IconA picture depicting an index finger with a blood drop at the tip.'},2926:e=>{e.exports='Diamond Circled IconA picture depicting an encircled diamond.'},1191:e=>{e.exports='Diamond IconA picture depicting a diamond.'},8147:e=>{e.exports='Diners Club IconA picture showing the Diners Club International logo.'},8901:e=>{e.exports='Discord IconA picture showing the Discord application logo.'},6397:e=>{e.exports='Discount IconA picture showing a percent sign enclosed in a star-shaped object.'},2441:e=>{e.exports='Dividents IconA picture showing a percent sign encircled in rotating arrows.'},7237:e=>{e.exports='DNA IconA picture depicting a spiral.'},5802:e=>{e.exports='Doctor IconA picture depicting a person with stethoscope around their neck.'},1494:e=>{e.exports='Doctors Bag IconA picture depicting a bag with a cross in the middle.'},1085:e=>{e.exports='Does-Not-Contain IconA picture showing the lowercase letter A in a crossed-out square box.'},1544:e=>{e.exports='Does-Not-End-With IconA picture showing crossed-out lines at the end of a square box.'},3099:e=>{e.exports='Does-Not-Start-With IconA picture showing crossed-out lines at the beginning of a square box.'},9154:e=>{e.exports='Dollar Circled IconA picture showing an encircled dollar symbol.'},3145:e=>{e.exports='Dose IconA picture showing a medicine dropper.'},6637:e=>{e.exports='Dribbble IconA picture showing the Dribble website logo.'},7454:e=>{e.exports='Drop Shipping IconA picture depicting an open parachute attached to a box.'},1634:e=>{e.exports='Dropbox IconA picture showing the Dropbox application logo.'},5216:e=>{e.exports='Dump Truck IconA picture showing a dump truck.'},8535:e=>{e.exports='Ebay IconA picture showing the ebay website logo.'},480:e=>{e.exports='Electoral Votes IconA picture depicting a person standing in front of a tribune.'},9082:e=>{e.exports='Embryo IconA picture depicting a baby in its mother's womb.'},5346:e=>{e.exports='End Expression IconA picture showing three dots followed by a right-pointed chevron.'},6312:e=>{e.exports='Ends With IconA picture showing three dots followed by lowercase a.'},6379:e=>{e.exports='Equals IconA picture showing the equals sign.'},1075:e=>{e.exports='Estate IconA picture depicting a big house.'},3770:e=>{e.exports='Ethereum IconA picture showing the Ethereum logo.'},2340:e=>{e.exports='EU Parliament IconA picture depicting the European Parliament building.'},3888:e=>{e.exports='Euro-Circled IconA picture showing an encircled euro symbol.'},4812:e=>{e.exports='Exact Match IconA picture depicting an arrow hitting bulls-eye.'},9753:e=>{e.exports='Face ID IconA picture showing the Apple Face ID icon.'},3551:e=>{e.exports='Facebook Messenger IconA picture showing the Facebook Messenger logo.'},3772:e=>{e.exports='Facebook IconA picture showing the Facebook logo.'},3921:e=>{e.exports='Female Candidate IconA picture showing a woman standing behind a tribune.'},4132:e=>{e.exports='Fertilization IconA picture showing a sperm racing towards an egg.'},5531:e=>{e.exports='File Changes IconA picture depicting a paper document with plus and minus signs drawn inside.'},8213:e=>{e.exports='File Tree IconA picture showing a vertical line diverging into two separate lines.'},5471:e=>{e.exports='Financial Insurance IconA picture showing the dollar sign under an umbrella.'},5299:e=>{e.exports='Firefox IconA picture showing the Firefox browser logo.'},348:e=>{e.exports='Fitness-Watch IconA picture depicting a digital watch with the heart symbol in the middle.'},4931:e=>{e.exports='Foreign Exchange IconA picture showing the euro and dollar symbols encircled in rotating arrows.'},3360:e=>{e.exports='Forklift Truck IconA picture depicting a forklift truck.'},9173:e=>{e.exports='Foundation IconA picture depicting a foundation built with bricks.'},5487:e=>{e.exports='Fountain IconA picture depicting a water fountain.'},5963:e=>{e.exports='Gas Mask IconA picture depicting a gas mask.'},2943:e=>{e.exports='Gift IconA picture depicting a wrapped box.'},1664:e=>{e.exports='Git Branch IconA picture showing a vertical line diverging into two separate lines.'},1499:e=>{e.exports='Git Commit IconA picture showing a line with a big circle in the middle.'},7799:e=>{e.exports='Git Compare IconA picture showing mirroring arrows attached to l-shaped lines.'},7735:e=>{e.exports='Git Issue IconA picture showing an encircled exclamation mark symbol.'},3790:e=>{e.exports='Git Merge IconA picture showing two perpendicular lines.'},7292:e=>{e.exports='GitHub IconA picture showing the GitHub website logo.'},1500:e=>{e.exports='Gold IconA picture depicting a stack of gold ingots.'},7945:e=>{e.exports='Google Drive IconA picture showing the Google Drive logo.'},3437:e=>{e.exports='Google Hangouts IconA picture showing the Google Hangouts logo.'},6735:e=>{e.exports='Google Maps IconA picture showing the Google Maps logo.'},3550:e=>{e.exports='Google Pay IconA picture showing the Google Pay logo.'},4193:e=>{e.exports='Google Play IconA picture showing the Google Play logo.'},2373:e=>{e.exports='Google Translate IconA picture showing the Google Translate logo.'},1092:e=>{e.exports='Google IconA picture showing the Google logo.'},2899:e=>{e.exports='Greater Than or Equal IconA picture showing the grater-than or equal symbol.'},8825:e=>{e.exports='Greater Than IconA picture showing the greater-than symbol.'},743:e=>{e.exports='Grid IconA picture depicting a square grid.'},9357:e=>{e.exports='Hammer IconA picture showing a hammer.'},9773:e=>{e.exports='Hearing Aid IconA picture depicting an earphone inserted into a human ear.'},8314:e=>{e.exports='Heart Care IconA picture showing the heart symbol with a check mark drawn inside it.'},2490:e=>{e.exports='Heart Monitor IconA picture showing the heart symbol with a cardiogram drawn inside it.'},2203:e=>{e.exports='Horn IconA picture depicting a loudspeaker.'},6941:e=>{e.exports='Hospital-Bed IconA picture depicting a bed with the capital letter H next to it.'},8897:e=>{e.exports='Hospital Sign IconA picture showing the capital letter H in a square.'},3143:e=>{e.exports='Hospital IconA picture depicting a house with the capital letter H in the middle.'},4081:e=>{e.exports='Idea Generation IconA picture showing a light bulb encircled in rotating arrows.'},8652:e=>{e.exports='Impact Drill IconA picture showing an impact drill.'},6273:e=>{e.exports='Inspect Code IconA picture depicting a magnifying glass with angled brackets inside it.'},9834:e=>{e.exports='Instagram IconA picture showing the Instagram application logo.'},1147:e=>{e.exports='Internet Explorer IconA picture showing the Internet Explorer browser logo.'},5030:e=>{e.exports='Invoice IconA picture depicting a paper sheet.'},5631:e=>{e.exports='iOS IconA picture showing the iOS logo.'},6855:e=>{e.exports='Is After IconA picture showing a square bracket drawn after a vertical line.'},1619:e=>{e.exports='Is Before IconA picture showing a square bracket drawn before a vertical line.'},7992:e=>{e.exports='Is Empty IconA picture showing a dotted square.'},8805:e=>{e.exports='Is False IconA picture showing an encircled X symbol.'},5124:e=>{e.exports='Is Not Null IconA picture showing a crossed-out circle.'},5646:e=>{e.exports='Is Null IconA picture showing an empty circle.'},761:e=>{e.exports='is True IconA picture showing an encircled check mark symbol.'},1197:e=>{e.exports='JSFiddle IconA picture showing the JSFiddle website logo.'},4092:e=>{e.exports='Jump Down IconA picture showing a bent arrow pointing down towards a line.'},2715:e=>{e.exports='Jump Up IconA picture showing a bent arrow pointing up towards a line.'},2773:e=>{e.exports='Keep Away From Children IconA picture depicting a crossed-out baby head.'},647:e=>{e.exports='Ladder IconA picture showing a ladder.'},4212:e=>{e.exports='Last Month IconA picture depicting a calendar with a back-arrow at the end.'},5238:e=>{e.exports='Last Quarter IconA picture depicting a quarter of a circle with an arrow pointing right.'},4487:e=>{e.exports='Last Week IconA picture depicting a square with an arrow pointing down.'},7356:e=>{e.exports='Last Year IconA picture depicting a calendar with an back-arrow in the middle.'},552:e=>{e.exports='Legal Document IconA picture depicting a sheet of paper with a badge of honor in the middle.'},8293:e=>{e.exports='Less Than or Equal IconA picture showing the lass-than or equal symbol.'},9120:e=>{e.exports='Less Than IconA picture showing the less-than symbol.'},3547:e=>{e.exports='LinkedIn IconA picture showing the LinkedIn logo.'},6857:e=>{e.exports='Loan IconA picture depicting a hand with the dollar symbol above it.'},8422:e=>{e.exports='Maestro IconA picture showing the Maestro logo.'},9840:e=>{e.exports='Maintenance IconA picture showing a wrench and a screwdriver tools.'},9849:e=>{e.exports='Male Candidate IconA picture showing a man behind a tribune.'},6138:e=>{e.exports='Mask IconA picture depicting a face mask.'},4344:e=>{e.exports='Mask IconA picture depicting a face mask.'},3603:e=>{e.exports='Massage IconA picture depicting a person giving another person a massage.'},5497:e=>{e.exports='Mastercard IconA picture showing the MasterCard logo.'},4013:e=>{e.exports='Match IconA picture depicting two puzzle pieces fitting together.'},8695:e=>{e.exports='Medical Book IconA picture depicting a book with the medical cross at the corner of its cover.'},1535:e=>{e.exports='Medicine IconA picture depicting a bottle with the medical cross in the middle.'},3264:e=>{e.exports='Medium IconA picture showing the Medium website logo in the middle.'},5145:e=>{e.exports='Microorganisms IconA picture depicting a single-cell organism.'},6934:e=>{e.exports='Microscope IconA picture depicting a microscope.'},4989:e=>{e.exports='Microsoft IconA picture showing the Microsoft logo.'},8463:e=>{e.exports='Milestone IconA picture depicting a road sign.'},185:e=>{e.exports='Code Value IconA picture depicting a part.'},1913:e=>{e.exports='Money Bag IconA picture depicting a bag of coins.'},2418:e=>{e.exports='Month IconA picture depicting a month calendar.'},7116:e=>{e.exports='Microsoft Edge IconA picture showing the Microsoft Edge browser logo.'},5488:e=>{e.exports='Microsoft Excel IconA picture showing the Microsoft Excel logo.'},3508:e=>{e.exports='Microsoft Office IconA picture showing the Microsoft Office logo.'},6357:e=>{e.exports='Microsoft Outlook IconA picture showing the Microsoft Outlook logo.'},9803:e=>{e.exports='Microsoft Powerpoint IconA picture showing the Microsoft Powerpoint logo.'},7976:e=>{e.exports='Microsoft Teams IconA picture showing the Microsoft Teams logo.'},2091:e=>{e.exports='Microsoft Word IconA picture showing the Microsoft Word logo.'},7666:e=>{e.exports='Next Month iconA picture depicting a calendar with a forward-arrow at the end.'},1855:e=>{e.exports='Next Quarter IconA picture depicting a quarter circle with an arrow pointing right.'},7675:e=>{e.exports='Next Week IconA picture depicting a square with an arrow pointing right.'},2367:e=>{e.exports='Next Year iconA picture depicting a calendar with a forward-arrow in the middle.'},7996:e=>{e.exports='Not Empty IconA picture showing a crossed-out dotted square.'},9446:e=>{e.exports='Not Equal IconA picture showing a crossed-out equals symbol.'},3688:e=>{e.exports='Nurse IconA picture depicting a female nurse.'},9151:e=>{e.exports='Oil Platform IconA picture depicting an oil platform/offshore drilling rig at seas.'},7802:e=>{e.exports='Oil IconA picture depicting an oil barrel.'},4131:e=>{e.exports='OneDrive IconA picture showing the Microsoft OneDrive logo.'},2072:e=>{e.exports='Opera IconA picture showing the Opera browser logo.'},9712:e=>{e.exports='Pacifier IconA picture depicting a baby pacifier.'},4589:e=>{e.exports='Paint Roller IconA picture depicting a paint roller.'},3076:e=>{e.exports='Parliament IconA picture depicting a parliament building.'},8243:e=>{e.exports='Parliament IconA picture depicting a parliament building.'},3931:e=>{e.exports='Paydate IconA picture depicting a credit card in front of a calendar.'},564:e=>{e.exports='Paypal IconA picture showing the PayPal application logo.'},8294:e=>{e.exports='Piggy Bank IconA picture depicting a piggy bank.'},5788:e=>{e.exports='Pill IconA picture depicting a pill.'},6306:e=>{e.exports='Pin Left IconA picture depicting a pin pointed to the left.'},7530:e=>{e.exports='Pin Right IconA picture depicting a pin pointed to the right.'},1216:e=>{e.exports='Pinterest IconA picture showing the Pinterest logo.'},4284:e=>{e.exports='Pipes IconA picture depicting pipes.'},2753:e=>{e.exports='Piping System IconA picture depicting a piping system.'},6864:e=>{e.exports='Plastic Surgery IconA picture depicting a marker-marked human torso.'},2252:e=>{e.exports='Pliers IconA picture showing a pliers.'},8007:e=>{e.exports='Plugin IconA picture depicting an electrical plug.'},4783:e=>{e.exports='Pneumatic Hammer Drill IconA picture depicting a pneumatic hammer drill.'},623:e=>{e.exports='Poop IconA picture depicting feces.'},7587:e=>{e.exports='Popular Votes IconA picture depicting a hand about to drop a ballot into a voting box.'},4171:e=>{e.exports='Pound Circled IconA picture showing an encircled British pound symbol.'},171:e=>{e.exports='Pregnancy No Alcohol IconA picture showing a crossed-out woman drinking wine.'},7375:e=>{e.exports='Previous Quarter IconA picture depicting a quarter circle with an arrow pointing left.'},8577:e=>{e.exports='Next Week IconA picture depicting a square with an arrow pointing left.'},4894:e=>{e.exports='Project Revenue IconA picture showing the dollar symbol inside a mechanical gear encircled by rotating arrows.'},4595:e=>{e.exports='Protester Signs IconA picture showing two signs.'},8280:e=>{e.exports='Pull Request IconA picture showing an l-shaped arrow pointing towards a vertical line to the left.'},7982:e=>{e.exports='Pulse IconA picture depicting a cardiogram.'},4183:e=>{e.exports='Quarter Four IconA picture depicting a quarter of a circle next to a three-thirds circle.'},3480:e=>{e.exports='Quarter One IconA picture depicting a quarter of a circle next to a three-thirds circle.'},7564:e=>{e.exports='Quarter Three IconA picture depicting a quarter of a circle next to a three-thirds circle.'},563:e=>{e.exports='Quarter Two IconA picture depicting a quarter of a circle next to a three-thirds circle.'},4917:e=>{e.exports='Radiator IconA picture showing a radiator used for heating.'},7814:e=>{e.exports='Radioactive IconA picture showing the radioactive symbol.'},8629:e=>{e.exports='Reddit IconA picture showing the Reddit website logo.'},3293:e=>{e.exports='Repository IconA picture depicting a file drawer.'},44:e=>{e.exports='Responsive Layout IconA picture depicting a mobile phone in front of a laptop computer.'},425:e=>{e.exports='Restricted Area IconA picture depicting a restricted area blocked by a barrier or a fence.'},5099:e=>{e.exports='Results by Candidates IconA picture depicting a pie chart.'},8030:e=>{e.exports='Results Pie Chart IconA picture depicting a pie chart.'},5832:e=>{e.exports='RH Negative IconA picture depicting a blood drop with the minus sign in the middle.'},8:e=>{e.exports='RH Positive IconA picture depicting a blood drop with the plus sign in the middle.'},3223:e=>{e.exports='Road Roller IconA picture depicting a road roller machine.'},7652:e=>{e.exports='Rod of Ascelepius IconA picture depicting a snake twisted around a poll.'},2471:e=>{e.exports='Rulers IconA picture depicting different measuring tools.'},26:e=>{e.exports='Safari IconA picture showing the Safari browser logo.'},3877:e=>{e.exports='Safety Vest IconA picture depicting a safety vest.'},1733:e=>{e.exports='Sale IconA picture showing the word sale encircled.'},4009:e=>{e.exports='Sass IconA picture showing the Sass language logo.'},5604:e=>{e.exports='Saw IconA picture depicting a hand saw.'},7681:e=>{e.exports='Scales Balanced IconA picture showing perfectly balanced weight scales.'},1221:e=>{e.exports='Scales Unbalanced IconA picture showing unbalanced weight scales.'},2141:e=>{e.exports='Scissor Lift IconA picture depicting a scissor lift.'},2451:e=>{e.exports='Screwdriver IconA picture showing a screwdriver.'},3629:e=>{e.exports='Security IconA picture depicting a shield-protected briefcase.'},5339:e=>{e.exports='Security IconA picture depicting a shield-protected briefcase.'},8501:e=>{e.exports='Severity IconA picture depicting a gouge.'},6143:e=>{e.exports='Shovel IconA picture showing a shovel.'},2281:e=>{e.exports='Sign Language IconA picture depicting two human hands gesticulating.'},1959:e=>{e.exports='Skype IconA picture showing the Microsoft Skype logo.'},1980:e=>{e.exports='Skyscrapers IconA picture depicting tall buildings.'},2e3:e=>{e.exports='Slack IconA picture showing the Slack application logo.'},635:e=>{e.exports='Snapchat IconA picture showing the Snapchat application logo.'},5678:e=>{e.exports='Sneeze IconA picture depicting a person sneezing.'},2681:e=>{e.exports='Software Architecture IconA picture depicting a scaffold.'},1833:e=>{e.exports='Software Installer IconA picture showing an arrow pointing down at a computer hard drive.'},2160:e=>{e.exports='Solar Panel IconA picture depicting a solar panel.'},7531:e=>{e.exports='Soldering Iron IconA picture depicting a soldering iron.'},7823:e=>{e.exports='Soundcloud IconA picture showing the Soundcloud application icon.'},5321:e=>{e.exports='Source Code IconA picture showing encircled angle brackets.'},5105:e=>{e.exports='Spotify IconA picture showing the Spotify application logo.'},6508:e=>{e.exports='Stackoverflow IconA picture showing the Stackoverflow logo.'},7667:e=>{e.exports='Stairs IconA picture depicting a staircase with railings in a building.'},6843:e=>{e.exports='Start Expression IconA picture showing a left chevron followed by three dots.'},3898:e=>{e.exports='Starts With IconA picture showing the uppercase letter A followed by three dots.'},1683:e=>{e.exports='Stats IconA picture showing a bar chart on a computer screen.'},8473:e=>{e.exports='Steam IconA picture showing the Steam application logo.'},2554:e=>{e.exports='Stethoscope IconA picture depicting a stethoscope.'},4592:e=>{e.exports='Stop Hand IconA picture depicting a sign with a stop hand.'},8430:e=>{e.exports='Strategy IconA picture depicting a chess rook.'},4335:e=>{e.exports=''},4088:e=>{e.exports='Stripe IconA picture showing the Stripe application logo.'},2888:e=>{e.exports='Syringe IconA picture depicting a syringe.'},5364:e=>{e.exports='System Update IconA picture depicting a computer screen with a reload symbol in the middle.'},219:e=>{e.exports='Table Saw Blade IconA picture depicting a table saw blade.'},8469:e=>{e.exports='Tap Water IconA picture depicting tap water.'},8935:e=>{e.exports='Tapeline IconA picture depicting a measuring tape.'},1418:e=>{e.exports='Teeth IconA picture depicting human teeth.'},7934:e=>{e.exports='Telegram IconA picture showing the Telegram application icon.'},6282:e=>{e.exports='Thermometer IconA picture depicting a thermometer.'},389:e=>{e.exports='This Month IconA picture depicting a calendar with an encircled check mark at the end.'},8826:e=>{e.exports='This Quarter IconA picture depicting an arrow pointing right to a quarter of a circle.'},8961:e=>{e.exports='This Quarter IconA picture depicting a square with an arrow pointing up.'},1602:e=>{e.exports='This Year IconA picture depicting a stacked calendar with a check mark in the middle.'},9089:e=>{e.exports='TikTok IconA picture showing the TikTok application logo.'},9761:e=>{e.exports='Timeline IconA picture showing a horizontal line with perpendicular lines across its axis.'},3150:e=>{e.exports='Tinder IconA picture showing the Tinder application icon.'},2579:e=>{e.exports='Today IconA picture depicting a calendar with a check mark in the middle.'},3640:e=>{e.exports='Toilet Paper IconA picture depicting a roll of toilet paper.'},2625:e=>{e.exports='Tomorrow IconA picture depicting a calendar with a right-pointed arrow in the middle.'},8183:e=>{e.exports='Tooth Cracked IconA picture depicting a chipped human tooth.'},5828:e=>{e.exports='Tooth IconA picture depicting a human tooth.'},1869:e=>{e.exports='Top Percentile Records IconShows percentile records positioned at the top.'},6703:e=>{e.exports='Top Records IconShows records positioned at the top.'},5826:e=>{e.exports='TouchID IconA picture showing the Apple TouchID logo.'},133:e=>{e.exports='Tow Truck IconA picture showing a tow truck.'},8238:e=>{e.exports='Towel Rail IconA picture depicting a towel rail in a bathroom.'},9588:e=>{e.exports='Tractor IconA picture depicting a tractor vehicle.'},8231:e=>{e.exports='Trowel IconA picture depicting a trowel tool.'},1316:e=>{e.exports='Twitch IconA picture showing the Twitch application logo.'},8915:e=>{e.exports='Twitter IconA picture showing the Twitter application logo.'},5608:e=>{e.exports='Ungroup IconA picture depicting a broken box with four squares inside it.'},6936:e=>{e.exports='Unpin Left IconA picture depicting a crossed-out left-pointed pin.'},2486:e=>{e.exports='Unpin Right IconA picture depicting a crossed-out right-pointed pin.'},8858:e=>{e.exports='USA California IconA picture depicting the shape of the state of California.'},5134:e=>{e.exports='USA Florida IconA picture depicting the shape of the state of Florida.'},3107:e=>{e.exports='USA lower 48 States IconA picture depicting the shape of the lower 48 states of the USA.'},5862:e=>{e.exports='USA NY iconA picture depicting the shape of the state of New York.'},9383:e=>{e.exports='USA Party Democratic IconA picture showing the Democratic Party symbol of a donkey.'},4612:e=>{e.exports='USA Party Green IconA picture showing the Green Party symbol.'},8530:e=>{e.exports='USA Party Libertarian IconA picture showing the Libertarian Party symbol of a hedgehog.'},8568:e=>{e.exports='USA Party Republican IconA picture showing the Republican Party symbol of an elephant.'},3089:e=>{e.exports='USA TX iconA picture depicting the shape of the state of Texas.'},2402:e=>{e.exports='USB IconA picture showing the USB standard logo.'},5199:e=>{e.exports='Verified Account IconA picture showing a badge with a check mark in the middle.'},3562:e=>{e.exports='Veterinarian IconA picture depicting a paw footprint with a medical cross inside.'},4292:e=>{e.exports='Vial IconA picture depicting a vial.'},7374:e=>{e.exports='Viber IconA picture showing the Viber application logo.'},6337:e=>{e.exports='Vimeo IconA picture showign the Vimeo website logo.'},1920:e=>{e.exports='Virus Protection IconA picture depicting a shield with a virus on it.'},256:e=>{e.exports='Virus Stop IconA picture depicting a crossed-out virus symbol.'},4437:e=>{e.exports='Virus IconA picture depicting a corona-shaped virus.'},5437:e=>{e.exports='Visa IconA picture showing the Visa credit card logo.'},6913:e=>{e.exports='Visually Impaired IconA picture depicting a crossed-out human eye.'},8589:e=>{e.exports='Vote IconA picture depicting a voting box with an arrow pointed towards a slid.'},8921:e=>{e.exports='VSCode IconA picture showing the Microsoft VSCode logo.'},3794:e=>{e.exports='Water Boiler IconA picture depicting a water boiler.'},3859:e=>{e.exports='Water Heater IconA picture depicting a water heater.'},8014:e=>{e.exports='Water Tap IconA picture depicting a water tap.'},3864:e=>{e.exports='WeChat IconA picture showing the WeChat icon.'},8310:e=>{e.exports='Weight Scale IconA picture depicting a weight scale.'},2927:e=>{e.exports='WhatsApp IconA picture showing the WhatsApp application icon.'},8352:e=>{e.exports='White House IconA picture depicting the famous White House presidential building.'},6459:e=>{e.exports='White House IconA picture depicting the famous White House presidential building.'},3207:e=>{e.exports='Wire Transfer IconA picture showing the euro and dollar symbols moving in different directions.'},8341:e=>{e.exports='Worker IconA picture depicting a construction worker with a helmet.'},5236:e=>{e.exports='Workers IconA picture depicting a group of construction workers with helmets.'},5274:e=>{e.exports='Workflow IconA picture depicting a line diverging into three separate lines.'},4895:e=>{e.exports='Wrench IconA picture showing a wrench.'},7349:e=>{e.exports=''},4910:e=>{e.exports=''},4289:e=>{e.exports='Yen Circled IconA picture of an encircled Japanese Yen symbol.'},1828:e=>{e.exports='Yesterday IconA picture depicting a calendar with a back arrow in the middle.'},3495:e=>{e.exports='YouTube IconA picture showing the YouTube website logo.'}},t={};function a(i){var s=t[i];if(void 0!==s)return s.exports;var l=t[i]={exports:{}};return e[i](l,l.exports,a),l.exports}a.d=(e,t)=>{for(var i in t)a.o(t,i)&&!a.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var i={};(()=>{a.d(i,{lTk:()=>kg,Bd$:()=>xg,_im:()=>cc,U_J:()=>m,KJG:()=>w,SAz:()=>u,t1N:()=>gs,MBC:()=>dc,$6P:()=>fg,cIv:()=>In,ZlE:()=>nc,slj:()=>Ln,huW:()=>hc,hi0:()=>rv,RDp:()=>cv,W3x:()=>Cn,hnq:()=>jn,_wT:()=>qn,uyw:()=>b,NKz:()=>z,c07:()=>y,wbJ:()=>x,oQ7:()=>Ql,FbX:()=>Ul,oGm:()=>Gl,bpX:()=>Ol,Xae:()=>Zl,YP5:()=>$l,R3W:()=>Yl,kc5:()=>vc,QEg:()=>gc,prf:()=>pc,CaT:()=>_l,VQQ:()=>Jl,Ncd:()=>Sn,Tl5:()=>Kl,oUB:()=>ag,bON:()=>Xl,$ik:()=>mc,zO6:()=>Tn,yLM:()=>wc,BBm:()=>Pn,dsG:()=>Ca,Hs9:()=>Sa,BZV:()=>Dn,$cm:()=>uc,SdW:()=>bc,WqF:()=>Ie,DmU:()=>Le,neX:()=>je,yd1:()=>eo,jIG:()=>dv,__Q:()=>qe,Nli:()=>to,Vfi:()=>Ce,pkE:()=>ao,T73:()=>zc,mbq:()=>io,LgP:()=>yc,oNx:()=>ps,u_P:()=>Ta,V7I:()=>so,om6:()=>lo,UPo:()=>oo,WuY:()=>Se,qI$:()=>ro,BF5:()=>Pa,e9R:()=>Wn,T4Q:()=>xc,TUN:()=>vv,CVw:()=>nv,ykd:()=>Hv,zm5:()=>hv,Y0L:()=>co,qA0:()=>kc,BuB:()=>fc,lZ2:()=>It,I9y:()=>Te,Yt_:()=>Pe,Kyr:()=>De,r3W:()=>Da,kQN:()=>B,MWC:()=>Ac,dmx:()=>We,NHt:()=>Hc,qWE:()=>Ne,XXv:()=>Re,iNc:()=>no,uCe:()=>ho,EJm:()=>vo,w9U:()=>Wa,GRX:()=>Mc,IkF:()=>ms,knC:()=>go,Z7L:()=>po,b8$:()=>Vc,_W:()=>Bc,r$P:()=>pv,YRD:()=>Ic,tfn:()=>wo,TkW:()=>mo,x7N:()=>Nn,Vie:()=>Rn,AlA:()=>uo,aUE:()=>bo,$Nv:()=>Lc,bWL:()=>qc,TEL:()=>jc,YQA:()=>Na,jNO:()=>Ra,WX1:()=>Ea,oY5:()=>zo,aGw:()=>Cc,NbW:()=>ig,La4:()=>yo,ul4:()=>En,vL8:()=>Ee,CPu:()=>Fn,j6y:()=>Pi,Fjr:()=>Us,hzO:()=>ws,lcl:()=>Sc,Fcd:()=>Fa,pnn:()=>Ua,fS0:()=>Ga,VNl:()=>Fe,tHy:()=>Un,oyk:()=>us,x9B:()=>xo,byu:()=>Oa,uGh:()=>ko,qv4:()=>lg,FHd:()=>sg,TPc:()=>bs,oWe:()=>Tc,VC8:()=>mv,noN:()=>wv,iI$:()=>Uo,n0J:()=>fo,Udi:()=>Gn,_hH:()=>Pc,H1E:()=>Ao,h9L:()=>Ue,_1l:()=>Ge,srP:()=>Oe,IoZ:()=>Dc,gvV:()=>Ho,nb5:()=>uv,kZe:()=>bv,KEc:()=>zv,q37:()=>yv,nKk:()=>xv,bWO:()=>og,EVT:()=>Mo,lkr:()=>_n,j8b:()=>On,POC:()=>Qn,jZX:()=>Zn,dvO:()=>$n,Rm7:()=>Yn,XaR:()=>Jn,tSN:()=>Qa,Vle:()=>Za,eCg:()=>kv,jL$:()=>Qe,mZq:()=>Md,vCb:()=>Wc,M20:()=>Nc,Zkw:()=>Rc,RlZ:()=>zs,hrI:()=>Uc,Vhm:()=>Ec,B5G:()=>Fc,wdp:()=>Vo,irC:()=>Ze,TPU:()=>fv,CRu:()=>rg,F8i:()=>Kn,v0n:()=>Bo,vF$:()=>Xn,AxD:()=>$a,RRz:()=>Ya,xbD:()=>_a,mAK:()=>Ja,K0_:()=>Ka,Ft:()=>Xa,oAc:()=>ei,yst:()=>eh,vPL:()=>k,grx:()=>f,nmN:()=>Gc,zMd:()=>$e,dj:()=>ti,K2e:()=>ai,Oo1:()=>ii,b8L:()=>si,zHf:()=>Io,QjB:()=>li,$27:()=>oi,kGB:()=>cg,iJb:()=>Lo,UNd:()=>Lh,dSs:()=>th,t7l:()=>Ye,XLs:()=>ys,sSH:()=>Oc,KYW:()=>Qc,OrE:()=>Zc,DFD:()=>ah,EQD:()=>ri,Tzs:()=>$c,fI_:()=>Yc,IV2:()=>dg,Bzc:()=>_c,ilv:()=>Jc,Egz:()=>ih,hWf:()=>Av,Azp:()=>jo,iLZ:()=>ci,zd7:()=>sh,S5w:()=>lh,Uhp:()=>oh,$FH:()=>dh,tsm:()=>rh,TpQ:()=>ch,agg:()=>nh,nDF:()=>di,HsE:()=>ni,KqL:()=>hi,NJw:()=>vi,Dw5:()=>gi,Quu:()=>pi,QHr:()=>Kc,vK1:()=>qo,TJH:()=>_e,cSL:()=>hh,Pm4:()=>vh,it7:()=>Xc,fmF:()=>Je,aWJ:()=>xs,rJt:()=>ks,xrm:()=>Co,CVQ:()=>gh,gec:()=>So,$C9:()=>ed,OQV:()=>A,KBg:()=>H,Wsk:()=>ng,qcT:()=>Ke,HhS:()=>Xe,mMe:()=>td,r9J:()=>et,BA1:()=>Mv,ojU:()=>tt,e2R:()=>ad,qIe:()=>fs,qjt:()=>To,pcC:()=>id,ALK:()=>mi,OPA:()=>wi,AV9:()=>Dv,LFl:()=>Po,YRr:()=>As,ofM:()=>Vv,dCx:()=>sd,o0k:()=>ui,GHz:()=>bi,TZ4:()=>zi,JT3:()=>yi,v1S:()=>at,EBv:()=>ld,OdB:()=>hg,cjF:()=>Bv,Dt4:()=>Iv,emT:()=>it,T0N:()=>Hs,fut:()=>Ms,FVL:()=>od,bab:()=>rd,bgi:()=>st,yMF:()=>cd,sbn:()=>lt,a13:()=>ph,aP6:()=>ot,yJR:()=>Do,Xgi:()=>mh,kN4:()=>rt,Ao5:()=>Vs,oV1:()=>Bs,vHN:()=>ct,YEW:()=>dt,t7G:()=>Wo,axC:()=>No,td_:()=>xi,UQh:()=>Lv,syb:()=>nt,ACN:()=>dd,vq6:()=>wh,h0B:()=>ht,bsC:()=>uh,bc2:()=>vg,dIb:()=>nd,LFI:()=>yg,$TZ:()=>jv,Tt$:()=>qv,QDF:()=>vt,epd:()=>gt,AWe:()=>bh,svs:()=>Cv,NAV:()=>zh,_nk:()=>yh,O$d:()=>pt,fBX:()=>ki,Nyw:()=>fi,otD:()=>Is,f10:()=>xh,VGW:()=>hd,CmW:()=>mt,knS:()=>Ro,C24:()=>vd,AgG:()=>kh,GLn:()=>gd,iuE:()=>Sv,Vul:()=>wt,Cfd:()=>ut,bdM:()=>bt,P1S:()=>pd,wLN:()=>gg,Eiv:()=>gv,BsZ:()=>md,S7c:()=>Ai,nRM:()=>Hi,Ggf:()=>Mi,xPI:()=>Vi,POU:()=>pg,Z2D:()=>Ls,H1N:()=>fh,LgZ:()=>Bi,WEX:()=>wd,Roi:()=>Ti,xAR:()=>bd,mY5:()=>ud,c2U:()=>Li,sR5:()=>Ii,Tr9:()=>Ah,A$7:()=>zt,_CP:()=>yt,NLz:()=>xt,m3M:()=>kt,$Dt:()=>Hh,kmR:()=>mg,Z8D:()=>ji,wJO:()=>M,lQ1:()=>V,ZTw:()=>js,iZ_:()=>qs,s5D:()=>Cs,ZsF:()=>Ss,_2J:()=>Ts,THr:()=>Ps,EzF:()=>Ds,B_v:()=>Ws,zOh:()=>Ns,Ase:()=>Mh,$W5:()=>Tv,iKp:()=>zd,OTU:()=>yd,CuM:()=>wg,h1n:()=>Vh,VMF:()=>fd,yYn:()=>xd,kN$:()=>kd,oln:()=>Bh,G3k:()=>Ad,Nsu:()=>Rs,jmd:()=>Ih,eGZ:()=>ft,ZJ_:()=>At,bRk:()=>Ht,U3_:()=>ug,Gpw:()=>Hd,ONB:()=>bg,$kt:()=>Es,gYK:()=>Fs,GtC:()=>Eo,KK7:()=>Mt,CBM:()=>Vt,Ldn:()=>Pv,UZF:()=>Bt,tyl:()=>qi,$Sj:()=>Ci,Gf8:()=>Fo,CvE:()=>Si,ZB9:()=>zg});var e=a(4888),t=a(4100),s=a(4207),l=a(6603),o=a(7266),r=a(8542),c=a(6461),d=a(4092),n=a(2715),h=a(6306),v=a(7530),g=a(6936),p=a(2486);const m={name:\"add-child\",value:e,categories:[\"content\"],keywords:[\"add\",\"insert\",\"row\",\"child\",\"new\",\"below\",\"under\"]},w={name:\"add-filter\",value:t,categories:[\"content\"],keywords:[\"add\",\"filter\",\"funnel\",\"leads\",\"new\"]},u={name:\"add-row\",value:s,categories:[\"content\"],keywords:[\"add\",\"insert\",\"row\",\"new\"]},b={name:\"arrow-down-left\",value:l,categories:[\"content\"],keywords:[\"arrow\",\"down\",\"left\",\"dimension\"]},z={name:\"arrow-down-right\",value:o,categories:[\"content\"],keywords:[\"arrow\",\"down\",\"right\"]},y={name:\"arrow-up-left\",value:r,categories:[\"content\"],keywords:[\"arrow\",\"up\",\"left\"]},x={name:\"arrow-up-right\",value:c,categories:[\"content\"],keywords:[\"arrow\",\"up\",\"right\",\"axis\",\"coordinate\",\"system\"]},k={name:\"jump-down\",value:d,categories:[\"content\"],keywords:[\"jump\",\"down\",\"arrow\",\"below\",\"under\"]},f={name:\"jump-up\",value:n,categories:[\"content\"],keywords:[\"jump\",\"up\",\"arrow\",\"above\"]},A={name:\"pin-left\",value:h,categories:[\"content\"],keywords:[\"pin\",\"freeze\",\"left\",\"pushpin\",\"nail\",\"marker\",\"attach\",\"tack\",\"thumbtack\"]},H={name:\"pin-right\",value:v,categories:[\"content\"],keywords:[\"pin\",\"freeze\",\"right\",\"pushpin\",\"nail\",\"marker\",\"attach\",\"tack\",\"thumbtack\"]},M={name:\"unpin-left\",value:g,categories:[\"content\"],keywords:[\"unpin\",\"unfreeze\",\"left\",\"pushpin\",\"nail\",\"marker\",\"detach\",\"tack\",\"thumbtack\"]},V={name:\"unpin-right\",value:p,categories:[\"content\"],keywords:[\"unpin\",\"unfreeze\",\"right\",\"pushpin\",\"nail\",\"marker\",\"detach\",\"tack\",\"thumbtack\"]},B=[m,w,u,b,z,y,x,k,f,A,H,M,V];var I=a(4774),L=a(2124),j=a(8205),q=a(5765),C=a(4827),S=a(4303),T=a(7909),P=a(3960),D=a(2642),W=a(4666),N=a(7781),R=a(3284),E=a(5216),F=a(1075),U=a(3360),G=a(9173),O=a(5487),Q=a(9357),Z=a(8652),$=a(647),Y=a(9840),_=a(9151),J=a(4589),K=a(4284),X=a(2753),ee=a(2252),te=a(4783),ae=a(4917),ie=a(425),se=a(3223),le=a(2471),oe=a(3877),re=a(5604),ce=a(2141),de=a(2451),ne=a(6143),he=a(1980),ve=a(2160),ge=a(7531),pe=a(7667),me=a(4592),we=a(219),ue=a(8469),be=a(8935),ze=a(133),ye=a(8238),xe=a(9588),ke=a(8231),fe=a(3794),Ae=a(3859),He=a(8014),Me=a(8341),Ve=a(5236),Be=a(4895);const Ie={name:\"brick-wall\",value:I,categories:[\"construction\"],keywords:[\"brick\",\"wall\",\"block\",\"pattern\",\"architecture\",\"stone\",\"building\",\"construction\",\"house\"]},Le={name:\"brush\",value:L,categories:[\"construction\"],keywords:[\"brush\",\"decoration\",\"interior\",\"paint\",\"painting\",\"roller\",\"wall\"]},je={name:\"bucket\",value:j,categories:[\"construction\"],keywords:[\"bucket\",\"decoration\",\"interior\",\"paint\",\"water\",\"house\",\"wall\",\"construction\"]},qe={name:\"building\",value:q,categories:[\"construction\"],keywords:[\"building\",\"home\",\"house\",\"apartments\",\"architecture\",\"structure\"]},Ce={name:\"bulldozer\",value:C,categories:[\"construction\"],keywords:[\"bulldozer\",\"digging\",\"excavator\",\"machine\"]},Se={name:\"cement-mixer\",value:S,categories:[\"construction\"],keywords:[\"cement\",\"mixer\",\"concrete\",\"construction\",\"machine\",\"truck\"]},Te={name:\"construction-cone\",value:T,categories:[\"construction\"],keywords:[\"construction\",\"cone\",\"barrier\",\"caution\",\"road\",\"safety\"]},Pe={name:\"construction-project\",value:P,categories:[\"construction\"],keywords:[\"construction\",\"project\",\"blueprint\",\"plan\",\"architecture\"]},De={name:\"construction-trolley\",value:D,categories:[\"construction\"],keywords:[\"construction\",\"trolley\",\"carrier\",\"cart\",\"cement\",\"holder\"]},We={name:\"cordless-screwdriver\",value:W,categories:[\"construction\"],keywords:[\"cordless\",\"screwdriver\",\"drill\",\"driver\",\"electric\",\"power\"]},Ne={name:\"country-home\",value:N,categories:[\"construction\"],keywords:[\"country\",\"home\",\"house\",\"real estate\"]},Re={name:\"crane\",value:R,categories:[\"construction\"],keywords:[\"crane\",\"construction\",\"hook\",\"machinery\",\"tower\"]},Ee={name:\"dump-truck\",value:E,categories:[\"construction\"],keywords:[\"dump\",\"truck\",\"dumper\",\"garbage\",\"trash\",\"waste\",\"vehicle\",\"transport\"]},Fe={name:\"estate\",value:F,categories:[\"construction\"],keywords:[\"estate\",\"building\",\"home\",\"house\",\"architecture\"]},Ue={name:\"forklift-truck\",value:U,categories:[\"construction\"],keywords:[\"forklift\",\"truck\",\"warehouse\",\"industrial\",\"transport\",\"lift\",\"cargo\",\"logistics\",\"loader\",\"machinery\"]},Ge={name:\"foundation\",value:G,categories:[\"construction\"],keywords:[\"foundation\",\"wall\",\"architecture\",\"construction\"]},Oe={name:\"fountain\",value:O,categories:[\"construction\"],keywords:[\"fountain\",\"garden\",\"splash\",\"park\",\"water\"]},Qe={name:\"hammer\",value:Q,categories:[\"construction\"],keywords:[\"hammer\",\"construction\",\"equipment\",\"hardware\",\"repair\",\"tool\",\"work\",\"tools\"]},Ze={name:\"impact-drill\",value:Z,categories:[\"construction\"],keywords:[\"impact drill\",\"power\",\"tools\",\"driver\",\"construction\",\"tool\",\"work\",\"repair\",\"drill\"]},$e={name:\"ladder\",value:$,categories:[\"construction\"],keywords:[\"ladder\",\"construction\",\"building\",\"climb\",\"height\",\"tool\",\"work\",\"tools\"]},Ye={name:\"maintenance\",value:Y,categories:[\"construction\"],keywords:[\"maintenance\",\"construction\",\"tools\",\"hardware\",\"equipment\",\"wrench\",\"screwdriver\",\"tool kit\",\"tool box\"]},_e={name:\"oil-platform\",value:_,categories:[\"construction\"],keywords:[\"oil platform\",\"industry\",\"drilling\",\"platform\",\"oil\",\"rig\",\"offshore\"]},Je={name:\"paint-roller\",value:J,categories:[\"construction\"],keywords:[\"paint roller\",\"equipment\",\"house construction\",\"paint\",\"roller\",\"wall paint\",\"tools\",\"tool\"]},Ke={name:\"pipes\",value:K,categories:[\"construction\"],keywords:[\"pipes\",\"plumbing\",\"pipe\",\"drain\",\"water\"]},Xe={name:\"piping-system\",value:X,categories:[\"construction\"],keywords:[\"piping system\",\"piping\",\"water\",\"drain\",\"water\",\"industrial\"]},et={name:\"pliers\",value:ee,categories:[\"construction\"],keywords:[\"pliers\",\"equipment\",\"tools\",\"tool\",\"repairs\",\"hardware\"]},tt={name:\"pneumatic-hammer-drill\",value:te,categories:[\"construction\"],keywords:[\"pneumatic hammer drill\",\"drill\",\"hammer\",\"hydraulic\",\"jack\",\"kit\",\"pneumatic\",\"asphalt\"]},at={name:\"radiator\",value:ae,categories:[\"construction\"],keywords:[\"radiator\",\"heat\",\"warm\",\"interior\",\"heater\",\"heating\"]},it={name:\"restricted-area\",value:ie,categories:[\"construction\"],keywords:[\"restricted area\",\"zone\",\"no entry\",\"warning sign\",\"caution zone\",\"area\",\"military\",\"restricted\"]},st={name:\"road-roller\",value:se,categories:[\"construction\"],keywords:[\"road roller\",\"construction\",\"road\",\"roller\",\"vehicle\",\"roadwork\"]},lt={name:\"rulers\",value:le,categories:[\"construction\"],keywords:[\"rulers\",\"measure\",\"scale\",\"measurement\",\"centimeter\",\"tools\"]},ot={name:\"safety-vest\",value:oe,categories:[\"construction\"],keywords:[\"safety vest\",\"construction\",\"engineer\",\"jacket\",\"protect\",\"safety\"]},rt={name:\"saw\",value:re,categories:[\"construction\"],keywords:[\"saw\",\"hand\",\"tools\",\"woodworking\",\"equipment\",\"tool\"]},ct={name:\"scissor-lift\",value:ce,categories:[\"construction\"],keywords:[\"scissor lift\",\"lift\",\"scaffolding\",\"scissor\",\"hydraulic\",\"construction\",\"high\",\"factory\",\"industry\"]},dt={name:\"screwdriver\",value:de,categories:[\"construction\"],keywords:[\"screwdriver\",\"tools\",\"tool\",\"hardware\",\"screw\",\"fixer\",\"repair\"]},nt={name:\"shovel\",value:ne,categories:[\"construction\"],keywords:[\"shovel\",\"digging\",\"tool\",\"spade\",\"equipment\"]},ht={name:\"skyscrapers\",value:he,categories:[\"construction\"],keywords:[\"skyscrapers\",\"buildings\",\"city\",\"cityscape\",\"downtown\",\"skyline\",\"architecture\"]},vt={name:\"solar-panel\",value:ve,categories:[\"construction\"],keywords:[\"solar panel\",\"alternative\",\"energy\",\"electricity\",\"panel\",\"solar\"]},gt={name:\"soldering-iron\",value:ge,categories:[\"construction\"],keywords:[\"soldering iron\",\"soldering\",\"iron\",\"tool\",\"copper\",\"manufactoring\",\"electronic\"]},pt={name:\"stairs\",value:pe,categories:[\"construction\"],keywords:[\"stairs\",\"building\",\"climb\",\"height\"]},mt={name:\"stop-hand\",value:me,categories:[\"construction\"],keywords:[\"stop hand\",\"stop\",\"sign\",\"halt\",\"adblock\"]},wt={name:\"table-saw-blade\",value:we,categories:[\"construction\"],keywords:[\"table saw\",\"blade\",\"cut\",\"saw\",\"table\"]},ut={name:\"tap-water\",value:ue,categories:[\"construction\"],keywords:[\"tap water\",\"tap\",\"water\",\"faucet\",\"drip\",\"leak\"]},bt={name:\"tapeline\",value:be,categories:[\"construction\"],keywords:[\"tapeline\",\"centimeter\",\"inches tape\",\"measuring tape\",\"meter stick\",\"inches\",\"measure\",\"metre\",\"ruler\"]},zt={name:\"tow-truck\",value:ze,categories:[\"construction\"],keywords:[\"tow truck\",\"repair\",\"service\",\"tow\",\"truck\",\"towing\",\"vehicle\",\"transport\"]},yt={name:\"towel-rail\",value:ye,categories:[\"construction\"],keywords:[\"towel rail\",\"warmer\",\"heated\",\"towel\",\"rail\",\"bathroom\",\"interior\",\"rack\"]},xt={name:\"tractor\",value:xe,categories:[\"construction\"],keywords:[\"tractor\",\"vehicle\",\"machinery\"]},kt={name:\"trowel\",value:ke,categories:[\"construction\"],keywords:[\"trowel\",\"cement\",\"equipment\",\"tool\",\"renovation\",\"maintenance\"]},ft={name:\"water-boiler\",value:fe,categories:[\"construction\"],keywords:[\"water boiler\",\"boiler\",\"heater\",\"water\",\"heating\",\"appliance\"]},At={name:\"water-heater\",value:Ae,categories:[\"construction\"],keywords:[\"water heater\",\"heater\",\"water\",\"tank\",\"appliance\",\"electrical\",\"heating\"]},Ht={name:\"water-tap\",value:He,categories:[\"construction\"],keywords:[\"water tap\",\"tap\",\"faucet\",\"water\",\"plumbing\",\"valve\"]},Mt={name:\"worker\",value:Me,categories:[\"construction\"],keywords:[\"worker\",\"builder\",\"engineer\",\"man\",\"labor\"]},Vt={name:\"workers\",value:Ve,categories:[\"construction\"],keywords:[\"workers\",\"crew\",\"builders\",\"engineers\",\"men\",\"constructors\"]},Bt={name:\"wrench\",value:Be,categories:[\"construction\"],keywords:[\"wrench\",\"construction\",\"equipment\",\"hardware\",\"metal\",\"tool\"]},It=[Ie,Le,je,qe,Ce,Se,Te,Pe,De,We,Ne,Re,Ee,Fe,Ue,Ge,Oe,Qe,Ze,$e,Ye,_e,Je,Ke,Xe,et,tt,at,it,st,lt,ot,rt,ct,dt,nt,ht,vt,gt,pt,mt,wt,ut,bt,zt,yt,xt,kt,ft,At,Ht,Mt,Vt,Bt];var Lt=a(2941),jt=a(788),qt=a(8760),Ct=a(1319),St=a(7784),Tt=a(2558),Pt=a(1085),Dt=a(1544),Wt=a(3099),Nt=a(5346),Rt=a(6312),Et=a(6379),Ft=a(4812),Ut=a(8825),Gt=a(2899),Ot=a(6855),Qt=a(1619),Zt=a(7992),$t=a(8805),Yt=a(5124),_t=a(5646),Jt=a(761),Kt=a(4212),Xt=a(7356),ea=a(9120),ta=a(8293),aa=a(5238),ia=a(4487),sa=a(4013),la=a(2418),oa=a(7666),ra=a(2367),ca=a(7675),da=a(7996),na=a(9446),ha=a(1855),va=a(7375),ga=a(8577),pa=a(4183),ma=a(3480),wa=a(563),ua=a(7564),ba=a(8169),za=a(6843),ya=a(3898),xa=a(389),ka=a(1602),fa=a(8826),Aa=a(8961),Ha=a(2579),Ma=a(6703),Va=a(1869),Ba=a(2625),Ia=a(5608),La=a(1828),ja=a(4910),qa=a(7349);const Ca={name:\"bottom-percentile-records\",value:jt,categories:[\"editor\"]},Sa={name:\"bottom-records\",value:Lt,categories:[\"editor\"]},Ta={name:\"case-sensitive\",value:qt,categories:[\"editor\"],keywords:[\"case\",\"sensitive\",\"character\",\"text\",\"mode\",\"sentence\",\"style\",\"change\",\"compare\",\"filter\"]},Pa={name:\"check\",value:Ct,categories:[\"editor\"],keywords:[\"check\",\"checked\",\"mark\",\"tick\",\"ok\",\"success\"]},Da={name:\"contains\",value:St,categories:[\"editor\"],keywords:[\"contains\",\"letter\",\"contain\",\"compare\",\"filter\"]},Wa={name:\"custom-filter\",value:Tt,categories:[\"editor\"],keywords:[\"custom\",\"filter\"]},Na={name:\"does-not-contain\",value:Pt,categories:[\"editor\"],keywords:[\"contains\",\"character\",\"contain\",\"compare\",\"filter\"]},Ra={name:\"does-not-end-with\",value:Dt,categories:[\"editor\"]},Ea={name:\"does-not-start-with\",value:Wt,categories:[\"editor\"]},Fa={name:\"end-expression\",value:Nt,categories:[\"editor\"],keywords:[\"end\",\"expression\",\"arrow\",\"right\"]},Ua={name:\"ends-with\",value:Rt,categories:[\"editor\"],keywords:[\"end\",\"character\",\"compare\",\"filter\"]},Ga={name:\"equals\",value:Et,categories:[\"editor\"],keywords:[\"equal\",\"equals\",\"compare\",\"filter\",\"equality\",\"calculation\",\"math\"]},Oa={name:\"exact-match\",value:Ft,categories:[\"editor\"],keywords:[\"exact\",\"match\",\"arrow\",\"target\",\"goal\",\"aim\",\"business\",\"dart\",\"bullseye\"]},Qa={name:\"greater-than\",value:Ut,categories:[\"editor\"],keywords:[\"greater\",\"more\",\"compare\",\"next\",\"forward\",\"chevron\",\"math\",\"inequalty\",\"arrow\"]},Za={name:\"greater-than-or-equal\",value:Gt,categories:[\"editor\"],keywords:[\"greater\",\"more\",\"equal\",\"equals\",\"compare\",\"math\"]},$a={name:\"is-after\",value:Ot,categories:[\"editor\"],keywords:[\"after\",\"comparison\",\"before\",\"convert\",\"decode\",\"render\",\"scan\"]},Ya={name:\"is-before\",value:Qt,categories:[\"editor\"],keywords:[\"after\",\"comparison\",\"before\",\"convert\",\"decode\",\"render\",\"scan\"]},_a={name:\"is-empty\",value:Zt,categories:[\"editor\"],keywords:[\"empty\",\"box\",\"nothing\"]},Ja={name:\"is-false\",value:$t,categories:[\"editor\"],keywords:[\"false\",\"true\",\"choice\",\"options\",\"yes\",\"no\",\"check\",\"tick\",\"cross\"]},Ka={name:\"is-not-null\",value:Yt,categories:[\"editor\"],keywords:[\"empty\",\"null\",\"void\",\"problem\",\"number\",\"invalid\",\"inoperative\",\"none\",\"nothing\"]},Xa={name:\"is-null\",value:_t,categories:[\"editor\"],keywords:[\"null\",\"circle\",\"zero\",\"o\"]},ei={name:\"is-true\",value:Jt,categories:[\"editor\"],keywords:[\"true\",\"false\",\"choice\",\"options\",\"yes\",\"no\",\"check\",\"tick\",\"cross\"]},ti={name:\"last-month\",value:Kt,categories:[\"editor\"],keywords:[\"last\",\"calendar\",\"month\",\"date\",\"day\",\"previous\",\"schedule\",\"arrow\",\"left\",\"page\"]},ai={name:\"last-quarter\",value:aa,categories:[\"editor\"]},ii={name:\"last-week\",value:ia,categories:[\"editor\"]},si={name:\"last-year\",value:Xt,categories:[\"editor\"],keywords:[\"last\",\"calendar\",\"month\",\"date\",\"previous\",\"schedule\",\"arrow\",\"left\"]},li={name:\"less-than\",value:ea,categories:[\"editor\"],keywords:[\"less\",\"smaller\",\"compare\",\"previous\",\"back\",\"chevron\",\"math\",\"inequalty\",\"arrow\"]},oi={name:\"less-than-or-equal\",value:ta,categories:[\"editor\"],keywords:[\"less\",\"smaller\",\"equal\",\"equals\",\"compare\",\"math\"]},ri={name:\"match\",value:sa,categories:[\"editor\"],keywords:[\"match\",\"fit\",\"puzzle\",\"pieces\",\"jigsaw\",\"combination\",\"play\",\"game\",\"toy\"]},ci={name:\"month\",value:la,categories:[\"editor\"]},di={name:\"next-month\",value:oa,categories:[\"editor\"],keywords:[\"next\",\"calendar\",\"month\",\"date\",\"day\",\"following\",\"schedule\",\"arrow\",\"right\",\"page\"]},ni={name:\"next-quarter\",value:ha,categories:[\"editor\"]},hi={name:\"next-week\",value:ca,categories:[\"editor\"]},vi={name:\"next-year\",value:ra,categories:[\"editor\"],keywords:[\"next\",\"calendar\",\"month\",\"date\",\"following\",\"schedule\",\"arrow\",\"right\"]},gi={name:\"not-empty\",value:da,categories:[\"editor\"],keywords:[\"empty\",\"full\"]},pi={name:\"not-equal\",value:na,categories:[\"editor\"],keywords:[\"equal\",\"equals\",\"different\",\"compare\",\"filter\",\"equality\",\"calculation\",\"math\"]},mi={name:\"previous-quarter\",value:va,categories:[\"editor\"]},wi={name:\"previous-week\",value:ga,categories:[\"editor\"]},ui={name:\"quarter-four\",value:pa,categories:[\"editor\"]},bi={name:\"quarter-one\",value:ma,categories:[\"editor\"]},zi={name:\"quarter-three\",value:ua,categories:[\"editor\"]},yi={name:\"quarter-two\",value:wa,categories:[\"editor\"]},xi={name:\"select-all\",value:ba,categories:[\"editor\"],keywords:[\"all\",\"select\",\"check\",\"multiple\"]},ki={name:\"start-expression\",value:za,categories:[\"editor\"],keywords:[\"start\",\"expression\",\"arrow\",\"left\"]},fi={name:\"starts-with\",value:ya,categories:[\"editor\"],keywords:[\"start\",\"character\",\"compare\",\"filter\"]},Ai={name:\"this-month\",value:xa,categories:[\"editor\"],keywords:[\"this\",\"calendar\",\"month\",\"date\",\"day\",\"current\",\"schedule\",\"check\",\"page\",\"now\"]},Hi={name:\"this-quarter\",value:fa,categories:[\"editor\"]},Mi={name:\"this-week\",value:Aa,categories:[\"editor\"]},Vi={name:\"this-year\",value:ka,categories:[\"editor\"],keywords:[\"this\",\"calendar\",\"month\",\"date\",\"current\",\"schedule\",\"check\",\"now\"]},Bi={name:\"today\",value:Ha,categories:[\"editor\"],keywords:[\"today\",\"now\",\"check\",\"date\",\"day\",\"calendar\",\"current\",\"schedule\",\"event\"]},Ii={name:\"top-records\",value:Ma,categories:[\"editor\"]},Li={name:\"top-percentile-records\",value:Va,categories:[\"editor\"]},ji={name:\"ungroup\",value:Ia,categories:[\"editor\"],keywords:[\"ungroup\",\"exclude\",\"extract\"]},qi={name:\"year\",value:ja,categories:[\"editor\"]},Ci={name:\"year-to-date\",value:qa,categories:[\"editor\"]},Si={name:\"yesterday\",value:La,categories:[\"editor\"],keywords:[\"yesterday\",\"date\",\"calendar\",\"left\",\"arrow\",\"past\",\"previous\",\"day\"]},Ti={name:\"tomorrow\",value:Ba,categories:[\"editor\"],keywords:[\"tomorrow\",\"date\",\"calendar\",\"right\",\"arrow\",\"future\",\"next\",\"day\"]},Pi=[Ca,Sa,Ta,Pa,Da,Wa,Na,Ra,Ea,Fa,Ua,Ga,Oa,Qa,Za,$a,Ya,_a,Ja,Ka,Xa,ei,ti,ai,ii,si,li,oi,ri,ci,di,ni,hi,vi,gi,pi,mi,wi,ui,bi,zi,yi,Ua,Ga,_a,xi,ki,fi,Ai,Hi,Mi,Vi,Bi,Li,Ii,ji,Ci,qi,Si,Ti];var Di=a(3335),Wi=a(1046),Ni=a(8758),Ri=a(480),Ei=a(2340),Fi=a(3921),Ui=a(2203),Gi=a(9849),Oi=a(3076),Qi=a(8243),Zi=a(7587),$i=a(4595),Yi=a(5099),_i=a(8030),Ji=a(7681),Ki=a(1221),Xi=a(1683),es=a(9761),ts=a(8858),as=a(5134),is=a(3107),ss=a(5862),ls=a(9383),os=a(4612),rs=a(8530),cs=a(8568),ds=a(3089),ns=a(8589),hs=a(8352),vs=a(6459);const gs={name:\"aggregation\",value:Di,categories:[\"election\"],keywords:[\"aggregation\",\"election results\",\"results\",\"elections\",\"merge\",\"converge\"]},ps={name:\"candidate-results\",value:Wi,categories:[\"election\"],keywords:[\"front runner\",\"slate\",\"candidate\",\"results\",\"elections\"]},ms={name:\"debate\",value:Ni,categories:[\"election\"],keywords:[\"discussion\",\"dispute\",\"argument\",\"elections\",\"battle\",\"fight\",\"boxing\"]},ws={name:\"electoral-votes\",value:Ri,categories:[\"election\"],keywords:[\"electoral college\",\"electoral\",\"votes\",\"presidential election\",\"elections\"]},us={name:\"eu-parliament\",value:Ei,categories:[\"election\"],keywords:[\"European Union\",\"Europe\",\"parliament\",\"EU\",\"government\",\"politics\"]},bs={name:\"female-candidate\",value:Fi,categories:[\"election\"],keywords:[\"female\",\"woman\",\"elections\",\"candidate\",\"speaker\",\"presenter\"]},zs={name:\"horn\",value:Ui,categories:[\"election\"],keywords:[\"broadcast\",\"megaphone\",\"speaker\",\"volume\",\"elections\"]},ys={name:\"male-candidate\",value:Gi,categories:[\"election\"],keywords:[\"male\",\"man\",\"elections\",\"candidate\",\"speaker\",\"presenter\"]},xs={name:\"parliament-1\",value:Oi,categories:[\"election\"],keywords:[\"parliament\",\"capitol\",\"goverment\",\"house\",\"politics\",\"Europe\",\"temple\"]},ks={name:\"parliament-2\",value:Qi,categories:[\"election\"],keywords:[\"parliament\",\"capitol\",\"goverment\",\"house\",\"politics\",\"Berlin\",\"gate\",\"monument\"]},fs={name:\"popular-votes\",value:Zi,categories:[\"election\"],keywords:[\"vote\",\"ballot\",\"cast\",\"station\",\"election\"]},As={name:\"protester-signs\",value:$i,categories:[\"election\"],keywords:[\"protest\",\"protester\",\"demonstration\",\"signs\",\"revolt\",\"turmoil\",\"riot\"]},Hs={name:\"results-by-candidates\",value:Yi,categories:[\"election\"],keywords:[\"results\",\"chart\",\"pie\"]},Ms={name:\"results-piechart\",value:_i,categories:[\"election\"],keywords:[\"results\",\"chart\",\"pie\"]},Vs={name:\"scales-balanced\",value:Ji,categories:[\"election\"],keywords:[\"scales\",\"justice\",\"balance\",\"legal\",\"weight\"]},Bs={name:\"scales-unbalanced\",value:Ki,categories:[\"election\"],keywords:[\"scales\",\"unfair\",\"unbalanced\",\"off-balance\",\"legal\",\"weight\"]},Is={name:\"stats\",value:Xi,categories:[\"election\"],keywords:[\"statistics\",\"chart\",\"screen\",\"display\",\"monitor\"]},Ls={name:\"timeline\",value:es,categories:[\"election\"],keywords:[\"timeline\",\"events\"]},js={name:\"usa-ca\",value:ts,categories:[\"election\"],keywords:[\"USA\",\"state\",\"California\",\"ca\"]},qs={name:\"usa-fl\",value:as,categories:[\"election\"],keywords:[\"USA\",\"state\",\"Florida\",\"fl\"]},Cs={name:\"usa-lower-48-states\",value:is,categories:[\"election\"],keywords:[\"USA\",\"state\",\"lower\",\"48\"]},Ss={name:\"usa-ny\",value:ss,categories:[\"election\"],keywords:[\"USA\",\"state\",\"New York\",\"ny\"]},Ts={name:\"usa-party-democratic\",value:ls,categories:[\"election\"],keywords:[\"USA\",\"party\",\"democratic\",\"democrat\",\"democrats\",\"donkey\",\"politics\"]},Ps={name:\"usa-party-green\",value:os,categories:[\"election\"],keywords:[\"USA\",\"party\",\"green\",\"politics\"]},Ds={name:\"usa-party-libertarian\",value:rs,categories:[\"election\"],keywords:[\"USA\",\"party\",\"libertarian\",\"hedgehog\",\"politics\"]},Ws={name:\"usa-party-republican\",value:cs,categories:[\"election\"],keywords:[\"USA\",\"party\",\"republican\",\"republicans\",\"elephant\",\"politics\"]},Ns={name:\"usa-tx\",value:ds,categories:[\"election\"],keywords:[\"USA\",\"state\",\"Texas\",\"tx\"]},Rs={name:\"vote\",value:ns,categories:[\"election\"],keywords:[\"vote\",\"cast\",\"ballot\",\"box\",\"station\",\"election\"]},Es={name:\"white-house-1\",value:hs,categories:[\"election\"],keywords:[\"white house\",\"president\",\"house\",\"government\",\"Washington\",\"DC\"]},Fs={name:\"white-house-2\",value:vs,categories:[\"election\"],keywords:[\"white house\",\"president\",\"house\",\"government\",\"Washington\",\"DC\",\"Athens\",\"acropolis\"]},Us=[gs,ps,ms,ws,us,bs,zs,ys,xs,ks,fs,As,Hs,Ms,Vs,Bs,Is,Ls,js,qs,Cs,Ss,Ts,Ps,Ds,Ws,Ns,Rs,Es,Fs];var Gs=a(2976),Os=a(4044),Qs=a(5516),Zs=a(4134),$s=a(1249),Ys=a(2383),_s=a(1169),Js=a(8333),Ks=a(2703),Xs=a(514),el=a(6668),tl=a(1803),al=a(2374),il=a(9979),sl=a(5156),ll=a(1786),ol=a(2353),rl=a(4578),cl=a(4175),dl=a(2801),nl=a(676),hl=a(7915),vl=a(6786),gl=a(2082),pl=a(2600),ml=a(2926),wl=a(1191),ul=a(6397),bl=a(2441),zl=a(9154),yl=a(7454),xl=a(3888),kl=a(9753),fl=a(5471),Al=a(4931),Hl=a(2943),Ml=a(1500),Vl=a(4081),Bl=a(5030),Il=a(552),Ll=a(6857),jl=a(1913),ql=a(7802),Cl=a(3931),Sl=a(8294),Tl=a(4171),Pl=a(4894),Dl=a(1733),Wl=a(3629),Nl=a(5339),Rl=a(8430),El=a(3207),Fl=a(4289);const Ul={name:\"atm-dollar\",value:Gs,categories:[\"finance\"],keywords:[\"atm\",\"usd\",\"dollar\",\"bank\",\"cash\",\"money\",\"payment\",\"deposit\",\"withdraw\",\"machine\"]},Gl={name:\"atm-euro\",value:Os,categories:[\"finance\"],keywords:[\"atm\",\"eur\",\"euro\",\"bank\",\"cash\",\"money\",\"payment\",\"deposit\",\"withdraw\",\"machine\"]},Ol={name:\"atm-pound\",value:Qs,categories:[\"finance\"],keywords:[\"atm\",\"gbp\",\"pound\",\"sterling\",\"bank\",\"cash\",\"money\",\"payment\",\"deposit\",\"withdraw\",\"machine\"]},Ql={name:\"atm\",value:Zs,categories:[\"finance\"],keywords:[\"atm\",\"bank\",\"cash\",\"money\",\"payment\",\"deposit\",\"withdraw\",\"machine\"]},Zl={name:\"atm-yen\",value:$s,categories:[\"finance\"],keywords:[\"atm\",\"jpy\",\"yen\",\"bank\",\"cash\",\"money\",\"payment\",\"deposit\",\"withdraw\",\"machine\"]},$l={name:\"auction\",value:Ys,categories:[\"finance\"],keywords:[\"auction\",\"sale\",\"gavel\",\"law\",\"judge\",\"hammer\"]},Yl={name:\"award\",value:_s,categories:[\"finance\"],keywords:[\"award\",\"medal\",\"winner\",\"first\",\"gold\",\"sport\"]},_l={name:\"bank-safe\",value:Js,categories:[\"finance\"],keywords:[\"bank\",\"safe\",\"savings\",\"secure\",\"vault\",\"deposit\",\"locker\",\"safe box\"]},Jl={name:\"barcode\",value:Ks,categories:[\"finance\"],keywords:[\"barcode\",\"code\",\"scan\",\"marketing\",\"commerce\"]},Kl={name:\"bear-market\",value:Xs,categories:[\"finance\"],keywords:[\"bear\",\"market\",\"decreasing\",\"financial\",\"economy\",\"animal\",\"stock\"]},Xl={name:\"bill-paid\",value:el,categories:[\"finance\"],keywords:[\"bill\",\"paid\",\"check\",\"invoice\",\"payment\",\"purchase\",\"accounting\",\"billing\"]},eo={name:\"budget-spending\",value:tl,categories:[\"finance\"],keywords:[\"budget\",\"spending\",\"usd\",\"dollar\",\"accounting\",\"expense\",\"investment\",\"management\",\"ballance\"]},to={name:\"bull-market\",value:al,categories:[\"finance\"],keywords:[\"bull\",\"market\",\"increasing\",\"financial\",\"economy\",\"animal\",\"stock\"]},ao={name:\"business-development\",value:il,categories:[\"finance\"],keywords:[\"business\",\"development\",\"global\",\"worldwide\",\"solutions\",\"organisation\",\"innovation\",\"management\"]},io={name:\"calculator\",value:sl,categories:[\"finance\"],keywords:[\"calculator\",\"math\",\"school\",\"business\",\"accounting\"]},so={name:\"cash\",value:ll,categories:[\"finance\"],keywords:[\"cash\",\"money\",\"notes\",\"bank\",\"pay\",\"payment\",\"banknote\",\"currency\"]},lo={name:\"cash-alt\",value:ol,categories:[\"finance\"],keywords:[\"cash\",\"money\",\"notes\",\"bank\",\"pay\",\"payment\",\"banknote\",\"currency\",\"usd\",\"dollar\"]},oo={name:\"cash-only\",value:rl,categories:[\"finance\"],keywords:[\"cash\",\"no card\",\"payment\",\"money\",\"pay\",\"cash only\"]},ro={name:\"certificate\",value:cl,categories:[\"finance\"],keywords:[\"certificate\",\"medal\",\"badge\",\"seal\",\"prize\",\"award\",\"guarantee\",\"quality\",\"stamp\",\"warranty\",\"collection\"]},co={name:\"commodities\",value:dl,categories:[\"finance\"],keywords:[\"commodities\",\"oil\",\"gold\",\"trade\",\"commodity\",\"crude\",\"market\",\"price\",\"invest\"]},no={name:\"credit-cards\",value:nl,categories:[\"finance\"],keywords:[\"credit\",\"debit\",\"cards\",\"payment\",\"shopping\",\"business\",\"money\",\"cash\"]},ho={name:\"credit-control\",value:hl,categories:[\"finance\"],keywords:[\"credit\",\"control\",\"watch\",\"eye\"]},vo={name:\"crowdfunding\",value:vl,categories:[\"finance\"],keywords:[\"crowdfunding\",\"mutual\",\"fund\",\"contribution\",\"donation\",\"money\",\"usd\",\"dollar\",\"revenue\",\"budget\",\"fundraising\"]},go={name:\"debt\",value:gl,categories:[\"finance\"],keywords:[\"debt\",\"financial\",\"usd\",\"dollar\",\"money\",\"request\"]},po={name:\"delivery\",value:pl,categories:[\"finance\"],keywords:[\"delivery\",\"truck\",\"logistics\",\"van\",\"courier\",\"shipping\",\"service\",\"vehicle\"]},mo={name:\"diamond-circled\",value:ml,categories:[\"finance\"],keywords:[\"diamond\",\"gem\",\"precious\",\"jewellery\",\"circled\",\"jewel\",\"gemstone\"]},wo={name:\"diamond\",value:wl,categories:[\"finance\"],keywords:[\"diamond\",\"gem\",\"precious\",\"jewellery\",\"jewel\",\"gemstone\"]},uo={name:\"discount\",value:ul,categories:[\"finance\"],keywords:[\"discount\",\"percent\",\"percentage\",\"sale\",\"badge\",\"off\",\"%\",\"rebate\",\"subsidy\"]},bo={name:\"dividents\",value:bl,categories:[\"finance\"],keywords:[\"dividents\",\"%\",\"percent\",\"percentage\",\"income\",\"rate\",\"cut\",\"intrest\",\"investment\"]},zo={name:\"dollar-circled\",value:zl,categories:[\"finance\"],keywords:[\"usd\",\"dollar\",\"circled\",\"currency\"]},yo={name:\"drop-shipping\",value:yl,categories:[\"finance\"],keywords:[\"drop\",\"shipping\",\"dropshipping\",\"box\",\"parachute\",\"business\",\"logistics\",\"crate\",\"air\",\"supply\",\"airdrop\",\"fortnite\",\"pubg\",\"battle royale\",\"delivery\",\"package\"]},xo={name:\"euro-circled\",value:xl,categories:[\"finance\"],keywords:[\"eur\",\"euro\",\"circled\",\"currency\",\"eu\"]},ko={name:\"face-id\",value:kl,categories:[\"finance\"],keywords:[\"faceid\",\"biometric\",\"identity\",\"security\",\"face\"]},fo={name:\"financial-insurance\",value:fl,categories:[\"finance\"],keywords:[\"financial\",\"insurance\",\"business\",\"money\",\"protection\",\"security\"]},Ao={name:\"foreign-exchange\",value:Al,categories:[\"finance\"],keywords:[\"foreign\",\"exchange\",\"currency\",\"forex\",\"swap\",\"trade\",\"bank\",\"dollar\",\"usd\",\"euro\",\"eur\",\"money\",\"rate\"]},Ho={name:\"gift\",value:Hl,categories:[\"finance\"],keywords:[\"gift\",\"present\",\"box\",\"christmas\",\"bonus\",\"give\"]},Mo={name:\"gold\",value:Ml,categories:[\"finance\"],keywords:[\"\"]},Vo={name:\"idea-generation\",value:Vl,categories:[\"finance\"],keywords:[\"gold\",\"business\",\"currency\",\"finance\",\"gold bars\",\"treasure\",\"gold blocks\",\"gold cubes\",\"gold bricks\",\"gold ingots\",\"gold biscuits\"]},Bo={name:\"invoice\",value:Bl,categories:[\"finance\"],keywords:[\"invoice\",\"accounting\",\"bill\",\"business\",\"document\",\"file\",\"billing\",\"payment\",\"purchase\"]},Io={name:\"legal-document\",value:Il,categories:[\"finance\"],keywords:[\"legal\",\"document\",\"file\",\"contract\",\"paper\",\"law\",\"court\"]},Lo={name:\"loan\",value:Ll,categories:[\"finance\"],keywords:[\"loan\",\"collateral\",\"convinience loan\",\"mortgage\",\"personal loan\",\"lending\",\"money\",\"dollar\",\"usd\"]},jo={name:\"money-bag\",value:jl,categories:[\"finance\"],keywords:[\"money\",\"bag\",\"cash\",\"coin\",\"currency\",\"dollar\",\"usd\",\"investment\"]},qo={name:\"oil\",value:ql,categories:[\"finance\"],keywords:[\"oil\",\"crude\",\"commodities\",\"barrel\",\"oil container\",\"petroleum\"]},Co={name:\"pay-date\",value:Cl,categories:[\"finance\"],keywords:[\"pay date\",\"calendar\",\"salary\",\"card\",\"payday\",\"payment\",\"finance\",\"schedule\",\"plan\",\"direct debit\"]},So={name:\"piggy-bank\",value:Sl,categories:[\"finance\"],keywords:[\"piggy bank\",\"money\",\"save\",\"savings\",\"piggybank\",\"business\",\"cash\",\"pig\",\"coin\",\"coins\",\"bank\",\"deposit\",\"piglet\"]},To={name:\"pound-circled\",value:Tl,categories:[\"finance\"],keywords:[\"gbp\",\"pound\",\"sterling\",\"circled\",\"currency\"]},Po={name:\"project-revenue\",value:Pl,categories:[\"finance\"],keywords:[\"project\",\"revenue\",\"turnover\",\"income\",\"dollar\",\"usd\",\"money\",\"capital\",\"earnings\",\"profit\",\"automation\",\"make money\"]},Do={name:\"sale\",value:Dl,categories:[\"finance\"],keywords:[\"sale\",\"circled\",\"rebate\",\"discount\",\"deal\",\"commerce\",\"shopping\",\"promo\",\"flash\",\"flashsale\"]},Wo={name:\"security\",value:Wl,categories:[\"finance\"],keywords:[\"security\",\"briefcase\",\"case\",\"guard\",\"insurance\",\"protection\",\"shield\",\"bag\",\"luggage\",\"document\",\"save\"]},No={name:\"security-alt\",value:Nl,categories:[\"finance\"],keywords:[\"security\",\"briefcase\",\"usd\",\"dollar\",\"case\",\"guard\",\"insurance\",\"protection\",\"bag\",\"luggage\",\"document\",\"save\"]},Ro={name:\"strategy\",value:Rl,categories:[\"finance\"],keywords:[\"strategy\",\"business\",\"corporate\",\"strategic\",\"management\",\"plan\",\"planning\",\"chess\",\"game\",\"play\"]},Eo={name:\"wire-transfer\",value:El,categories:[\"finance\"],keywords:[\"wire\",\"money\",\"transfer\",\"currency\",\"exchange\",\"euro\",\"eur\",\"dollar\",\"usd\",\"bank\",\"payment\",\"trade\",\"transaction\"]},Fo={name:\"yen-circled\",value:Fl,categories:[\"finance\"],keywords:[\"jpy\",\"yen\",\"circled\",\"currency\"]},Uo=[Ql,Ul,Gl,Ol,Zl,$l,Yl,_l,Jl,Kl,Xl,eo,to,ao,io,so,lo,oo,ro,co,no,ho,vo,go,po,wo,mo,uo,bo,zo,yo,xo,ko,fo,Ao,Ho,Mo,Vo,Bo,Io,Lo,jo,qo,Co,So,To,Po,Do,Wo,No,Ro,Eo,Fo];var Go=a(2099),Oo=a(1156),Qo=a(6),Zo=a(4565),$o=a(862),Yo=a(9044),_o=a(4943),Jo=a(6589),Ko=a(1115),Xo=a(3956),er=a(9250),tr=a(6405),ar=a(562),ir=a(3696),sr=a(8603),lr=a(1027),or=a(2517),rr=a(5445),cr=a(5458),dr=a(2138),nr=a(2816),hr=a(9079),vr=a(7237),gr=a(1494),pr=a(5802),mr=a(3145),wr=a(9082),ur=a(4132),br=a(348),zr=a(5963),yr=a(9773),xr=a(8314),kr=a(2490),fr=a(6941),Ar=a(8897),Hr=a(3143),Mr=a(2773),Vr=a(6138),Br=a(4344),Ir=a(3603),Lr=a(8695),jr=a(1535),qr=a(5145),Cr=a(6934),Sr=a(3688),Tr=a(9712),Pr=a(5788),Dr=a(6864),Wr=a(623),Nr=a(171),Rr=a(7982),Er=a(7814),Fr=a(5832),Ur=a(8),Gr=a(7652),Or=a(2281),Qr=a(5678),Zr=a(2554),$r=a(4335),Yr=a(2888),_r=a(1418),Jr=a(6282),Kr=a(3640),Xr=a(8183),ec=a(5828),tc=a(3562),ac=a(4292),ic=a(1920),sc=a(256),lc=a(4437),oc=a(6913),rc=a(8310);const cc={name:\"accessibility\",value:Go,categories:[\"health\"],keywords:[\"accessibility\",\"wheelchair\",\"disabled\",\"handicapped\",\"chairbound\",\"impaired\"]},dc={name:\"aids-ribbon\",value:Oo,categories:[\"health\"],keywords:[\"aids\",\"ribbon\",\"hiv\",\"care\",\"community\"]},nc={name:\"ambulance\",value:Qo,categories:[\"health\"],keywords:[\"ambulance\",\"car\",\"medicine\",\"emergency\",\"vehicle\",\"van\",\"healthcare\",\"medical\",\"rescue\"]},hc={name:\"anxiety\",value:Zo,categories:[\"health\"],keywords:[\"anxiety\",\"brainstorm\",\"mental\",\"depression\",\"despair\",\"fatigue\",\"pressure\",\"stress\",\"tension\",\"worried\"]},vc={name:\"baby-bottle\",value:$o,categories:[\"health\"],keywords:[\"baby\",\"bottle\",\"feeding\",\"milk\"]},gc={name:\"bacteria\",value:Yo,categories:[\"health\"],keywords:[\"bacteria\",\"virus\",\"covid\",\"coronavirus\",\"microbe\",\"germs\",\"science\",\"biology\"]},pc={name:\"bandage\",value:_o,categories:[\"health\"],keywords:[\"bandage\",\"band\",\"bandaid\",\"plaster\",\"aid\",\"wound\",\"first aid\",\"healing\"]},mc={name:\"biohazard\",value:Jo,categories:[\"health\"],keywords:[\"biohazard\",\"waste\"]},wc={name:\"blood\",value:Ko,categories:[\"health\"],keywords:[\"blood\",\"drop\",\"donation\",\"droplet\"]},uc={name:\"braille\",value:Xo,categories:[\"health\"],keywords:[\"braile\",\"alphabet\",\"blind\",\"read\",\"accessibility\",\"impaired\"]},bc={name:\"breastfeeding\",value:er,categories:[\"health\"],keywords:[\"breastfeeding\",\"mother\",\"nurse\"]},zc={name:\"caduceus\",value:tr,categories:[\"health\"],keywords:[\"caduceus\",\"medical\",\"asclepiuss\",\"pharmacy\",\"doctor\",\"healthcare\"]},yc={name:\"cancer-ribbon\",value:ar,categories:[\"health\"],keywords:[\"cancer\",\"ribbon\",\"awareness\",\"breast\"]},xc={name:\"clinic\",value:ir,categories:[\"health\"],keywords:[\"clinic\",\"hospital\",\"medical\",\"building\",\"therapy\",\"health center\"]},kc={name:\"condom\",value:sr,categories:[\"health\"],keywords:[\"condom\",\"contraceptive\",\"sex\",\"hiv\",\"latex\",\"preservative\",\"healthcare\",\"sexual\",\"safe\"]},fc={name:\"condom-used\",value:lr,categories:[\"health\"],keywords:[\"condom\",\"contraceptive\",\"sex\",\"hiv\",\"latex\",\"preservative\",\"healthcare\",\"sexual\",\"condom used\",\"semen\",\"sperm\",\"safe\"]},Ac={name:\"contraception\",value:or,categories:[\"health\"],keywords:[\"\"]},Hc={name:\"coronavirus\",value:rr,categories:[\"health\"],keywords:[\"coronavirus\",\"virus\",\"covid\",\"pandemic\",\"corona\",\"germ\",\"infection\"]},Mc={name:\"deafness\",value:cr,categories:[\"health\"],keywords:[\"deafness\",\"deaf\",\"accessibility\",\"hearing\",\"impaired\",\"ear\"]},Vc={name:\"dental-floss\",value:dr,categories:[\"health\"],keywords:[\"dental floss\",\"floss\",\"dentist\",\"tooth\",\"care\",\"flossing\",\"oral\",\"hygiene\",\"teeth\"]},Bc={name:\"dental-implant\",value:nr,categories:[\"health\"],keywords:[\"dental\",\"dentist\",\"implant\",\"tooth\",\"care\",\"oral\"]},Ic={name:\"diabetes\",value:hr,categories:[\"health\"],keywords:[\"diabetes\",\"hand\",\"finger\",\"blood\",\"healtcheck\",\"endocrinology\",\"blood test\",\"blood drop\",\"blood sugar\",\"glucose\"]},Lc={name:\"dna\",value:vr,categories:[\"health\"],keywords:[\"dna\",\"genes\",\"genome\",\"biology\",\"genetics\"]},jc={name:\"doctors-bag\",value:gr,categories:[\"health\"],keywords:[\"doctor\",\"bag\",\"briefcase\",\"healthcare\",\"first aid kit\",\"medical box\",\"medicine\",\"emergency\",\"medical\",\"hospital\",\"nurse\"]},qc={name:\"doctor\",value:pr,categories:[\"health\"],keywords:[\"doctor\",\"surgeon\",\"physician\",\"md\",\"medical\",\"nurse\",\"gp\",\"general practitioner\"]},Cc={name:\"dose\",value:mr,categories:[\"health\"],keywords:[\"dose\",\"doseage\",\"dropper\",\"drop\",\"tool\",\"medicine\",\"sample\",\"eyedropper\"]},Sc={name:\"embryo\",value:wr,categories:[\"health\"],keywords:[\"embryo\",\"baby\",\"fetus\",\"motherhood\",\"pregnancy\",\"pregnant\",\"maternity\",\"mother\"]},Tc={name:\"fertilization\",value:ur,categories:[\"health\"],keywords:[\"fertilization\",\"cell\",\"insemination\",\"ovulation\",\"reproduction\",\"sperm\",\"egg\"]},Pc={name:\"fitness-watch\",value:br,categories:[\"health\"],keywords:[\"fitness\",\"watch\",\"smartwatch\",\"fit band\",\"heart rate\",\"wearable\",\"tracker\",\"sport\",\"diet\"]},Dc={name:\"gas-mask\",value:zr,categories:[\"health\"],keywords:[\"gas\",\"mask\",\"protection\",\"safety\",\"chemical mask\",\"industrial mask\",\"respirator\"]},Wc={name:\"hearing-aid\",value:yr,categories:[\"health\"],keywords:[\"hearing\",\"aid\",\"deaf\",\"deafness\",\"ear\",\"earbuds\",\"sound\"]},Nc={name:\"heart-care\",value:xr,categories:[\"health\"],keywords:[\"heart\",\"care\",\"check\"]},Rc={name:\"heart-monitor\",value:kr,categories:[\"health\"],keywords:[\"heart\",\"pulse\",\"cardiogram\",\"beat\",\"cardiac\",\"healthcare\"]},Ec={name:\"hospital-bed\",value:fr,categories:[\"health\"],keywords:[\"hospital\",\"bed\",\"care\",\"medical\"]},Fc={name:\"hospital-sign\",value:Ar,categories:[\"health\"],keywords:[\"hospital\",\"sign\",\"medical\",\"road sign\"]},Uc={name:\"hospital\",value:Hr,categories:[\"health\"],keywords:[\"hospital\",\"clinic\",\"medical\",\"building\",\"therapy\",\"health center\"]},Gc={name:\"keep-away-from-children\",value:Mr,categories:[\"health\"],keywords:[\"keep away from children\",\"keep away children\",\"not suitable for children\",\"no children\",\"keep away from kids\",\"keep away kids\",\"not suitable for kids\",\"no kids\",\"keep away from babys\",\"keep away babys\",\"not suitable for babys\",\"no babys\"]},Oc={name:\"mask\",value:Vr,categories:[\"health\"],keywords:[\"mask\",\"face mask\",\"medical mask\",\"shield mask\",\"protective mask\",\"dentist mask\",\"covid\",\"prevention\"]},Qc={name:\"mask-alt\",value:Br,categories:[\"health\"],keywords:[\"mask\",\"face mask\",\"medical mask\",\"shield mask\",\"protective mask\",\"dentist mask\",\"covid\",\"prevention\"]},Zc={name:\"massage\",value:Ir,categories:[\"health\"],keywords:[\"massage\",\"spa\",\"relax\",\"body massage\",\"treatment\"]},$c={name:\"medical-book\",value:Lr,categories:[\"health\"],keywords:[\"medical\",\"book\",\"notebook\",\"healthcare\",\"cross\",\"medicine book\",\"pharmacy book\"]},Yc={name:\"medicine\",value:jr,categories:[\"health\"],keywords:[\"medicine\",\"drugs\",\"medical\",\"pill\"]},_c={name:\"microorganisms\",value:qr,categories:[\"health\"],keywords:[\"microorganisms\",\"bacteria\",\"microbes\",\"virus\",\"biological\",\"cell\",\"biology\"]},Jc={name:\"microscope\",value:Cr,categories:[\"health\"],keywords:[\"microscope\",\"lab\",\"biology\",\"chemistry\",\"instrument\",\"science\",\"education\",\"learn\"]},Kc={name:\"nurse\",value:Sr,categories:[\"health\"],keywords:[\"nurse\",\"healthcare\",\"medical\",\"medical assistant\",\"nursemaid\"]},Xc={name:\"pacifier\",value:Tr,categories:[\"health\"],keywords:[\"pacifier\",\"baby\",\"child\",\"children\",\"kid\",\"binky\",\"dummy\",\"nipple\",\"soother\",\"teether\"]},ed={name:\"pill\",value:Pr,categories:[\"health\"],keywords:[\"pill\",\"drugs\",\"medicine\",\"capsule\",\"medical\",\"remedy\",\"medicament\",\"dragee\",\"treatment\",\"aid\"]},td={name:\"plastic-surgery\",value:Dr,categories:[\"health\"],keywords:[\"plastic surgery\",\"cosmetic surgery\",\"esthetician\"]},ad={name:\"poop\",value:Wr,categories:[\"health\"],keywords:[\"poop\",\"shit\",\"crap\",\"poo\",\"faeces\"]},id={name:\"pregnancy-no-alcohol\",value:Nr,categories:[\"health\"],keywords:[\"pregnancy\",\"preagnant\",\"no alcohol\",\"no drinking\",\"non-alcoholic\",\"do not drink\"]},sd={name:\"pulse\",value:Rr,categories:[\"health\"],keywords:[\"pulse\",\"heartbeat\",\"heartrate\"]},ld={name:\"radioactive\",value:Er,categories:[\"health\"],keywords:[\"radioactive\",\"biohazard\",\"danger\",\"radioactivity\",\"radiation\",\"nuke\",\"atomic bomb\",\"atom\",\"nuclear\",\"energy\"]},od={name:\"rh-negative\",value:Fr,categories:[\"health\"],keywords:[\"blood\",\"rh\",\"negative\",\"minus\",\"blood group\",\"blood type\",\"rhesus\",\"donorship\"]},rd={name:\"rh-positive\",value:Ur,categories:[\"health\"],keywords:[\"blood\",\"rh\",\"positive\",\"plus\",\"blood group\",\"blood type\",\"rhesus\",\"donorship\"]},cd={name:\"rod-of-ascelepius\",value:Gr,categories:[\"health\"],keywords:[\"rod of ascelepius\",\"staff of ascelepius\",\"ascelepius\"]},dd={name:\"sign-language\",value:Or,categories:[\"health\"],keywords:[\"sign\",\"language\",\"deaf\",\"asl\",\"deafness\",\"mute\",\"dumb\"]},nd={name:\"sneeze\",value:Qr,categories:[\"health\"],keywords:[\"sneeze\",\"cough\",\"covid\",\"corona\",\"coronavirus\",\"flu\",\"infection\",\"sick\",\"cold\",\"hayfever\"]},hd={name:\"stethoscope\",value:Zr,categories:[\"health\"],keywords:[\"stethoscope\",\"line\",\"doctor\",\"medical\",\"nurse\",\"doctor\",\"healthcare\"]},vd={name:\"stretcher\",value:$r,categories:[\"health\"],keywords:[\"stretcher\",\"aid\",\"hospital\",\"patient\",\"medical\",\"bed\",\"cot\",\"ambulance\"]},gd={name:\"syringe\",value:Yr,categories:[\"health\"],keywords:[\"syringe\",\"medicine\",\"doctor\",\"nurse\",\"drugs\",\"injection\",\"vaccine\",\"vaccination\",\"flu\",\"medical\",\"needle\",\"shot\"]},pd={name:\"teeth\",value:_r,categories:[\"health\"],keywords:[\"teeth\",\"false teeth\",\"tooth\",\"set of teeth\",\"dental\",\"dentist\",\"gums\",\"dentistry\"]},md={name:\"thermometer\",value:Jr,categories:[\"health\"],keywords:[\"thermometer\",\"temperature\",\"weather\",\"celsius\",\"fahrenheit\",\"gauge\",\"science\",\"measure\",\"heat\",\"cold\",\"degree\"]},wd={name:\"toilet-paper\",value:Kr,categories:[\"health\"],keywords:[\"toilet\",\"paper\",\"napkins\",\"roll\"]},ud={name:\"tooth-cracked\",value:Xr,categories:[\"health\"],keywords:[\"tooth\",\"cracked tooth\",\"caries\",\"dental\",\"dentist\",\"broken tooth\",\"damaged tooth\",\"teeth\"]},bd={name:\"tooth\",value:ec,categories:[\"health\"],keywords:[\"tooth\",\"teeth\",\"dental\",\"dentist\"]},zd={name:\"veterinarian\",value:tc,categories:[\"health\"],keywords:[\"veterinarian\",\"vet\",\"pet\",\"animal\",\"clinic\",\"veterinary\"]},yd={name:\"vial\",value:ac,categories:[\"health\"],keywords:[\"vial\",\"test tube\",\"lab\",\"sample\",\"chemistry\"]},xd={name:\"virus-protection\",value:ic,categories:[\"health\"],keywords:[\"virus\",\"protection\",\"shield\",\"immunity\",\"corona\",\"coronavirus\",\"covid\",\"bacteria\",\"safety\",\"antivirus\",\"hygiene\",\"stop virus\"]},kd={name:\"virus-stop\",value:sc,categories:[\"health\"],keywords:[\"virus\",\"stop virus\",\"protection\",\"corona\",\"coronavirus\",\"covid\",\"bacteria\",\"safety\"]},fd={name:\"virus\",value:lc,categories:[\"health\"],keywords:[\"virus\",\"corona\",\"coronavirus\",\"covid\",\"bacteria\",\"flu\"]},Ad={name:\"visually-impaired\",value:oc,categories:[\"health\"],keywords:[\"visually\",\"impaired\",\"blind\",\"eye\",\"sight\"]},Hd={name:\"weight-scale\",value:rc,categories:[\"health\"],keywords:[\"weight\",\"scale\",\"measure\",\"bathroom\",\"bath\",\"overweight\",\"obesity\",\"weighing\",\"fitness\",\"weightloss\"]},Md=[cc,dc,nc,hc,vc,gc,pc,mc,wc,uc,bc,zc,yc,xc,kc,fc,Ac,Hc,Mc,Vc,Bc,Ic,Lc,qc,jc,Cc,Sc,Tc,Pc,Dc,Wc,Nc,Rc,Uc,Ec,Fc,Gc,Oc,Qc,Zc,$c,Yc,_c,Jc,Kc,Xc,ed,td,ad,id,sd,ld,od,rd,cd,dd,nd,hd,vd,gd,pd,md,wd,bd,ud,zd,yd,fd,xd,kd,Ad,Hd];var Vd=a(2563),Bd=a(8587),Id=a(1785),Ld=a(1612),jd=a(8485),qd=a(8106),Cd=a(3468),Sd=a(6680),Td=a(2233),Pd=a(8593),Dd=a(8147),Wd=a(8901),Nd=a(1634),Rd=a(8535),Ed=a(3770),Fd=a(5299),Ud=a(7945),Gd=a(3437),Od=a(6735),Qd=a(3550),Zd=a(4193),$d=a(1092),Yd=a(2373),_d=a(1147),Jd=a(5631),Kd=a(1197),Xd=a(8422),en=a(5497),tn=a(4989),an=a(7116),sn=a(5488),ln=a(3508),on=a(9803),rn=a(7976),cn=a(6357),dn=a(2091),nn=a(4131),hn=a(2072),vn=a(564),gn=a(26),pn=a(4009),mn=a(1959),wn=a(2e3),un=a(7823),bn=a(5105),zn=a(6508),yn=a(8473),xn=a(4088),kn=a(3150),fn=a(5826),An=a(1316),Hn=a(2402),Mn=a(6337),Vn=a(5437),Bn=a(8921);const In={name:\"amazon\",value:Vd,categories:[\"logos\"],keywords:[\"amazon\",\"ecommerce\",\"online\",\"shopping\",\"logo\",\"brand\"]},Ln={name:\"american-express\",value:Bd,categories:[\"logos\"],keywords:[\"americanexpress\",\"amex\",\"card\",\"payment\",\"finance\",\"logo\",\"brand\"]},jn={name:\"apple-app-store\",value:Id,categories:[\"logos\"],keywords:[\"apple\",\"appstore\",\"apps\",\"logo\"]},qn={name:\"apple-pay\",value:Ld,categories:[\"logos\"],keywords:[\"apple\",\"pay\",\"payment\",\"finance\",\"logo\"]},Cn={name:\"apple\",value:jd,categories:[\"logos\"],keywords:[\"apple\",\"mac\",\"iphone\",\"ipad\",\"iwatch\",\"logo\",\"brand\"]},Sn={name:\"battlenet\",value:qd,categories:[\"logos\"],keywords:[\"battlenet\",\"bnet\",\"gaming\",\"blizzard\",\"logo\"]},Tn={name:\"bitcoin\",value:Cd,categories:[\"logos\",\"finance\"],keywords:[\"bitcoin\",\"crypto\",\"currency\",\"coin\",\"cryptocurrency\",\"logo\"]},Pn={name:\"blu-ray\",value:Sd,categories:[\"logos\"],keywords:[\"bluray\",\"ray\",\"entertainment\",\"movie\",\"logo\",\"brand\"]},Dn={name:\"box\",value:Td,categories:[\"logos\"],keywords:[\"box\",\"cloud\",\"logo\"]},Wn={name:\"chrome\",value:Pd,categories:[\"logos\"],keywords:[\"chrome\",\"browser\",\"internet\",\"google\",\"logo\"]},Nn={name:\"diners-club\",value:Dd,categories:[\"logos\",\"finance\"],keywords:[\"diners\",\"club\",\"dinersclub\",\"card\",\"payment\",\"finance\",\"logo\",\"brand\"]},Rn={name:\"discord\",value:Wd,categories:[\"logos\"],keywords:[\"discord\",\"chat\",\"social\",\"logo\"]},En={name:\"dropbox\",value:Nd,categories:[\"logos\"],keywords:[\"dropbox\",\"cloud\",\"logo\"]},Fn={name:\"ebay\",value:Rd,categories:[\"logos\"],keywords:[\"ebay\",\"ecommerce\",\"online\",\"shopping\",\"marketplace\",\"bidding\",\"logo\",\"brand\"]},Un={name:\"ethereum\",value:Ed,categories:[\"logos\"],keywords:[\"ethereum\",\"crypto\",\"currency\",\"coin\",\"cryptocurrency\",\"logo\"]},Gn={name:\"firefox\",value:Fd,categories:[\"logos\"],keywords:[\"firefox\",\"browser\",\"internet\",\"mozilla\",\"logo\"]},On={name:\"google-drive\",value:Ud,categories:[\"logos\"],keywords:[\"drive\",\"google\",\"googledrive\",\"cloud\",\"logo\"]},Qn={name:\"google-hangouts\",value:Gd,categories:[\"logos\"],keywords:[\"hangouts\",\"google\",\"googlehangouts\",\"chat\",\"conferencing\",\"logo\"]},Zn={name:\"google-maps\",value:Od,categories:[\"logos\"],keywords:[\"google\",\"maps\",\"navigation\",\"logo\"]},$n={name:\"google-pay\",value:Qd,categories:[\"logos\"],keywords:[\"google\",\"pay\",\"payment\",\"finance\",\"logo\"]},Yn={name:\"google-play\",value:Zd,categories:[\"logos\"],keywords:[\"google\",\"play\",\"store\",\"playstore\",\"apps\",\"logo\"]},_n={name:\"google\",value:$d,categories:[\"logos\"],keywords:[\"google\",\"g\",\"logo\",\"brand\"]},Jn={name:\"google-translate\",value:Yd,categories:[\"logos\"],keywords:[\"google\",\"translate\",\"language\",\"logo\"]},Kn={name:\"internet-explorer\",value:_d,categories:[\"logos\"],keywords:[\"explorer\",\"browser\",\"internet\",\"microsoft\",\"logo\"]},Xn={name:\"ios\",value:Jd,categories:[\"logos\"],keywords:[\"apple\",\"ios\",\"iphone\",\"ipad\",\"iwatch\",\"programming\",\"logo\"]},eh={name:\"jsfiddle\",value:Kd,categories:[\"logos\"],keywords:[\"jsfiddle\",\"code\",\"programming\",\"editor\",\"snippet\",\"logo\"]},th={name:\"maestro\",value:Xd,categories:[\"logos\",\"finance\"],keywords:[\"maestro\",\"card\",\"payment\",\"finance\",\"logo\",\"brand\"]},ah={name:\"mastercard\",value:en,categories:[\"logos\",\"finance\"],keywords:[\"mastercard\",\"card\",\"payment\",\"finance\",\"logo\",\"brand\"]},ih={name:\"microsoft\",value:tn,categories:[\"logos\"],keywords:[\"microsoft\",\"windows\",\"software\",\"logo\",\"brand\"]},sh={name:\"ms-edge\",value:an,categories:[\"logos\"],keywords:[\"edge\",\"browser\",\"internet\",\"microsoft\",\"logo\"]},lh={name:\"ms-excel\",value:sn,categories:[\"logos\"],keywords:[\"excel\",\"spreadsheet\",\"microsoft\",\"logo\"]},oh={name:\"ms-office\",value:ln,categories:[\"logos\"],keywords:[\"office\",\"365\",\"microsoft\",\"logo\"]},rh={name:\"ms-powerpoint\",value:on,categories:[\"logos\"],keywords:[\"powerpoint\",\"slides\",\"presentation\",\"deck\",\"microsoft\",\"logo\"]},ch={name:\"ms-teams\",value:rn,categories:[\"logos\"],keywords:[\"teams\",\"communication\",\"chat\",\"conferencing\",\"meeting\",\"microsoft\",\"logo\"]},dh={name:\"ms-outlook\",value:cn,categories:[\"logos\"],keywords:[\"outlook\",\"email\",\"communication\",\"microsoft\",\"logo\"]},nh={name:\"ms-word\",value:dn,categories:[\"logos\"],keywords:[\"word\",\"microsoft\",\"logo\"]},hh={name:\"onedrive\",value:nn,categories:[\"logos\"],keywords:[\"onedrive\",\"cloud\",\"microsoft\",\"logo\"]},vh={name:\"opera\",value:hn,categories:[\"logos\"],keywords:[\"opera\",\"browser\",\"internet\",\"logo\",\"o\",\"circle\"]},gh={name:\"paypal\",value:vn,categories:[\"logos\"],keywords:[\"paypal\",\"payment\",\"finance\",\"logo\"]},ph={name:\"safari\",value:gn,categories:[\"logos\"],keywords:[\"safari\",\"browser\",\"internet\",\"apple\",\"logo\",\"compass\",\"dirctions\",\"navigation\"]},mh={name:\"sass\",value:pn,categories:[\"logos\"],keywords:[\"sass\",\"logo\"]},wh={name:\"skype\",value:mn,categories:[\"logos\"],keywords:[\"skype\",\"chat\",\"meeting\",\"conferencing\",\"microsoft\",\"logo\"]},uh={name:\"slack\",value:wn,categories:[\"logos\"],keywords:[\"slack\",\"chat\",\"communication\",\"logo\"]},bh={name:\"soundcloud\",value:un,categories:[\"logos\"],keywords:[\"soundcloud\",\"music\",\"social\",\"media\",\"network\",\"logo\"]},zh={name:\"spotify\",value:bn,categories:[\"logos\"],keywords:[\"spotify\",\"music\",\"network\",\"logo\"]},yh={name:\"stackoverflow\",value:zn,categories:[\"logos\"],keywords:[\"stackoverflow\",\"stack\",\"overflow\",\"social\",\"media\",\"programming\",\"logo\"]},xh={name:\"steam\",value:yn,categories:[\"logos\"],keywords:[\"steam\",\"gaming\",\"games\",\"social\",\"media\",\"logo\"]},kh={name:\"stripe\",value:xn,categories:[\"logos\"],keywords:[\"stripe\",\"payment\",\"finance\",\"logo\"]},fh={name:\"tinder\",value:kn,categories:[\"logos\"],keywords:[\"tinder\",\"dating\",\"chat\",\"match\",\"social\",\"media\",\"network\",\"logo\",\"flame\"]},Ah={name:\"touch-id\",value:fn,categories:[\"logos\"],keywords:[\"touchid\",\"touch\",\"finger\",\"fingerprint\",\"biometric\",\"identity\",\"security\",\"apple\",\"logo\"]},Hh={name:\"twitch\",value:An,categories:[\"logos\"],keywords:[\"twitch\",\"social\",\"media\",\"gaming\",\"logo\",\"cartoon\",\"streaming\"]},Mh={name:\"usb\",value:Hn,categories:[\"logos\"],keywords:[\"usb\",\"flash\",\"drive\",\"logo\"]},Vh={name:\"vimeo\",value:Mn,categories:[\"logos\"],keywords:[\"vimeo\",\"video\",\"social\",\"media\",\"network\",\"logo\"]},Bh={name:\"visa\",value:Vn,categories:[\"logos\",\"finance\"],keywords:[\"visa\",\"card\",\"payment\",\"finance\",\"logo\",\"brand\"]},Ih={name:\"vs-code\",value:Bn,categories:[\"logos\"],keywords:[\"vscode\",\"ide\",\"programming\",\"microsoft\",\"logo\"]},Lh=[In,Ln,Cn,jn,qn,Sn,Tn,Pn,Dn,Wn,Nn,Rn,En,Fn,Un,Gn,_n,On,Qn,Zn,$n,Yn,Jn,Kn,Xn,eh,th,ah,ih,sh,lh,oh,dh,rh,ch,nh,hh,vh,gh,ph,mh,wh,uh,bh,zh,yh,xh,kh,fh,Ah,Hh,Mh,Vh,Bh,Ih];var jh=a(6872),qh=a(2376),Ch=a(7970),Sh=a(2859),Th=a(2906),Ph=a(5536),Dh=a(7566),Wh=a(5640),Nh=a(5531),Rh=a(8213),Eh=a(1664),Fh=a(1499),Uh=a(7799),Gh=a(7735),Oh=a(3790),Qh=a(743),Zh=a(6273),$h=a(8463),Yh=a(185),_h=a(8007),Jh=a(8280),Kh=a(3293),Xh=a(44),ev=a(8501),tv=a(2681),av=a(1833),iv=a(5321),sv=a(5364),lv=a(5199),ov=a(5274);const rv={name:\"api\",value:jh,categories:[\"programming\"],keywords:[\"api\",\"development\",\"interface\",\"service\",\"database\",\"programming\"]},cv={name:\"app-symbol\",value:qh,categories:[\"programming\"],keywords:[\"appsymbol\",\"app\",\"development\",\"programming\",\"circle\",\"a\"]},dv={name:\"bug\",value:Ch,categories:[\"programming\"],keywords:[\"bug\",\"animal\",\"insect\",\"virus\",\"malware\",\"security\",\"development\",\"programming\"]},nv={name:\"code-fork\",value:Sh,categories:[\"programming\"],keywords:[\"codefork\",\"code\",\"fork\",\"git\",\"github\",\"development\",\"collaboration\",\"control\",\"version\",\"programming\"]},hv={name:\"code-review\",value:Th,categories:[\"programming\"],keywords:[\"codereview\",\"review\",\"software\",\"app\",\"development\",\"programming\"]},vv={name:\"code\",value:Ph,categories:[\"programming\"],keywords:[\"code\",\"script\",\"source\",\"development\",\"programming\"]},gv={name:\"terminal\",value:Dh,categories:[\"programming\"],keywords:[\"terminal\",\"console\",\"code\",\"bash\",\"cmd\",\"command\",\"sh\",\"shell\",\"development\",\"programming\"]},pv={name:\"development\",value:Wh,categories:[\"programming\"],keywords:[\"puzzle\",\"pieces\",\"jigsaw\",\"combination\",\"play\",\"game\",\"toy\",\"development\",\"programming\"]},mv={name:\"file-changes\",value:Nh,categories:[\"programming\"],keywords:[\"file\",\"changes\",\"plus\",\"minus\",\"development\",\"programming\"]},wv={name:\"file-tree\",value:Rh,categories:[\"programming\"],keywords:[\"file\",\"tree\",\"hierarchy\",\"files\",\"system\",\"levels\",\"development\",\"programming\",\"chart\",\"organize\",\"structure\",\"treeview\"]},uv={name:\"git-branch\",value:Eh,categories:[\"programming\"],keywords:[\"git\",\"branch\",\"development\",\"programming\",\"commit\",\"fork\",\"split\",\"code\",\"collaboration\"]},bv={name:\"git-commit\",value:Fh,categories:[\"programming\"],keywords:[\"git\",\"commit\",\"development\",\"programming\",\"pull\",\"code\",\"collaboration\"]},zv={name:\"git-compare\",value:Uh,categories:[\"programming\"],keywords:[\"git\",\"compare\",\"development\",\"programming\",\"code\",\"collaboration\"]},yv={name:\"git-issue\",value:Gh,categories:[\"programming\"],keywords:[\"git\",\"issue\",\"development\",\"programming\",\"warning\",\"exclamation\"]},xv={name:\"git-merge\",value:Oh,categories:[\"programming\"],keywords:[\"git\",\"merge\",\"development\",\"programming\",\"code\",\"collaboration\"]},kv={name:\"grid\",value:Qh,categories:[\"programming\"],keywords:[\"grid\",\"table\",\"development\",\"programming\",\"component\",\"datatable\"]},fv={name:\"inspect-code\",value:Zh,categories:[\"programming\"],keywords:[\"inspect\",\"code\",\"development\",\"programming\",\"marketing\",\"markup\",\"search\",\"seo\",\"review\"]},Av={name:\"milestone\",value:$h,categories:[\"programming\"],keywords:[\"milestone\",\"sign\",\"development\",\"programming\",\"travel\",\"roadmap\",\"tourism\"]},Hv={name:\"code-value\",value:Yh,categories:[\"programming\"],keywords:[\"code\",\"value\",\"development\",\"programming\",\"module\",\"chip\",\"cpu\",\"electronics\",\"equipment\",\"hardware\",\"iot\"]},Mv={name:\"plugin\",value:_h,categories:[\"programming\"],keywords:[\"plugin\",\"plug\",\"development\",\"programming\",\"socket\",\"connector\",\"electricity\"]},Vv={name:\"pull-request\",value:Jh,categories:[\"programming\"],keywords:[\"pull\",\"request\",\"development\",\"programming\",\"git\",\"commit\",\"scheme\"]},Bv={name:\"repository\",value:Kh,categories:[\"programming\"],keywords:[\"repo\",\"repository\",\"development\",\"programming\",\"cabinet\",\"document\",\"folder\",\"storage\"]},Iv={name:\"responsive-layout\",value:Xh,categories:[\"programming\"],keywords:[\"responsive\",\"layout\",\"development\",\"programming\",\"device\",\"adaptive\",\"screen\",\"fluid\"]},Lv={name:\"severity\",value:ev,categories:[\"programming\"],keywords:[\"severity\",\"gauge\",\"development\",\"programming\",\"indicator\",\"speed\",\"speedometer\"]},jv={name:\"software-architecture\",value:tv,categories:[\"programming\"],keywords:[\"software\",\"architecture\",\"development\",\"programming\",\"horizontal\"]},qv={name:\"software-installer\",value:av,categories:[\"programming\"],keywords:[\"software\",\"installer\",\"development\",\"programming\",\"install\",\"download\"]},Cv={name:\"source-code\",value:iv,categories:[\"programming\"],keywords:[\"source\",\"code\",\"development\",\"programming\",\"html\",\"web\"]},Sv={name:\"system-update\",value:sv,categories:[\"programming\"],keywords:[\"system\",\"update\",\"development\",\"programming\",\"software\",\"arrows\",\"refresh\",\"sync\"]},Tv={name:\"verified-account\",value:lv,categories:[\"programming\"],keywords:[\"verified\",\"account\",\"development\",\"programming\",\"certified\",\"verify\",\"check\",\"sign\",\"badge\",\"quality\"]},Pv={name:\"workflow\",value:ov,categories:[\"programming\"],keywords:[\"workflow\",\"hierarchy\",\"development\",\"programming\",\"organisation\",\"process\",\"diagram\"]},Dv=[rv,cv,dv,vv,nv,Hv,hv,pv,mv,wv,uv,bv,bv,yv,xv,kv,fv,Av,Mv,Vv,Bv,Iv,Lv,jv,qv,Cv,Sv,gv,Tv,Pv];var Wv=a(9075),Nv=a(6637),Rv=a(3551),Ev=a(3772),Fv=a(7292),Uv=a(9834),Gv=a(3547),Ov=a(3264),Qv=a(1216),Zv=a(8629),$v=a(635),Yv=a(7934),_v=a(9089),Jv=a(8915),Kv=a(7374),Xv=a(3864),eg=a(2927),tg=a(3495);const ag={name:\"behance\",value:Wv,categories:[\"social media\"],keywords:[\"behance\",\"portfolio\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},ig={name:\"dribbble\",value:Nv,categories:[\"social media\"],keywords:[\"dribbble\",\"portfolio\",\"basketball\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},sg={name:\"facebook-messenger\",value:Rv,categories:[\"social media\"],keywords:[\"facebook\",\"messenger\",\"chat\",\"message\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},lg={name:\"facebook\",value:Ev,categories:[\"social media\"],keywords:[\"facebook\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},og={name:\"github\",value:Fv,categories:[\"social media\"],keywords:[\"github\",\"repository\",\"git\",\"programming\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},rg={name:\"instagram\",value:Uv,categories:[\"social media\"],keywords:[\"instagram\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},cg={name:\"linkedin\",value:Gv,categories:[\"social media\"],keywords:[\"linkedin\",\"professional\",\"recruiting\",\"job\",\"employment\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},dg={name:\"medium\",value:Ov,categories:[\"social media\"],keywords:[\"medium\",\"blog\",\"article\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},ng={name:\"pinterest\",value:Qv,categories:[\"social media\"],keywords:[\"pinterest\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},hg={name:\"reddit\",value:Zv,categories:[\"social media\"],keywords:[\"reddit\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},vg={name:\"snapchat\",value:$v,categories:[\"logos\",\"social media\"],keywords:[\"snapchat\",\"ghost\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},gg={name:\"telegram\",value:Yv,categories:[\"logos\",\"social media\"],keywords:[\"telegram\",\"messenger\",\"chat\",\"message\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},pg={name:\"tiktok\",value:_v,categories:[\"social media\"],keywords:[\"tiktok\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},mg={name:\"twitter\",value:Jv,categories:[\"social media\"],keywords:[\"twitter\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},wg={name:\"viber\",value:Kv,categories:[\"social media\"],keywords:[\"viber\",\"messenger\",\"chat\",\"message\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},ug={name:\"wechat\",value:Xv,categories:[\"social media\"],keywords:[\"wechat\",\"messenger\",\"chat\",\"message\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},bg={name:\"whatsapp\",value:eg,categories:[\"social media\"],keywords:[\"whatsapp\",\"messenger\",\"chat\",\"message\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},zg={name:\"youtube\",value:tg,categories:[\"social media\"],keywords:[\"youtube\",\"video\",\"stream\",\"social\",\"media\",\"network\",\"logo\",\"trademark\"]},yg=[ag,ig,sg,lg,og,rg,cg,dg,ng,hg,vg,gg,pg,mg,wg,ug,bg,zg];var xg,kg;!function(e){e[e.construction=0]=\"construction\",e[e.content=1]=\"content\",e[e.editor=2]=\"editor\",e[e.election=3]=\"election\",e[e.finance=4]=\"finance\",e[e.health=5]=\"health\",e[e.logos=6]=\"logos\",e[e.programming=7]=\"programming\",e[e[\"social media\"]=8]=\"social media\"}(xg||(xg={})),function(e){e.values=function(){return Object.keys(xg).filter((e=>!function(e){const t=~~Number(e);return String(t)===e&&t>=0}(e)))}}(kg||(kg={}));const fg=[...B,...It,...Pi,...Us,...Uo,...Md,...Lh,...Dv,...yg]})();var s=i.lTk,l=i.Bd$,o=i._im,r=i.U_J,c=i.KJG,d=i.SAz,n=i.t1N,h=i.MBC,v=i.$6P,g=i.cIv,p=i.ZlE,m=i.slj,w=i.huW,u=i.hi0,b=i.RDp,z=i.W3x,y=i.hnq,x=i._wT,k=i.uyw,f=i.NKz,A=i.c07,H=i.wbJ,M=i.oQ7,V=i.FbX,B=i.oGm,I=i.bpX,L=i.Xae,j=i.YP5,q=i.R3W,C=i.kc5,S=i.QEg,T=i.prf,P=i.CaT,D=i.VQQ,W=i.Ncd,N=i.Tl5,R=i.oUB,E=i.bON,F=i.$ik,U=i.zO6,G=i.yLM,O=i.BBm,Q=i.dsG,Z=i.Hs9,$=i.BZV,Y=i.$cm,_=i.SdW,J=i.WqF,K=i.DmU,X=i.neX,ee=i.yd1,te=i.jIG,ae=i.__Q,ie=i.Nli,se=i.Vfi,le=i.pkE,oe=i.T73,re=i.mbq,ce=i.LgP,de=i.oNx,ne=i.u_P,he=i.V7I,ve=i.om6,ge=i.UPo,pe=i.WuY,me=i.qI$,we=i.BF5,ue=i.e9R,be=i.T4Q,ze=i.TUN,ye=i.CVw,xe=i.ykd,ke=i.zm5,fe=i.Y0L,Ae=i.qA0,He=i.BuB,Me=i.lZ2,Ve=i.I9y,Be=i.Yt_,Ie=i.Kyr,Le=i.r3W,je=i.kQN,qe=i.MWC,Ce=i.dmx,Se=i.NHt,Te=i.qWE,Pe=i.XXv,De=i.iNc,We=i.uCe,Ne=i.EJm,Re=i.w9U,Ee=i.GRX,Fe=i.IkF,Ue=i.knC,Ge=i.Z7L,Oe=i.b8$,Qe=i._W,Ze=i.r$P,$e=i.YRD,Ye=i.tfn,_e=i.TkW,Je=i.x7N,Ke=i.Vie,Xe=i.AlA,et=i.aUE,tt=i.$Nv,at=i.bWL,it=i.TEL,st=i.YQA,lt=i.jNO,ot=i.WX1,rt=i.oY5,ct=i.aGw,dt=i.NbW,nt=i.La4,ht=i.ul4,vt=i.vL8,gt=i.CPu,pt=i.j6y,mt=i.Fjr,wt=i.hzO,ut=i.lcl,bt=i.Fcd,zt=i.pnn,yt=i.fS0,xt=i.VNl,kt=i.tHy,ft=i.oyk,At=i.x9B,Ht=i.byu,Mt=i.uGh,Vt=i.qv4,Bt=i.FHd,It=i.TPc,Lt=i.oWe,jt=i.VC8,qt=i.noN,Ct=i.iI$,St=i.n0J,Tt=i.Udi,Pt=i._hH,Dt=i.H1E,Wt=i.h9L,Nt=i._1l,Rt=i.srP,Et=i.IoZ,Ft=i.gvV,Ut=i.nb5,Gt=i.kZe,Ot=i.KEc,Qt=i.q37,Zt=i.nKk,$t=i.bWO,Yt=i.EVT,_t=i.lkr,Jt=i.j8b,Kt=i.POC,Xt=i.jZX,ea=i.dvO,ta=i.Rm7,aa=i.XaR,ia=i.tSN,sa=i.Vle,la=i.eCg,oa=i.jL$,ra=i.mZq,ca=i.vCb,da=i.M20,na=i.Zkw,ha=i.RlZ,va=i.hrI,ga=i.Vhm,pa=i.B5G,ma=i.wdp,wa=i.irC,ua=i.TPU,ba=i.CRu,za=i.F8i,ya=i.v0n,xa=i.vF$,ka=i.AxD,fa=i.RRz,Aa=i.xbD,Ha=i.mAK,Ma=i.K0_,Va=i.Ft,Ba=i.oAc,Ia=i.yst,La=i.vPL,ja=i.grx,qa=i.nmN,Ca=i.zMd,Sa=i.dj,Ta=i.K2e,Pa=i.Oo1,Da=i.b8L,Wa=i.zHf,Na=i.QjB,Ra=i.$27,Ea=i.kGB,Fa=i.iJb,Ua=i.UNd,Ga=i.dSs,Oa=i.t7l,Qa=i.XLs,Za=i.sSH,$a=i.KYW,Ya=i.OrE,_a=i.DFD,Ja=i.EQD,Ka=i.Tzs,Xa=i.fI_,ei=i.IV2,ti=i.Bzc,ai=i.ilv,ii=i.Egz,si=i.hWf,li=i.Azp,oi=i.iLZ,ri=i.zd7,ci=i.S5w,di=i.Uhp,ni=i.$FH,hi=i.tsm,vi=i.TpQ,gi=i.agg,pi=i.nDF,mi=i.HsE,wi=i.KqL,ui=i.NJw,bi=i.Dw5,zi=i.Quu,yi=i.QHr,xi=i.vK1,ki=i.TJH,fi=i.cSL,Ai=i.Pm4,Hi=i.it7,Mi=i.fmF,Vi=i.aWJ,Bi=i.rJt,Ii=i.xrm,Li=i.CVQ,ji=i.gec,qi=i.$C9,Ci=i.OQV,Si=i.KBg,Ti=i.Wsk,Pi=i.qcT,Di=i.HhS,Wi=i.mMe,Ni=i.r9J,Ri=i.BA1,Ei=i.ojU,Fi=i.e2R,Ui=i.qIe,Gi=i.qjt,Oi=i.pcC,Qi=i.ALK,Zi=i.OPA,$i=i.AV9,Yi=i.LFl,_i=i.YRr,Ji=i.ofM,Ki=i.dCx,Xi=i.o0k,es=i.GHz,ts=i.TZ4,as=i.JT3,is=i.v1S,ss=i.EBv,ls=i.OdB,os=i.cjF,rs=i.Dt4,cs=i.emT,ds=i.T0N,ns=i.fut,hs=i.FVL,vs=i.bab,gs=i.bgi,ps=i.yMF,ms=i.sbn,ws=i.a13,us=i.aP6,bs=i.yJR,zs=i.Xgi,ys=i.kN4,xs=i.Ao5,ks=i.oV1,fs=i.vHN,As=i.YEW,Hs=i.t7G,Ms=i.axC,Vs=i.td_,Bs=i.UQh,Is=i.syb,Ls=i.ACN,js=i.vq6,qs=i.h0B,Cs=i.bsC,Ss=i.bc2,Ts=i.dIb,Ps=i.LFI,Ds=i.$TZ,Ws=i.Tt$,Ns=i.QDF,Rs=i.epd,Es=i.AWe,Fs=i.svs,Us=i.NAV,Gs=i._nk,Os=i.O$d,Qs=i.fBX,Zs=i.Nyw,$s=i.otD,Ys=i.f10,_s=i.VGW,Js=i.CmW,Ks=i.knS,Xs=i.C24,el=i.AgG,tl=i.GLn,al=i.iuE,il=i.Vul,sl=i.Cfd,ll=i.bdM,ol=i.P1S,rl=i.wLN,cl=i.Eiv,dl=i.BsZ,nl=i.S7c,hl=i.nRM,vl=i.Ggf,gl=i.xPI,pl=i.POU,ml=i.Z2D,wl=i.H1N,ul=i.LgZ,bl=i.WEX,zl=i.Roi,yl=i.xAR,xl=i.mY5,kl=i.c2U,fl=i.sR5,Al=i.Tr9,Hl=i.A$7,Ml=i._CP,Vl=i.NLz,Bl=i.m3M,Il=i.$Dt,Ll=i.kmR,jl=i.Z8D,ql=i.wJO,Cl=i.lQ1,Sl=i.ZTw,Tl=i.iZ_,Pl=i.s5D,Dl=i.ZsF,Wl=i._2J,Nl=i.THr,Rl=i.EzF,El=i.B_v,Fl=i.zOh,Ul=i.Ase,Gl=i.$W5,Ol=i.iKp,Ql=i.OTU,Zl=i.CuM,$l=i.h1n,Yl=i.VMF,_l=i.yYn,Jl=i.kN$,Kl=i.oln,Xl=i.G3k,eo=i.Nsu,to=i.jmd,ao=i.eGZ,io=i.ZJ_,so=i.bRk,lo=i.U3_,oo=i.Gpw,ro=i.ONB,co=i.$kt,no=i.gYK,ho=i.GtC,vo=i.KK7,go=i.CBM,po=i.Ldn,mo=i.UZF,wo=i.tyl,uo=i.$Sj,bo=i.Gf8,zo=i.CvE,yo=i.ZB9;export{s as IconCategory,l as IconCategoryEnum,o as accessibility,r as addChild,c as addFilter,d as addRow,n as aggregation,h as aidsRibbon,v as all,g as amazon,p as ambulance,m as amex,w as anxiety,u as api,b as appSymbol,z as apple,y as appleAppStore,x as applePay,k as arrowDownLeft,f as arrowDownRight,A as arrowUpLeft,H as arrowUpRight,M as atm,V as atmDollar,B as atmEuro,I as atmPound,L as atmYen,j as auction,q as award,C as babyBottle,S as bacteria,T as bandage,P as bankSafe,D as barcode,W as battlenet,N as bearMarket,R as behance,E as billPaid,F as biohazard,U as bitcoin,G as blood,O as bluRay,Q as bottomPercentileRecords,Z as bottomRecords,$ as box,Y as braille,_ as breastfeeding,J as brickWall,K as brush,X as bucket,ee as budgetSpending,te as bug,ae as building,ie as bullMarket,se as bulldozer,le as businessDevelopment,oe as caduceus,re as calculator,ce as cancerRibbon,de as candidateResults,ne as caseSensitive,he as cash,ve as cashAlt,ge as cashOnly,pe as cementMixer,me as certificate,we as check,ue as chrome,be as clinic,ze as code,ye as codeFork,xe as codeModule,ke as codeReview,fe as commodities,Ae as condom,He as condomUsed,Me as construction,Ve as constructionCone,Be as constructionProject,Ie as constructionTrolley,Le as contains,je as content,qe as contraception,Ce as cordlessScrewdriver,Se as coronavirus,Te as countryHome,Pe as crane,De as creditCards,We as creditControl,Ne as crowdfunding,Re as customFilter,Ee as deafness,Fe as debate,Ue as debt,Ge as delivery,Oe as dentalFloss,Qe as dentalImplant,Ze as development,$e as diabetes,Ye as diamond,_e as diamondCircled,Je as dinersClub,Ke as discord,Xe as discount,et as dividents,tt as dna,at as doctor,it as doctorsBag,st as doesNotContain,lt as doesNotEndWith,ot as doesNotStartWith,rt as dollarCircled,ct as dose,dt as dribbble,nt as dropShipping,ht as dropbox,vt as dumpTruck,gt as ebay,pt as editor,mt as elections,wt as electoralVotes,ut as embryo,bt as endExpression,zt as endsWith,yt as equals,xt as estate,kt as ethereum,ft as euParliament,At as euroCircled,Ht as exactMatch,Mt as faceId,Vt as facebook,Bt as facebookMessenger,It as femaleCandidate,Lt as fertilization,jt as fileChanges,qt as fileTree,Ct as finance,St as financialInsurance,Tt as firefox,Pt as fitnessWatch,Dt as foreignExchange,Wt as forkliftTruck,Nt as foundation,Rt as fountain,Et as gasMask,Ft as gift,Ut as gitBranch,Gt as gitCommit,Ot as gitCompare,Qt as gitIssue,Zt as gitMerge,$t as github,Yt as gold,_t as google,Jt as googleDrive,Kt as googleHangouts,Xt as googleMaps,ea as googlePay,ta as googlePlay,aa as googleTranslate,ia as greaterThan,sa as greaterThanOrEqual,la as grid,oa as hammer,ra as health,ca as hearingAid,da as heartCare,na as heartMonitor,ha as horn,va as hospital,ga as hospitalBed,pa as hospitalSign,ma as ideaGeneration,wa as impactDrill,ua as inspectCode,ba as instagram,za as internetExplorer,ya as invoice,xa as ios,ka as isAfter,fa as isBefore,Aa as isEmpty,Ha as isFalse,Ma as isNotNull,Va as isNull,Ba as isTrue,Ia as jsFiddle,La as jumpDown,ja as jumpUp,qa as keepAwayFromChildren,Ca as ladder,Sa as lastMonth,Ta as lastQuarter,Pa as lastWeek,Da as lastYear,Wa as legalDocument,Na as lessThan,Ra as lessThanOrEqual,Ea as linkedin,Fa as loan,Ua as logos,Ga as maestro,Oa as maintenance,Qa as maleCandidate,Za as mask,$a as maskAlt,Ya as massage,_a as mastercard,Ja as match,Ka as medicalBook,Xa as medicine,ei as medium,ti as microorganisms,ai as microscope,ii as microsoft,si as milestone,li as moneyBag,oi as month,ri as msEdge,ci as msExcel,di as msOffice,ni as msOutlook,hi as msPowerpoint,vi as msTeams,gi as msWord,pi as nextMonth,mi as nextQuarter,wi as nextWeek,ui as nextYear,bi as notEmpty,zi as notEqual,yi as nurse,xi as oil,ki as oilPlatform,fi as onedrive,Ai as opera,Hi as pacifier,Mi as paintRoller,Vi as parliament1,Bi as parliament2,Ii as payDate,Li as paypal,ji as piggyBank,qi as pill,Ci as pinLeft,Si as pinRight,Ti as pinterest,Pi as pipes,Di as pipingSystem,Wi as plasticSurgery,Ni as pliers,Ri as plugin,Ei as pneumaticHammerDrill,Fi as poop,Ui as popularVotes,Gi as poundCircled,Oi as pregnancyNoAlcohol,Qi as previousQuarter,Zi as previousWeek,$i as programming,Yi as projectRevenue,_i as protesterSigns,Ji as pullRequest,Ki as pulse,Xi as quarterFour,es as quarterOne,ts as quarterThree,as as quarterTwo,is as radiator,ss as radioactive,ls as reddit,os as repository,rs as responsiveLayout,cs as restrictedArea,ds as resultsByCandidates,ns as resultsPiechart,hs as rhNegative,vs as rhPositive,gs as roadRoller,ps as rodOfAsclepius,ms as rulers,ws as safari,us as safetyVest,bs as sale,zs as sass,ys as saw,xs as scalesBalanced,ks as scalesUnbalanced,fs as scissorLift,As as screwdriver,Hs as security,Ms as securityAlt,Vs as selectAll,Bs as severity,Is as shovel,Ls as signLanguage,js as skype,qs as skyscrapers,Cs as slack,Ss as snapchat,Ts as sneeze,Ps as socialMedia,Ds as softwareArchitecture,Ws as softwareInstaller,Ns as solarPanel,Rs as solderingIron,Es as soundcloud,Fs as sourceCode,Us as spotify,Gs as stackoverflow,Os as stairs,Qs as startExpression,Zs as startsWith,$s as stats,Ys as steam,_s as stethoscope,Js as stopHand,Ks as strategy,Xs as stretcher,el as stripe,tl as syringe,al as systemUpdate,il as tableSawBlade,sl as tapWater,ll as tapeline,ol as teeth,rl as telegram,cl as terminal,dl as thermometer,nl as thisMonth,hl as thisQuarter,vl as thisWeek,gl as thisYear,pl as tiktok,ml as timeline,wl as tinder,ul as today,bl as toiletPaper,zl as tomorrow,yl as tooth,xl as toothCracked,kl as topPercentileRecords,fl as topRecords,Al as touchId,Hl as towTruck,Ml as towelRail,Vl as tractor,Bl as trowel,Il as twitch,Ll as twitter,jl as ungroup,ql as unpinLeft,Cl as unpinRight,Sl as usaCa,Tl as usaFl,Pl as usaLower48States,Dl as usaNy,Wl as usaPartyDemocratic,Nl as usaPartyGreen,Rl as usaPartyLibertarian,El as usaPartyRepublican,Fl as usaTx,Ul as usb,Gl as verifiedAccount,Ol as veterinarian,Ql as vial,Zl as viber,$l as vimeo,Yl as virus,_l as virusProtection,Jl as virusStop,Kl as visa,Xl as visuallyImpaired,eo as vote,to as vsCode,ao as waterBoiler,io as waterHeater,so as waterTap,lo as wechat,oo as weightScale,ro as whatsapp,co as whiteHouse1,no as whiteHouse2,ho as wireTransfer,vo as worker,go as workers,po as workflow,mo as wrench,wo as year,uo as yearToDate,bo as yenCircled,zo as yesterday,yo as youtube};","import * as i1 from '@angular/animations';\nimport { style, animate, animation, keyframes, useAnimation, trigger, transition } from '@angular/animations';\nimport * as i0 from '@angular/core';\nimport { Injectable, Directive, Input, HostListener, NgModule, isDevMode, PLATFORM_ID, Inject, EventEmitter, ViewContainerRef, ElementRef, Optional, Output, HostBinding, InjectionToken, Component, ViewChild, ContentChildren, forwardRef, ContentChild, Self, SecurityContext, TemplateRef, Pipe, inject, LOCALE_ID, QueryList, ViewChildren, Host, ChangeDetectionStrategy, SkipSelf, SimpleChange, createComponent, CUSTOM_ELEMENTS_SCHEMA, reflectComponentType } from '@angular/core';\nimport * as i5 from '@angular/forms';\nimport { NgModel, NgControl, FormControlName, NG_VALUE_ACCESSOR, Validators, NG_VALIDATORS, FormGroup, FormsModule, ReactiveFormsModule, FormControl, RequiredValidator, MinValidator, MaxValidator, EmailValidator, MinLengthValidator, MaxLengthValidator, PatternValidator } from '@angular/forms';\nimport * as i1$1 from '@angular/common';\nimport { isPlatformBrowser, formatDate as formatDate$1, CurrencyPipe, formatPercent, formatNumber, getLocaleCurrencyCode, DatePipe, getLocaleDateFormat, FormatWidth, getLocaleDateTimeFormat, DOCUMENT, CommonModule, getLocaleFirstDayOfWeek, getLocaleCurrencySymbol, formatCurrency as formatCurrency$1, getLocaleNumberFormat, NumberFormatStyle, getCurrencySymbol } from '@angular/common';\nimport { Observable, Subject, fromEvent, interval, animationFrameScheduler, noop, merge, Subscription, timer, pipe } from 'rxjs';\nimport { takeUntil, filter, first as first$1, throttleTime, take, throttle, startWith, debounce, tap, switchMap, skipLast, map, debounceTime, shareReplay, takeWhile, pluck } from 'rxjs/operators';\nimport { mergeWith } from 'lodash-es';\nimport { __awaiter, __decorate, __param } from 'tslib';\nimport { strToU8, zip } from 'fflate';\nimport * as i1$2 from '@angular/platform-browser';\nimport { HammerGestureConfig, HAMMER_GESTURE_CONFIG, ɵgetDOM } from '@angular/platform-browser';\nimport * as i2 from '@angular/common/http';\nimport { addRow, addChild, pinLeft, unpinLeft, jumpDown, jumpUp, caseSensitive, editor } from '@igniteui/material-icons-extended';\nimport 'igniteui-trial-watermark';\nimport { v4 } from 'uuid';\n\nvar EaseIn;\n(function (EaseIn) {\n EaseIn[EaseIn[\"Quad\"] = `cubic-bezier(0.550, 0.085, 0.680, 0.530)`] = \"Quad\";\n EaseIn[EaseIn[\"Cubic\"] = `cubic-bezier(0.550, 0.055, 0.675, 0.190)`] = \"Cubic\";\n EaseIn[EaseIn[\"Quart\"] = `cubic-bezier(0.895, 0.030, 0.685, 0.220)`] = \"Quart\";\n EaseIn[EaseIn[\"Quint\"] = `cubic-bezier(0.755, 0.050, 0.855, 0.060)`] = \"Quint\";\n EaseIn[EaseIn[\"Sine\"] = `cubic-bezier(0.470, 0.000, 0.745, 0.715)`] = \"Sine\";\n EaseIn[EaseIn[\"Expo\"] = `cubic-bezier(0.950, 0.050, 0.795, 0.035)`] = \"Expo\";\n EaseIn[EaseIn[\"Circ\"] = `cubic-bezier(0.600, 0.040, 0.980, 0.335)`] = \"Circ\";\n EaseIn[EaseIn[\"Back\"] = `cubic-bezier(0.600, -0.280, 0.735, 0.045)`] = \"Back\";\n})(EaseIn || (EaseIn = {}));\nvar EaseOut;\n(function (EaseOut) {\n EaseOut[EaseOut[\"Quad\"] = `cubic-bezier(0.250, 0.460, 0.450, 0.940)`] = \"Quad\";\n EaseOut[EaseOut[\"Cubic\"] = `cubic-bezier(0.215, 0.610, 0.355, 1.000)`] = \"Cubic\";\n EaseOut[EaseOut[\"Quart\"] = `cubic-bezier(0.165, 0.840, 0.440, 1.000)`] = \"Quart\";\n EaseOut[EaseOut[\"Quint\"] = `cubic-bezier(0.230, 1.000, 0.320, 1.000)`] = \"Quint\";\n EaseOut[EaseOut[\"Sine\"] = `cubic-bezier(0.390, 0.575, 0.565, 1.000)`] = \"Sine\";\n EaseOut[EaseOut[\"Expo\"] = `cubic-bezier(0.190, 1.000, 0.220, 1.000)`] = \"Expo\";\n EaseOut[EaseOut[\"Circ\"] = `cubic-bezier(0.075, 0.820, 0.165, 1.000)`] = \"Circ\";\n EaseOut[EaseOut[\"Back\"] = `cubic-bezier(0.175, 0.885, 0.320, 1.275)`] = \"Back\";\n})(EaseOut || (EaseOut = {}));\nvar EaseInOut;\n(function (EaseInOut) {\n EaseInOut[EaseInOut[\"Quad\"] = `cubic-bezier(0.455, 0.030, 0.515, 0.955)`] = \"Quad\";\n EaseInOut[EaseInOut[\"Cubic\"] = `cubic-bezier(0.645, 0.045, 0.355, 1.000)`] = \"Cubic\";\n EaseInOut[EaseInOut[\"Quart\"] = `cubic-bezier(0.770, 0.000, 0.175, 1.000)`] = \"Quart\";\n EaseInOut[EaseInOut[\"Quint\"] = `cubic-bezier(0.860, 0.000, 0.070, 1.000)`] = \"Quint\";\n EaseInOut[EaseInOut[\"Sine\"] = `cubic-bezier(0.445, 0.050, 0.550, 0.950)`] = \"Sine\";\n EaseInOut[EaseInOut[\"Expo\"] = `cubic-bezier(1.000, 0.000, 0.000, 1.000)`] = \"Expo\";\n EaseInOut[EaseInOut[\"Circ\"] = `cubic-bezier(0.785, 0.135, 0.150, 0.860)`] = \"Circ\";\n EaseInOut[EaseInOut[\"Back\"] = `cubic-bezier(0.680, -0.550, 0.265, 1.550)`] = \"Back\";\n})(EaseInOut || (EaseInOut = {}));\n\nconst base$3 = [\n style({\n opacity: `{{startOpacity}}`\n }),\n animate(`{{duration}} {{delay}} {{easing}}`, style({\n opacity: `{{endOpacity}}`\n }))\n];\nconst baseParams$3 = {\n delay: '0s',\n duration: '350ms',\n easing: EaseOut.Sine,\n endOpacity: 1,\n startOpacity: 0\n};\nconst fadeIn = animation(base$3, {\n params: baseParams$3\n});\nconst fadeOut = animation(base$3, {\n params: {\n delay: '0s',\n duration: '350ms',\n easing: EaseOut.Sine,\n endOpacity: 0,\n startOpacity: 1\n }\n});\n\nconst baseRecipe$2 = [\n style({\n backfaceVisibility: 'hidden',\n transformStyle: 'preserve-3d'\n }),\n animate(`{{duration}} {{delay}} {{easing}}`, keyframes([\n style({\n offset: 0,\n transform: `translateZ({{startDistance}})\n rotate3d({{rotateX}}, {{rotateY}}, {{rotateZ}}, {{startAngle}}deg)`\n }),\n style({\n offset: 1,\n transform: `translateZ({{endDistance}})\n rotate3d({{rotateX}}, {{rotateY}}, {{rotateZ}}, {{endAngle}}deg)`\n })\n ]))\n];\nconst baseParams$2 = {\n delay: '0s',\n duration: '600ms',\n easing: EaseOut.Quad,\n endAngle: 180,\n endDistance: '0px',\n rotateX: 1,\n rotateY: 0,\n rotateZ: 0,\n startAngle: 0,\n startDistance: '0px'\n};\nconst flipTop = animation(baseRecipe$2, {\n params: Object.assign({}, baseParams$2)\n});\nconst flipBottom = animation(baseRecipe$2, {\n params: Object.assign(Object.assign({}, baseParams$2), { endAngle: -180 })\n});\nconst flipLeft = animation(baseRecipe$2, {\n params: Object.assign(Object.assign({}, baseParams$2), { rotateX: 0, rotateY: 1 })\n});\nconst flipRight = animation(baseRecipe$2, {\n params: Object.assign(Object.assign({}, baseParams$2), { endAngle: -180, rotateX: 0, rotateY: 1 })\n});\nconst flipHorFwd = animation(baseRecipe$2, {\n params: Object.assign(Object.assign({}, baseParams$2), { endDistance: '170px' })\n});\nconst flipHorBck = animation(baseRecipe$2, {\n params: Object.assign(Object.assign({}, baseParams$2), { endDistance: '-170px' })\n});\nconst flipVerFwd = animation(baseRecipe$2, {\n params: Object.assign(Object.assign({}, baseParams$2), { endDistance: '170px', rotateX: 0, rotateY: 1 })\n});\nconst flipVerBck = animation(baseRecipe$2, {\n params: Object.assign(Object.assign({}, baseParams$2), { endDistance: '-170px', rotateX: 0, rotateY: 1 })\n});\n\nconst baseRecipe$1 = [\n style({\n opacity: `{{startOpacity}}`,\n transform: `rotate3d({{rotateX}},{{rotateY}},{{rotateZ}},{{startAngle}}deg)`,\n transformOrigin: `{{xPos}} {{yPos}}`\n }),\n animate(`{{duration}} {{delay}} {{easing}}`, style({\n offset: 0,\n opacity: `{{endOpacity}}`,\n transform: `rotate3d({{rotateX}},{{rotateY}},{{rotateZ}},{{endAngle}}deg)`,\n transformOrigin: `{{xPos}} {{yPos}}`\n }))\n];\nconst baseInParams$2 = {\n delay: '0s',\n duration: '600ms',\n easing: EaseOut.Quad,\n endAngle: 0,\n endOpacity: 1,\n rotateX: 0,\n rotateY: 0,\n rotateZ: 1,\n startAngle: -360,\n startOpacity: 0,\n xPos: 'center',\n yPos: 'center'\n};\nconst baseOutParams$2 = Object.assign(Object.assign({}, baseInParams$2), { easing: EaseIn.Quad, endOpacity: 0, startOpacity: 1 });\nconst rotateInCenter = animation(baseRecipe$1, {\n params: Object.assign({}, baseInParams$2)\n});\nconst rotateOutCenter = animation(baseRecipe$1, {\n params: Object.assign({}, baseOutParams$2)\n});\nconst rotateInTop = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseInParams$2), { xPos: 'top' })\n});\nconst rotateOutTop = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseOutParams$2), { xPos: 'top' })\n});\nconst rotateInRight = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseInParams$2), { xPos: 'right' })\n});\nconst rotateOutRight = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseOutParams$2), { xPos: 'right' })\n});\nconst rotateInBottom = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseInParams$2), { xPos: 'bottom' })\n});\nconst rotateOutBottom = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseOutParams$2), { xPos: 'bottom' })\n});\nconst rotateInLeft = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseInParams$2), { xPos: 'left' })\n});\nconst rotateOutLeft = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseOutParams$2), { xPos: 'left' })\n});\nconst rotateInTr = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseInParams$2), { xPos: 'right', yPos: 'top' })\n});\nconst rotateOutTr = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseOutParams$2), { xPos: 'right', yPos: 'top' })\n});\nconst rotateInBr = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseInParams$2), { xPos: 'right', yPos: 'bottom' })\n});\nconst rotateOutBr = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseOutParams$2), { xPos: 'right', yPos: 'bottom' })\n});\nconst rotateInBl = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseInParams$2), { xPos: 'left', yPos: 'bottom' })\n});\nconst rotateOutBl = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseOutParams$2), { xPos: 'left', yPos: 'bottom' })\n});\nconst rotateInTl = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseInParams$2), { xPos: 'left', yPos: 'top' })\n});\nconst rotateOutTl = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseOutParams$2), { xPos: 'left', yPos: 'top' })\n});\nconst rotateInDiagonal1 = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseInParams$2), { rotateX: 1, rotateY: 1, rotateZ: 0 })\n});\nconst rotateOutDiagonal1 = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseOutParams$2), { rotateX: 1, rotateY: 1, rotateZ: 0 })\n});\nconst rotateInDiagonal2 = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseInParams$2), { rotateX: -1, rotateY: 1, rotateZ: 0 })\n});\nconst rotateOutDiagonal2 = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseOutParams$2), { rotateX: -1, rotateY: 1, rotateZ: 0 })\n});\nconst rotateInHor = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseInParams$2), { rotateX: 0, rotateY: 1, rotateZ: 0 })\n});\nconst rotateOutHor = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseOutParams$2), { rotateX: 0, rotateY: 1, rotateZ: 0 })\n});\nconst rotateInVer = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseInParams$2), { rotateX: 1, rotateY: 0, rotateZ: 0 })\n});\nconst rotateOutVer = animation(baseRecipe$1, {\n params: Object.assign(Object.assign({}, baseOutParams$2), { rotateX: 1, rotateY: 0, rotateZ: 0 })\n});\n\nconst baseRecipe = [\n animate(`{{duration}} {{delay}} {{easing}}`, keyframes([\n style({\n offset: 0,\n transform: `rotate(0deg) translate{{direction}}(0)`,\n transformOrigin: `{{xPos}} {{yPos}}`\n }),\n style({\n offset: 0.1,\n transform: `rotate({{endAngle}}deg) translate{{direction}}(-{{startDistance}})`\n }),\n style({\n offset: 0.2,\n transform: `rotate(-{{startAngle}}deg) translate{{direction}}({{startDistance}})`\n }),\n style({\n offset: 0.3,\n transform: `rotate({{startAngle}}deg) translate{{direction}}(-{{startDistance}})`\n }),\n style({\n offset: 0.4,\n transform: `rotate(-{{startAngle}}deg) translate{{direction}}({{startDistance}})`\n }),\n style({\n offset: 0.5,\n transform: `rotate({{startAngle}}deg) translate{{direction}}(-{{startDistance}})`\n }),\n style({\n offset: 0.6,\n transform: `rotate(-{{startAngle}}deg) translate{{direction}}({{startDistance}})`\n }),\n style({\n offset: 0.7,\n transform: `rotate({{startAngle}}deg) translate{{direction}}(-{{startDistance}})`\n }),\n style({\n offset: 0.8,\n transform: `rotate(-{{endAngle}}deg) translate{{direction}}({{endDistance}})`\n }),\n style({\n offset: 0.9,\n transform: `rotate({{endAngle}}deg) translate{{direction}}(-{{endDistance}})`\n }),\n style({\n offset: 1,\n transform: `rotate(0deg) translate{{direction}}(0)`,\n transformOrigin: `{{xPos}} {{yPos}}`\n })\n ]))\n];\nconst baseParams$1 = {\n delay: '0s',\n direction: 'X',\n duration: '800ms',\n easing: EaseInOut.Quad,\n endAngle: 0,\n endDistance: '8px',\n startAngle: 0,\n startDistance: '10px',\n xPos: 'center',\n yPos: 'center'\n};\nconst shakeHor = animation(baseRecipe, {\n params: Object.assign(Object.assign({}, baseParams$1), { direction: 'X' })\n});\nconst shakeVer = animation(baseRecipe, {\n params: Object.assign(Object.assign({}, baseParams$1), { direction: 'Y' })\n});\nconst shakeTop = animation(baseRecipe, {\n params: Object.assign(Object.assign({}, baseParams$1), { endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', yPos: 'top' })\n});\nconst shakeBottom = animation(baseRecipe, {\n params: Object.assign(Object.assign({}, baseParams$1), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', yPos: 'bottom' })\n});\nconst shakeRight = animation(baseRecipe, {\n params: Object.assign(Object.assign({}, baseParams$1), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', xPos: 'right', yPos: 'center' })\n});\nconst shakeLeft = animation(baseRecipe, {\n params: Object.assign(Object.assign({}, baseParams$1), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', xPos: 'left', yPos: 'center' })\n});\nconst shakeCenter = animation(baseRecipe, {\n params: Object.assign(Object.assign({}, baseParams$1), { direction: 'Y', endAngle: 8, endDistance: '0', startAngle: 10, startDistance: '0', xPos: 'center', yPos: 'center' })\n});\nconst shakeTr = animation(baseRecipe, {\n params: Object.assign(Object.assign({}, baseParams$1), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', xPos: 'right', yPos: 'top' })\n});\nconst shakeBr = animation(baseRecipe, {\n params: Object.assign(Object.assign({}, baseParams$1), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', xPos: 'right', yPos: 'bottom' })\n});\nconst shakeBl = animation(baseRecipe, {\n params: Object.assign(Object.assign({}, baseParams$1), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', xPos: 'left', yPos: 'bottom' })\n});\nconst shakeTl = animation(baseRecipe, {\n params: Object.assign(Object.assign({}, baseParams$1), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', xPos: 'left', yPos: 'top' })\n});\n\nconst heartbeatBase = [\n style({\n animationTimingFunction: `ease-out`,\n transform: `scale(1)`,\n transformOrigin: `center center`\n }),\n animate(`{{duration}} {{delay}} {{easing}}`, keyframes([\n style({\n animationTimingFunction: `ease-in`,\n offset: 0.1,\n transform: `scale(0.91)`\n }),\n style({\n animationTimingFunction: `ease-out`,\n offset: 0.17,\n transform: `scale(0.98)`\n }),\n style({\n animationTimingFunction: `ease-in`,\n offset: 0.33,\n transform: `scale(0.87)`\n }),\n style({\n animationTimingFunction: `ease-out`,\n offset: 0.45,\n transform: `scale(1)`\n })\n ]))\n];\nconst heartbeatParams = {\n delay: '0s',\n duration: '1.5s',\n easing: 'ease-in-out'\n};\nconst pulsateBase = [\n animate(`{{duration}} {{delay}} {{easing}}`, keyframes([\n style({\n offset: 0,\n transform: `scale({{fromScale}})`\n }),\n style({\n offset: 0.5,\n transform: `scale({{toScale}})`\n }),\n style({\n offset: 1,\n transform: `scale({{fromScale}})`\n })\n ]))\n];\nconst pulsateParams = {\n delay: '0s',\n duration: '.5s',\n easing: 'ease-in-out',\n fromScale: 1,\n toScale: 1.1\n};\nconst blinkBase = [\n animate(`{{duration}} {{delay}} {{easing}}`, keyframes([\n style({\n offset: 0,\n opacity: .8,\n transform: `scale({{fromScale}})`\n }),\n style({\n offset: 0.8,\n opacity: 0,\n transform: `scale({{midScale}})`\n }),\n style({\n offset: 1,\n opacity: 0,\n transform: `scale({{toScale}})`\n })\n ]))\n];\nconst blinkParams = {\n delay: '0s',\n duration: '.8s',\n easing: 'ease-in-out',\n fromScale: .2,\n midScale: 1.2,\n toScale: 2.2\n};\nconst pulsateFwd = animation(pulsateBase, {\n params: Object.assign({}, pulsateParams)\n});\nconst pulsateBck = animation(pulsateBase, {\n params: Object.assign(Object.assign({}, pulsateParams), { toScale: .9 })\n});\nconst heartbeat = animation(heartbeatBase, {\n params: Object.assign({}, heartbeatParams)\n});\nconst blink = animation(blinkBase, {\n params: Object.assign({}, blinkParams)\n});\n\nconst base$2 = [\n style({\n opacity: `{{startOpacity}}`,\n transform: `scale{{direction}}({{fromScale}})`,\n transformOrigin: `{{xPos}} {{yPos}}`\n }),\n animate(`{{duration}} {{delay}} {{easing}}`, style({\n opacity: `{{endOpacity}}`,\n transform: `scale{{direction}}({{toScale}})`,\n transformOrigin: `{{xPos}} {{yPos}}`\n }))\n];\nconst baseInParams$1 = {\n delay: '0s',\n direction: '',\n duration: '350ms',\n easing: EaseOut.Quad,\n endOpacity: 1,\n fromScale: .5,\n startOpacity: 0,\n toScale: 1,\n xPos: '50%',\n yPos: '50%'\n};\nconst baseOutParams$1 = Object.assign(Object.assign({}, baseInParams$1), { easing: EaseOut.Sine, endOpacity: 0, fromScale: 1, startOpacity: 1, toScale: .5 });\nconst scaleInCenter = animation(base$2, { params: baseInParams$1 });\nconst scaleInBl = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { xPos: '0', yPos: '100%' })\n});\nconst scaleInVerCenter = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { direction: 'Y', fromScale: .4 })\n});\nconst scaleInTop = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { xPos: '50%', yPos: '0' })\n});\nconst scaleInLeft = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { xPos: '0', yPos: '50%' })\n});\nconst scaleInVerTop = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { direction: 'Y', fromScale: .4, xPos: '100%', yPos: '0' })\n});\nconst scaleInTr = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { xPos: '100%', yPos: '0' })\n});\nconst scaleInTl = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { xPos: '0', yPos: '0' })\n});\nconst scaleInVerBottom = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { direction: 'Y', fromScale: .4, xPos: '0', yPos: '100%' })\n});\nconst scaleInRight = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { xPos: '100%', yPos: '50%' })\n});\nconst scaleInHorCenter = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { direction: 'X', fromScale: .4 })\n});\nconst scaleInBr = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { xPos: '100%', yPos: '100%' })\n});\nconst scaleInHorLeft = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { direction: 'X', fromScale: .4, xPos: '0', yPos: '0' })\n});\nconst scaleInBottom = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { xPos: '50%', yPos: '100%' })\n});\nconst scaleInHorRight = animation(base$2, {\n params: Object.assign(Object.assign({}, baseInParams$1), { direction: 'X', fromScale: .4, xPos: '100%', yPos: '100%' })\n});\nconst scaleOutCenter = animation(base$2, { params: baseOutParams$1 });\nconst scaleOutBl = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { xPos: '0', yPos: '100%' })\n});\nconst scaleOutBr = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { xPos: '100%', yPos: '100%' })\n});\nconst scaleOutVerCenter = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { direction: 'Y', toScale: .3 })\n});\nconst scaleOutVerTop = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { direction: 'Y', toScale: .3, xPos: '100%', yPos: '0' })\n});\nconst scaleOutVerBottom = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { direction: 'Y', toScale: .3, xPos: '0', yPos: '100%' })\n});\nconst scaleOutTop = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { xPos: '50%', yPos: '0' })\n});\nconst scaleOutLeft = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { xPos: '0', yPos: '50%' })\n});\nconst scaleOutTr = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { xPos: '100%', yPos: '0' })\n});\nconst scaleOutTl = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { xPos: '0', yPos: '0' })\n});\nconst scaleOutRight = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { xPos: '100%', yPos: '50%' })\n});\nconst scaleOutBottom = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { xPos: '50%', yPos: '100%' })\n});\nconst scaleOutHorCenter = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { direction: 'X', toScale: .3 })\n});\nconst scaleOutHorLeft = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { direction: 'X', toScale: .3, xPos: '0', yPos: '0' })\n});\nconst scaleOutHorRight = animation(base$2, {\n params: Object.assign(Object.assign({}, baseOutParams$1), { direction: 'X', toScale: .3, xPos: '100%', yPos: '100%' })\n});\n\nconst base$1 = [\n style({\n opacity: `{{startOpacity}}`,\n transform: `{{fromPosition}}`\n }),\n animate(`{{duration}} {{delay}} {{easing}}`, style({\n opacity: `{{endOpacity}}`,\n transform: `{{toPosition}}`\n }))\n];\nconst baseInParams = {\n delay: '0s',\n duration: '350ms',\n easing: EaseOut.Quad,\n endOpacity: 1,\n fromPosition: 'translateY(-500px)',\n startOpacity: 0,\n toPosition: 'translateY(0)'\n};\nconst baseOutParams = {\n delay: '0s',\n duration: '350ms',\n easing: EaseIn.Quad,\n endOpacity: 0,\n fromPosition: 'translateY(0)',\n startOpacity: 1,\n toPosition: 'translateY(-500px)'\n};\nconst slideInTop = animation(base$1, { params: baseInParams });\nconst slideInLeft = animation(base$1, {\n params: {\n delay: '0s',\n duration: '350ms',\n easing: EaseOut.Quad,\n endOpacity: 1,\n fromPosition: 'translateX(-500px)',\n startOpacity: 0,\n toPosition: 'translateY(0)'\n }\n});\nconst slideInRight = animation(base$1, {\n params: {\n delay: '0s',\n duration: '350ms',\n easing: EaseOut.Quad,\n endOpacity: 1,\n fromPosition: 'translateX(500px)',\n startOpacity: 0,\n toPosition: 'translateY(0)'\n }\n});\nconst slideInBottom = animation(base$1, {\n params: {\n delay: '0s',\n duration: '350ms',\n easing: EaseOut.Quad,\n endOpacity: 1,\n fromPosition: 'translateY(500px)',\n startOpacity: 0,\n toPosition: 'translateY(0)'\n }\n});\nconst slideInTr = animation(base$1, {\n params: Object.assign(Object.assign({}, baseInParams), { fromPosition: 'translateY(-500px) translateX(500px)', toPosition: 'translateY(0) translateX(0)' })\n});\nconst slideInTl = animation(base$1, {\n params: Object.assign(Object.assign({}, baseInParams), { fromPosition: 'translateY(-500px) translateX(-500px)', toPosition: 'translateY(0) translateX(0)' })\n});\nconst slideInBr = animation(base$1, {\n params: Object.assign(Object.assign({}, baseInParams), { fromPosition: 'translateY(500px) translateX(500px)', toPosition: 'translateY(0) translateX(0)' })\n});\nconst slideInBl = animation(base$1, {\n params: Object.assign(Object.assign({}, baseInParams), { fromPosition: 'translateY(500px) translateX(-500px)', toPosition: 'translateY(0) translateX(0)' })\n});\nconst slideOutTop = animation(base$1, { params: baseOutParams });\nconst slideOutRight = animation(base$1, {\n params: Object.assign(Object.assign({}, baseOutParams), { toPosition: 'translateX(500px)' })\n});\nconst slideOutBottom = animation(base$1, {\n params: {\n delay: '0s',\n duration: '350ms',\n easing: EaseIn.Quad,\n endOpacity: 0,\n fromPosition: 'translateY(0)',\n startOpacity: 1,\n toPosition: 'translateY(500px)'\n }\n});\nconst slideOutLeft = animation(base$1, {\n params: Object.assign(Object.assign({}, baseOutParams), { toPosition: 'translateX(-500px)' })\n});\nconst slideOutTr = animation(base$1, {\n params: Object.assign(Object.assign({}, baseOutParams), { fromPosition: 'translateY(0) translateX(0)', toPosition: 'translateY(-500px) translateX(500px)' })\n});\nconst slideOutBr = animation(base$1, {\n params: Object.assign(Object.assign({}, baseOutParams), { fromPosition: 'translateY(0) translateX(0)', toPosition: 'translateY(500px) translateX(500px)' })\n});\nconst slideOutBl = animation(base$1, {\n params: Object.assign(Object.assign({}, baseOutParams), { fromPosition: 'translateY(0) translateX(0)', toPosition: 'translateY(500px) translateX(-500px)' })\n});\nconst slideOutTl = animation(base$1, {\n params: Object.assign(Object.assign({}, baseOutParams), { fromPosition: 'translateY(0) translateX(0)', toPosition: 'translateY(-500px) translateX(-500px)' })\n});\n\nconst swingBase = [\n style({\n opacity: `{{startOpacity}}`,\n transform: `rotate{{direction}}({{startAngle}}deg)`,\n transformOrigin: `{{xPos}} {{yPos}}`\n }),\n animate(`{{duration}} {{delay}} {{easing}}`, style({\n opacity: `{{endOpacity}}`,\n transform: `rotate{{direction}}({{endAngle}}deg)`,\n transformOrigin: `{{xPos}} {{yPos}}`\n }))\n];\nconst swingParams = {\n delay: '0s',\n direction: 'X',\n duration: '.5s',\n easing: EaseOut.Back,\n endAngle: 0,\n endOpacity: 1,\n startAngle: -100,\n startOpacity: 0,\n xPos: 'top',\n yPos: 'center'\n};\nconst swingOutParams = Object.assign(Object.assign({}, swingParams), { duration: '.55s', easing: EaseIn.Back, endAngle: 70, endOpacity: 0, startAngle: 0, startOpacity: 1 });\nconst swingInTopFwd = animation(swingBase, {\n params: Object.assign({}, swingParams)\n});\nconst swingInRightFwd = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingParams), { direction: 'Y', xPos: 'center', yPos: 'right' })\n});\nconst swingInBottomFwd = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingParams), { startAngle: 100, xPos: 'bottom' })\n});\nconst swingInLeftFwd = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingParams), { direction: 'Y', startAngle: 100, xPos: 'center', yPos: 'left' })\n});\nconst swingInTopBck = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingParams), { duration: '.6s', startAngle: 70 })\n});\nconst swingInRightBck = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingParams), { direction: 'Y', duration: '.6s', startAngle: 70, xPos: 'center', yPos: 'right' })\n});\nconst swingInBottomBck = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingParams), { duration: '.6s', startAngle: -70, xPos: 'bottom' })\n});\nconst swingInLeftBck = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingParams), { direction: 'Y', duration: '.6s', startAngle: -70, xPos: 'center', yPos: 'left' })\n});\nconst swingOutTopFwd = animation(swingBase, {\n params: Object.assign({}, swingOutParams)\n});\nconst swingOutRightFwd = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingOutParams), { direction: 'Y', xPos: 'center', yPos: 'right' })\n});\nconst swingOutBottomFwd = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingOutParams), { endAngle: -70, xPos: 'bottom' })\n});\nconst swingOutLefttFwd = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingOutParams), { direction: 'Y', endAngle: -70, xPos: 'center', yPos: 'left' })\n});\nconst swingOutTopBck = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingOutParams), { duration: '.45s', endAngle: -100 })\n});\nconst swingOutRightBck = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingOutParams), { direction: 'Y', duration: '.45s', endAngle: -100, xPos: 'center', yPos: 'right' })\n});\nconst swingOutBottomBck = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingOutParams), { duration: '.45s', endAngle: 100, xPos: 'bottom' })\n});\nconst swingOutLeftBck = animation(swingBase, {\n params: Object.assign(Object.assign({}, swingOutParams), { direction: 'Y', duration: '.45s', endAngle: 100, xPos: 'center', yPos: 'left' })\n});\n\nconst base = [\n style({\n opacity: `{{ startOpacity }}`,\n height: `{{ startHeight }}`,\n paddingBlock: `{{ startPadding }}`\n }),\n animate(`{{duration}} {{delay}} {{easing}}`, style({\n opacity: `{{ endOpacity }}`,\n height: `{{ endHeight }}`,\n paddingBlock: `{{ endPadding }}`\n }))\n];\nconst baseParams = {\n delay: '0s',\n duration: '350ms',\n easing: EaseIn.Quad,\n startOpacity: 0,\n endOpacity: 1,\n startHeight: '',\n endHeight: '',\n startPadding: '',\n endPadding: '',\n};\nconst growVerIn = animation(base, {\n params: Object.assign(Object.assign({}, baseParams), { easing: EaseOut.Quad, startOpacity: 0, endOpacity: 1, startHeight: '0px', endHeight: '*', startPadding: '0px', endPadding: '*' })\n});\nconst growVerOut = animation(base, {\n params: Object.assign(Object.assign({}, baseParams), { easing: EaseOut.Quad, startOpacity: 1, endOpacity: 0, startHeight: '*', endHeight: '0px', startPadding: '*', endPadding: '0px' })\n});\n\n/**\n * Common service to be injected between components where those implementing common\n * ToggleView interface can register and toggle directives can call their methods.\n * TODO: Track currently active? Events?\n */\nclass IgxNavigationService {\n constructor() {\n this.navs = {};\n }\n add(id, navItem) {\n this.navs[id] = navItem;\n }\n remove(id) {\n delete this.navs[id];\n }\n get(id) {\n if (id) {\n return this.navs[id];\n }\n }\n toggle(id, ...args) {\n if (this.navs[id]) {\n return this.navs[id].toggle(...args);\n }\n }\n open(id, ...args) {\n if (this.navs[id]) {\n return this.navs[id].open(...args);\n }\n }\n close(id, ...args) {\n if (this.navs[id]) {\n return this.navs[id].close(...args);\n }\n }\n}\nIgxNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIgxNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return []; } });\n\n/**\n * Directive that can toggle targets through provided NavigationService.\n *\n * Usage:\n * ```\n * \n * ```\n * Where the `ID` matches the ID of compatible `IToggleView` component.\n */\nclass IgxNavigationToggleDirective {\n constructor(nav) {\n this.state = nav;\n }\n toggleNavigationDrawer() {\n this.state.toggle(this.target, true);\n }\n}\nIgxNavigationToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationToggleDirective, deps: [{ token: IgxNavigationService }], target: i0.ɵɵFactoryTarget.Directive });\nIgxNavigationToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxNavigationToggleDirective, selector: \"[igxNavToggle]\", inputs: { target: [\"igxNavToggle\", \"target\"] }, host: { listeners: { \"click\": \"toggleNavigationDrawer()\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationToggleDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxNavToggle]' }]\n }], ctorParameters: function () { return [{ type: IgxNavigationService }]; }, propDecorators: { target: [{\n type: Input,\n args: ['igxNavToggle']\n }], toggleNavigationDrawer: [{\n type: HostListener,\n args: ['click']\n }] } });\n/**\n * Directive that can close targets through provided NavigationService.\n *\n * Usage:\n * ```\n * \n * ```\n * Where the `ID` matches the ID of compatible `IToggleView` component.\n */\nclass IgxNavigationCloseDirective {\n constructor(nav) {\n this.state = nav;\n }\n closeNavigationDrawer() {\n this.state.close(this.target, true);\n }\n}\nIgxNavigationCloseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationCloseDirective, deps: [{ token: IgxNavigationService }], target: i0.ɵɵFactoryTarget.Directive });\nIgxNavigationCloseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxNavigationCloseDirective, selector: \"[igxNavClose]\", inputs: { target: [\"igxNavClose\", \"target\"] }, host: { listeners: { \"click\": \"closeNavigationDrawer()\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationCloseDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxNavClose]' }]\n }], ctorParameters: function () { return [{ type: IgxNavigationService }]; }, propDecorators: { target: [{\n type: Input,\n args: ['igxNavClose']\n }], closeNavigationDrawer: [{\n type: HostListener,\n args: ['click']\n }] } });\n/**\n * @hidden\n */\nclass IgxNavigationModule {\n}\nIgxNavigationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxNavigationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationModule, declarations: [IgxNavigationCloseDirective, IgxNavigationToggleDirective], exports: [IgxNavigationCloseDirective, IgxNavigationToggleDirective] });\nIgxNavigationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationModule, providers: [IgxNavigationService] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxNavigationCloseDirective, IgxNavigationToggleDirective],\n exports: [IgxNavigationCloseDirective, IgxNavigationToggleDirective],\n providers: [IgxNavigationService]\n }]\n }] });\n\n/* Copyright (c) 2014-2020 Denis Pushkarev\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE\n */\n// Note: Originally copied from core-js-pure package and modified. (https://github.com/zloirock/core-js)\nconst queue = {};\nlet counter = 0;\nlet eventListenerAdded = false;\nconst run = (id) => {\n if (queue.hasOwnProperty(id)) {\n const fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nconst listener = (event) => run(event.data);\n// Use function instead of arrow function to workaround an issue in codesandbox\nfunction setImmediate(cb, ...args) {\n if (window.setImmediate) {\n return window.setImmediate(cb);\n }\n if (!eventListenerAdded) {\n eventListenerAdded = true;\n window.addEventListener('message', listener, false);\n }\n queue[++counter] = () => {\n cb.apply(undefined, args);\n };\n const windowLocation = window.location;\n window.postMessage(counter + '', windowLocation.protocol + '//' + windowLocation.host);\n return counter;\n}\nfunction clearImmediate(id) {\n if (window.clearImmediate) {\n return window.clearImmediate(id);\n }\n delete queue[id];\n}\n\n/**\n * @hidden\n */\nconst showMessage = (message, isMessageShown) => {\n if (!isMessageShown && isDevMode()) {\n console.warn(message);\n }\n return true;\n};\nconst mkenum = (x) => x;\n/**\n *\n * @hidden @internal\n */\nconst getResizeObserver = () => window.ResizeObserver;\n/**\n * @hidden\n */\nconst cloneArray = (array, deep) => {\n const arr = [];\n if (!array) {\n return arr;\n }\n let i = array.length;\n while (i--) {\n arr[i] = deep ? cloneValue(array[i]) : array[i];\n }\n return arr;\n};\n/**\n * Doesn't clone leaf items\n *\n * @hidden\n */\nconst cloneHierarchicalArray = (array, childDataKey) => {\n const result = [];\n if (!array) {\n return result;\n }\n for (const item of array) {\n const clonedItem = cloneValue(item);\n if (Array.isArray(item[childDataKey])) {\n clonedItem[childDataKey] = cloneHierarchicalArray(clonedItem[childDataKey], childDataKey);\n }\n result.push(clonedItem);\n }\n return result;\n};\n/**\n * Creates an object with prototype from provided source and copies\n * all properties descriptors from provided source\n * @param obj Source to copy prototype and descriptors from\n * @returns New object with cloned prototype and property descriptors\n */\nconst copyDescriptors = (obj) => {\n if (obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n }\n};\n/**\n * Deep clones all first level keys of Obj2 and merges them to Obj1\n *\n * @param obj1 Object to merge into\n * @param obj2 Object to merge from\n * @returns Obj1 with merged cloned keys from Obj2\n * @hidden\n */\nconst mergeObjects = (obj1, obj2) => mergeWith(obj1, obj2, (objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return objValue = srcValue;\n }\n});\n/**\n * Creates deep clone of provided value.\n * Supports primitive values, dates and objects.\n * If passed value is array returns shallow copy of the array.\n *\n * @param value value to clone\n * @returns Deep copy of provided value\n * @hidden\n */\nconst cloneValue = (value) => {\n if (isDate(value)) {\n return new Date(value.getTime());\n }\n if (Array.isArray(value)) {\n return [...value];\n }\n if (value instanceof Map || value instanceof Set) {\n return value;\n }\n if (isObject(value)) {\n const result = {};\n for (const key of Object.keys(value)) {\n result[key] = cloneValue(value[key]);\n }\n return result;\n }\n return value;\n};\n/**\n * Parse provided input to Date.\n *\n * @param value input to parse\n * @returns Date if parse succeed or null\n * @hidden\n */\nconst parseDate = (value) => {\n // if value is Invalid Date return null\n if (isDate(value)) {\n return !isNaN(value.getTime()) ? value : null;\n }\n return value ? new Date(value) : null;\n};\n/**\n * Returns an array with unique dates only.\n *\n * @param columnValues collection of date values (might be numbers or ISO 8601 strings)\n * @returns collection of unique dates.\n * @hidden\n */\nconst uniqueDates = (columnValues) => columnValues.reduce((a, c) => {\n if (!a.cache[c.label]) {\n a.result.push(c);\n }\n a.cache[c.label] = true;\n return a;\n}, { result: [], cache: {} }).result;\n/**\n * Checks if provided variable is Object\n *\n * @param value Value to check\n * @returns true if provided variable is Object\n * @hidden\n */\nconst isObject = (value) => !!(value && value.toString() === '[object Object]');\n/**\n * Checks if provided variable is Date\n *\n * @param value Value to check\n * @returns true if provided variable is Date\n * @hidden\n */\nconst isDate = (value) => value instanceof Date;\n/**\n * Checks if the two passed arguments are equal\n * Currently supports date objects\n *\n * @param obj1\n * @param obj2\n * @returns: `boolean`\n * @hidden\n */\nconst isEqual = (obj1, obj2) => {\n if (isDate(obj1) && isDate(obj2)) {\n return obj1.getTime() === obj2.getTime();\n }\n return obj1 === obj2;\n};\n/**\n * Checks if provided variable is the value NaN\n *\n * @param value Value to check\n * @returns true if provided variable is NaN\n * @hidden\n */\nconst isNaNvalue = (value) => isNaN(value) && value !== undefined && typeof value !== 'string';\n/**\n * Utility service taking care of various utility functions such as\n * detecting browser features, general cross browser DOM manipulation, etc.\n *\n * @hidden @internal\n */\nclass PlatformUtil {\n constructor(platformId) {\n this.platformId = platformId;\n this.isBrowser = isPlatformBrowser(this.platformId);\n this.isIOS = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window);\n this.isFirefox = this.isBrowser && /Firefox[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent);\n this.isEdge = this.isBrowser && /Edge[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent);\n this.isChromium = this.isBrowser && (/Chrom|e?ium/g.test(navigator.userAgent) ||\n /Google Inc/g.test(navigator.vendor)) && !/Edge/g.test(navigator.userAgent);\n this.KEYMAP = mkenum({\n ENTER: 'Enter',\n SPACE: ' ',\n ESCAPE: 'Escape',\n ARROW_DOWN: 'ArrowDown',\n ARROW_UP: 'ArrowUp',\n ARROW_LEFT: 'ArrowLeft',\n ARROW_RIGHT: 'ArrowRight',\n END: 'End',\n HOME: 'Home',\n PAGE_DOWN: 'PageDown',\n PAGE_UP: 'PageUp',\n F2: 'F2',\n TAB: 'Tab',\n SEMICOLON: ';',\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values#editing_keys\n DELETE: 'Delete',\n BACKSPACE: 'Backspace',\n CONTROL: 'Control',\n X: 'x',\n Y: 'y',\n Z: 'z'\n });\n }\n /**\n * @hidden @internal\n * Returns the actual size of the node content, using Range\n * ```typescript\n * let range = document.createRange();\n * let column = this.grid.columnList.filter(c => c.field === 'ID')[0];\n *\n * let size = getNodeSizeViaRange(range, column.cells[0].nativeElement);\n *\n * @remarks\n * The last parameter is useful when the size of the element to measure is modified by a\n * parent element that has explicit size. In such cases the calculated size is never lower\n * and the function may instead remove the parent size while measuring to get the correct value.\n * ```\n */\n getNodeSizeViaRange(range, node, sizeHoldingNode) {\n let overflow = null;\n let nodeStyles;\n if (!this.isFirefox) {\n overflow = node.style.overflow;\n // we need that hack - otherwise content won't be measured correctly in IE/Edge\n node.style.overflow = 'visible';\n }\n if (sizeHoldingNode) {\n const style = sizeHoldingNode.style;\n nodeStyles = [style.width, style.minWidth, style.flexBasis];\n style.width = '';\n style.minWidth = '';\n style.flexBasis = '';\n }\n range.selectNodeContents(node);\n const scale = node.getBoundingClientRect().width / node.offsetWidth;\n const width = range.getBoundingClientRect().width / scale;\n if (!this.isFirefox) {\n // we need that hack - otherwise content won't be measured correctly in IE/Edge\n node.style.overflow = overflow;\n }\n if (sizeHoldingNode) {\n sizeHoldingNode.style.width = nodeStyles[0];\n sizeHoldingNode.style.minWidth = nodeStyles[1];\n sizeHoldingNode.style.flexBasis = nodeStyles[2];\n }\n return width;\n }\n /**\n * Returns true if the current keyboard event is an activation key (Enter/Space bar)\n *\n * @hidden\n * @internal\n *\n * @memberof PlatformUtil\n */\n isActivationKey(event) {\n return event.key === this.KEYMAP.ENTER || event.key === this.KEYMAP.SPACE;\n }\n /**\n * Returns true if the current keyboard event is a combination that closes the filtering UI of the grid. (Escape/Ctrl+Shift+L)\n *\n * @hidden\n * @internal\n * @param event\n * @memberof PlatformUtil\n */\n isFilteringKeyCombo(event) {\n return event.key === this.KEYMAP.ESCAPE || (event.ctrlKey && event.shiftKey && event.key.toLowerCase() === 'l');\n }\n /**\n * @hidden @internal\n */\n isLeftClick(event) {\n return event.button === 0;\n }\n /**\n * @hidden @internal\n */\n isNavigationKey(key) {\n return [\n this.KEYMAP.HOME, this.KEYMAP.END, this.KEYMAP.SPACE,\n this.KEYMAP.ARROW_DOWN, this.KEYMAP.ARROW_LEFT, this.KEYMAP.ARROW_RIGHT, this.KEYMAP.ARROW_UP\n ].includes(key);\n }\n}\nPlatformUtil.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: PlatformUtil, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });\nPlatformUtil.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: PlatformUtil, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: PlatformUtil, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }];\n } });\n/**\n * @hidden\n */\nconst flatten$1 = (arr) => {\n let result = [];\n arr.forEach(el => {\n result.push(el);\n if (el.children) {\n const children = Array.isArray(el.children) ? el.children : el.children.toArray();\n result = result.concat(flatten$1(children));\n }\n });\n return result;\n};\nconst HORIZONTAL_NAV_KEYS = new Set(['arrowleft', 'left', 'arrowright', 'right', 'home', 'end']);\nconst NAVIGATION_KEYS = new Set([\n 'down',\n 'up',\n 'left',\n 'right',\n 'arrowdown',\n 'arrowup',\n 'arrowleft',\n 'arrowright',\n 'home',\n 'end',\n 'space',\n 'spacebar',\n ' '\n]);\nconst ACCORDION_NAVIGATION_KEYS = new Set('up down arrowup arrowdown home end'.split(' '));\nconst ROW_EXPAND_KEYS = new Set('right down arrowright arrowdown'.split(' '));\nconst ROW_COLLAPSE_KEYS = new Set('left up arrowleft arrowup'.split(' '));\nconst ROW_ADD_KEYS = new Set(['+', 'add', '≠', '±', '=']);\nconst SUPPORTED_KEYS = new Set([...Array.from(NAVIGATION_KEYS),\n ...Array.from(ROW_ADD_KEYS), 'enter', 'f2', 'escape', 'esc', 'pagedown', 'pageup']);\nconst HEADER_KEYS = new Set([...Array.from(NAVIGATION_KEYS), 'escape', 'esc', 'l',\n /** This symbol corresponds to the Alt + L combination under MAC. */\n '¬']);\n/**\n * @hidden\n * @internal\n *\n * Creates a new ResizeObserver on `target` and returns it as an Observable.\n * Run the resizeObservable outside angular zone, because it patches the MutationObserver which causes an infinite loop.\n * Related issue: https://github.com/angular/angular/issues/31712\n */\nconst resizeObservable = (target) => new Observable((observer) => {\n const instance = new (getResizeObserver())((entries) => {\n observer.next(entries);\n });\n instance.observe(target);\n const unsubscribe = () => instance.disconnect();\n return unsubscribe;\n});\n/**\n * @hidden\n * @internal\n *\n * Compares two maps.\n */\nconst compareMaps = (map1, map2) => {\n if (!map2) {\n return !map1 ? true : false;\n }\n if (map1.size !== map2.size) {\n return false;\n }\n let match = true;\n const keys = Array.from(map2.keys());\n for (const key of keys) {\n if (map1.has(key)) {\n match = map1.get(key) === map2.get(key);\n }\n else {\n match = false;\n }\n if (!match) {\n break;\n }\n }\n return match;\n};\n/**\n *\n * Given a property access path in the format `x.y.z` resolves and returns\n * the value of the `z` property in the passed object.\n *\n * @hidden\n * @internal\n */\nconst resolveNestedPath = (obj, path) => {\n var _a;\n const parts = (_a = path === null || path === void 0 ? void 0 : path.split('.')) !== null && _a !== void 0 ? _a : [];\n let current = obj[parts.shift()];\n parts.forEach(prop => {\n if (current) {\n current = current[prop];\n }\n });\n return current;\n};\n/**\n *\n * Given a property access path in the format `x.y.z` and a value\n * this functions builds and returns an object following the access path.\n *\n * @example\n * ```typescript\n * console.log('x.y.z.', 42);\n * >> { x: { y: { z: 42 } } }\n * ```\n *\n * @hidden\n * @internal\n */\nconst reverseMapper = (path, value) => {\n var _a;\n const obj = {};\n const parts = (_a = path === null || path === void 0 ? void 0 : path.split('.')) !== null && _a !== void 0 ? _a : [];\n let _prop = parts.shift();\n let mapping;\n // Initial binding for first level bindings\n obj[_prop] = value;\n mapping = obj;\n parts.forEach(prop => {\n // Start building the hierarchy\n mapping[_prop] = {};\n // Go down a level\n mapping = mapping[_prop];\n // Bind the value and move the key\n mapping[prop] = value;\n _prop = prop;\n });\n return obj;\n};\nconst yieldingLoop = (count, chunkSize, callback, done) => {\n let i = 0;\n const chunk = () => {\n const end = Math.min(i + chunkSize, count);\n for (; i < end; ++i) {\n callback(i);\n }\n if (i < count) {\n setImmediate(chunk);\n }\n else {\n done();\n }\n };\n chunk();\n};\nconst isConstructor = (ref) => typeof ref === 'function' && Boolean(ref.prototype) && Boolean(ref.prototype.constructor);\nconst reverseAnimationResolver = (animation) => { var _a; return (_a = oppositeAnimation.get(animation)) !== null && _a !== void 0 ? _a : animation; };\nconst isHorizontalAnimation = (animation) => horizontalAnimations.includes(animation);\nconst isVerticalAnimation = (animation) => verticalAnimations.includes(animation);\nconst oppositeAnimation = new Map([\n [fadeIn, fadeIn],\n [fadeOut, fadeOut],\n [flipTop, flipBottom],\n [flipBottom, flipTop],\n [flipRight, flipLeft],\n [flipLeft, flipRight],\n [flipHorFwd, flipHorBck],\n [flipHorBck, flipHorFwd],\n [flipVerFwd, flipVerBck],\n [flipVerBck, flipVerFwd],\n [growVerIn, growVerIn],\n [growVerOut, growVerOut],\n [heartbeat, heartbeat],\n [pulsateFwd, pulsateBck],\n [pulsateBck, pulsateFwd],\n [blink, blink],\n [shakeHor, shakeHor],\n [shakeVer, shakeVer],\n [shakeTop, shakeTop],\n [shakeBottom, shakeBottom],\n [shakeRight, shakeRight],\n [shakeLeft, shakeLeft],\n [shakeCenter, shakeCenter],\n [shakeTr, shakeTr],\n [shakeBr, shakeBr],\n [shakeBl, shakeBl],\n [shakeTl, shakeTl],\n [rotateInCenter, rotateInCenter],\n [rotateOutCenter, rotateOutCenter],\n [rotateInTop, rotateInBottom],\n [rotateOutTop, rotateOutBottom],\n [rotateInRight, rotateInLeft],\n [rotateOutRight, rotateOutLeft],\n [rotateInLeft, rotateInRight],\n [rotateOutLeft, rotateOutRight],\n [rotateInBottom, rotateInTop],\n [rotateOutBottom, rotateOutTop],\n [rotateInTr, rotateInBl],\n [rotateOutTr, rotateOutBl],\n [rotateInBr, rotateInTl],\n [rotateOutBr, rotateOutTl],\n [rotateInBl, rotateInTr],\n [rotateOutBl, rotateOutTr],\n [rotateInTl, rotateInBr],\n [rotateOutTl, rotateOutBr],\n [rotateInDiagonal1, rotateInDiagonal1],\n [rotateOutDiagonal1, rotateOutDiagonal1],\n [rotateInDiagonal2, rotateInDiagonal2],\n [rotateOutDiagonal2, rotateOutDiagonal2],\n [rotateInHor, rotateInHor],\n [rotateOutHor, rotateOutHor],\n [rotateInVer, rotateInVer],\n [rotateOutVer, rotateOutVer],\n [scaleInTop, scaleInBottom],\n [scaleOutTop, scaleOutBottom],\n [scaleInRight, scaleInLeft],\n [scaleOutRight, scaleOutLeft],\n [scaleInBottom, scaleInTop],\n [scaleOutBottom, scaleOutTop],\n [scaleInLeft, scaleInRight],\n [scaleOutLeft, scaleOutRight],\n [scaleInCenter, scaleInCenter],\n [scaleOutCenter, scaleOutCenter],\n [scaleInTr, scaleInBl],\n [scaleOutTr, scaleOutBl],\n [scaleInBr, scaleInTl],\n [scaleOutBr, scaleOutTl],\n [scaleInBl, scaleInTr],\n [scaleOutBl, scaleOutTr],\n [scaleInTl, scaleInBr],\n [scaleOutTl, scaleOutBr],\n [scaleInVerTop, scaleInVerBottom],\n [scaleOutVerTop, scaleOutVerBottom],\n [scaleInVerBottom, scaleInVerTop],\n [scaleOutVerBottom, scaleOutVerTop],\n [scaleInVerCenter, scaleInVerCenter],\n [scaleOutVerCenter, scaleOutVerCenter],\n [scaleInHorCenter, scaleInHorCenter],\n [scaleOutHorCenter, scaleOutHorCenter],\n [scaleInHorLeft, scaleInHorRight],\n [scaleOutHorLeft, scaleOutHorRight],\n [scaleInHorRight, scaleInHorLeft],\n [scaleOutHorRight, scaleOutHorLeft],\n [slideInTop, slideInBottom],\n [slideOutTop, slideOutBottom],\n [slideInRight, slideInLeft],\n [slideOutRight, slideOutLeft],\n [slideInBottom, slideInTop],\n [slideOutBottom, slideOutTop],\n [slideInLeft, slideInRight],\n [slideOutLeft, slideOutRight],\n [slideInTr, slideInBl],\n [slideOutTr, slideOutBl],\n [slideInBr, slideInTl],\n [slideOutBr, slideOutTl],\n [slideInBl, slideInTr],\n [slideOutBl, slideOutTr],\n [slideInTl, slideInBr],\n [slideOutTl, slideOutBr],\n [swingInTopFwd, swingInBottomFwd],\n [swingOutTopFwd, swingOutBottomFwd],\n [swingInRightFwd, swingInLeftFwd],\n [swingOutRightFwd, swingOutLefttFwd],\n [swingInLeftFwd, swingInRightFwd],\n [swingOutLefttFwd, swingOutRightFwd],\n [swingInBottomFwd, swingInTopFwd],\n [swingOutBottomFwd, swingOutTopFwd],\n [swingInTopBck, swingInBottomBck],\n [swingOutTopBck, swingOutBottomBck],\n [swingInRightBck, swingInLeftBck],\n [swingOutRightBck, swingOutLeftBck],\n [swingInBottomBck, swingInTopBck],\n [swingOutBottomBck, swingOutTopBck],\n [swingInLeftBck, swingInRightBck],\n [swingOutLeftBck, swingOutRightBck],\n]);\nconst horizontalAnimations = [\n flipRight,\n flipLeft,\n flipVerFwd,\n flipVerBck,\n rotateInRight,\n rotateOutRight,\n rotateInLeft,\n rotateOutLeft,\n rotateInTr,\n rotateOutTr,\n rotateInBr,\n rotateOutBr,\n rotateInBl,\n rotateOutBl,\n rotateInTl,\n rotateOutTl,\n scaleInRight,\n scaleOutRight,\n scaleInLeft,\n scaleOutLeft,\n scaleInTr,\n scaleOutTr,\n scaleInBr,\n scaleOutBr,\n scaleInBl,\n scaleOutBl,\n scaleInTl,\n scaleOutTl,\n scaleInHorLeft,\n scaleOutHorLeft,\n scaleInHorRight,\n scaleOutHorRight,\n slideInRight,\n slideOutRight,\n slideInLeft,\n slideOutLeft,\n slideInTr,\n slideOutTr,\n slideInBr,\n slideOutBr,\n slideInBl,\n slideOutBl,\n slideInTl,\n slideOutTl,\n swingInRightFwd,\n swingOutRightFwd,\n swingInLeftFwd,\n swingOutLefttFwd,\n swingInRightBck,\n swingOutRightBck,\n swingInLeftBck,\n swingOutLeftBck,\n];\nconst verticalAnimations = [\n flipTop,\n flipBottom,\n flipHorFwd,\n flipHorBck,\n growVerIn,\n growVerOut,\n rotateInTop,\n rotateOutTop,\n rotateInBottom,\n rotateOutBottom,\n rotateInTr,\n rotateOutTr,\n rotateInBr,\n rotateOutBr,\n rotateInBl,\n rotateOutBl,\n rotateInTl,\n rotateOutTl,\n scaleInTop,\n scaleOutTop,\n scaleInBottom,\n scaleOutBottom,\n scaleInTr,\n scaleOutTr,\n scaleInBr,\n scaleOutBr,\n scaleInBl,\n scaleOutBl,\n scaleInTl,\n scaleOutTl,\n scaleInVerTop,\n scaleOutVerTop,\n scaleInVerBottom,\n scaleOutVerBottom,\n slideInTop,\n slideOutTop,\n slideInBottom,\n slideOutBottom,\n slideInTr,\n slideOutTr,\n slideInBr,\n slideOutBr,\n slideInBl,\n slideOutBl,\n slideInTl,\n slideOutTl,\n swingInTopFwd,\n swingOutTopFwd,\n swingInBottomFwd,\n swingOutBottomFwd,\n swingInTopBck,\n swingOutTopBck,\n swingInBottomBck,\n swingOutBottomBck,\n];\n/**\n * Similar to Angular's formatDate. However it will not throw on `undefined | null | ''` instead\n * coalescing to an empty string.\n */\nconst formatDate = (value, format, locale, timezone) => {\n if (value === null || value === undefined || value === '') {\n return '';\n }\n return formatDate$1(value, format, locale, timezone);\n};\nconst formatCurrency = new CurrencyPipe(undefined).transform;\n/** Converts pixel values to their rem counterparts for a base value */\nconst rem = (value) => {\n const base = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('font-size'));\n return Number(value) / base;\n};\n\nvar PagingError;\n(function (PagingError) {\n PagingError[PagingError[\"None\"] = 0] = \"None\";\n PagingError[PagingError[\"IncorrectPageIndex\"] = 1] = \"IncorrectPageIndex\";\n PagingError[PagingError[\"IncorrectRecordsPerPage\"] = 2] = \"IncorrectRecordsPerPage\";\n})(PagingError || (PagingError = {}));\n\nvar TransactionType;\n(function (TransactionType) {\n TransactionType[\"ADD\"] = \"add\";\n TransactionType[\"DELETE\"] = \"delete\";\n TransactionType[\"UPDATE\"] = \"update\";\n})(TransactionType || (TransactionType = {}));\nvar TransactionEventOrigin;\n(function (TransactionEventOrigin) {\n TransactionEventOrigin[\"UNDO\"] = \"undo\";\n TransactionEventOrigin[\"REDO\"] = \"redo\";\n TransactionEventOrigin[\"CLEAR\"] = \"clear\";\n TransactionEventOrigin[\"ADD\"] = \"add\";\n TransactionEventOrigin[\"END\"] = \"endPending\";\n})(TransactionEventOrigin || (TransactionEventOrigin = {}));\n\nvar SortingDirection;\n(function (SortingDirection) {\n SortingDirection[SortingDirection[\"None\"] = 0] = \"None\";\n SortingDirection[SortingDirection[\"Asc\"] = 1] = \"Asc\";\n SortingDirection[SortingDirection[\"Desc\"] = 2] = \"Desc\";\n})(SortingDirection || (SortingDirection = {}));\nclass DefaultSortingStrategy {\n constructor() { }\n static instance() {\n return this._instance || (this._instance = new this());\n }\n sort(data, fieldName, dir, ignoreCase, valueResolver, isDate, isTime) {\n const key = fieldName;\n const reverse = (dir === SortingDirection.Desc ? -1 : 1);\n const cmpFunc = (obj1, obj2) => this.compareObjects(obj1, obj2, key, reverse, ignoreCase, valueResolver, isDate, isTime);\n return this.arraySort(data, cmpFunc);\n }\n compareValues(a, b) {\n const an = (a === null || a === undefined);\n const bn = (b === null || b === undefined);\n if (an) {\n if (bn) {\n return 0;\n }\n return -1;\n }\n else if (bn) {\n return 1;\n }\n return a > b ? 1 : a < b ? -1 : 0;\n }\n compareObjects(obj1, obj2, key, reverse, ignoreCase, valueResolver, isDate, isTime) {\n let a = valueResolver.call(this, obj1, key, isDate, isTime);\n let b = valueResolver.call(this, obj2, key, isDate, isTime);\n if (ignoreCase) {\n a = a && a.toLowerCase ? a.toLowerCase() : a;\n b = b && b.toLowerCase ? b.toLowerCase() : b;\n }\n return reverse * this.compareValues(a, b);\n }\n arraySort(data, compareFn) {\n return data.sort(compareFn);\n }\n}\nDefaultSortingStrategy._instance = null;\nclass GroupMemberCountSortingStrategy {\n constructor() { }\n static instance() {\n return this._instance || (this._instance = new this());\n }\n sort(data, fieldName, dir) {\n const groupedArray = this.groupBy(data, fieldName);\n const reverse = (dir === SortingDirection.Desc ? -1 : 1);\n const cmpFunc = (a, b) => {\n return this.compareObjects(a, b, groupedArray, fieldName, reverse);\n };\n return data\n .sort((a, b) => a[fieldName].localeCompare(b[fieldName]))\n .sort(cmpFunc);\n }\n groupBy(data, key) {\n return data.reduce((acc, curr) => {\n (acc[curr[key]] = acc[curr[key]] || []).push(curr);\n return acc;\n }, {});\n }\n compareObjects(obj1, obj2, data, fieldName, reverse) {\n let firstItemValuesLength = data[obj1[fieldName]].length;\n let secondItemValuesLength = data[obj2[fieldName]].length;\n return reverse * (firstItemValuesLength - secondItemValuesLength);\n }\n}\nGroupMemberCountSortingStrategy._instance = null;\n\nconst isHierarchyMatch = (h1, h2, expressions) => {\n if (h1.length !== h2.length) {\n return false;\n }\n return h1.every((level, index) => {\n const expr = expressions.find(e => e.fieldName === level.fieldName);\n const comparer = expr.groupingComparer || DefaultSortingStrategy.instance().compareValues;\n return level.fieldName === h2[index].fieldName && comparer(level.value, h2[index].value) === 0;\n });\n};\nconst getHierarchy = (gRow) => {\n const hierarchy = [];\n if (gRow !== undefined && gRow.expression) {\n hierarchy.push({ fieldName: gRow.expression.fieldName, value: gRow.value });\n while (gRow.groupParent) {\n gRow = gRow.groupParent;\n hierarchy.unshift({ fieldName: gRow.expression.fieldName, value: gRow.value });\n }\n }\n return hierarchy;\n};\n\nconst DATE_TYPE = 'date';\nconst TIME_TYPE = 'time';\nconst DATE_TIME_TYPE = 'dateTime';\nconst STRING_TYPE = 'string';\nclass IgxSorting {\n sort(data, expressions, grid) {\n return this.sortDataRecursive(data, expressions, 0, grid);\n }\n groupDataRecursive(data, state, level, parent, metadata, grid = null, groupsRecords = [], fullResult = { data: [], metadata: [] }) {\n const expressions = state.expressions;\n const expansion = state.expansion;\n let i = 0;\n let result = [];\n while (i < data.length) {\n const column = grid ? grid.getColumnByName(expressions[level].fieldName) : null;\n const isDate = (column === null || column === void 0 ? void 0 : column.dataType) === DATE_TYPE || (column === null || column === void 0 ? void 0 : column.dataType) === DATE_TIME_TYPE;\n const isTime = (column === null || column === void 0 ? void 0 : column.dataType) === TIME_TYPE || (column === null || column === void 0 ? void 0 : column.dataType) === DATE_TIME_TYPE;\n const isString = (column === null || column === void 0 ? void 0 : column.dataType) === STRING_TYPE;\n const group = this.groupedRecordsByExpression(data, i, expressions[level], isDate, isTime, isString);\n const groupRow = {\n expression: expressions[level],\n level,\n records: cloneArray(group),\n value: this.getFieldValue(group[0], expressions[level].fieldName, isDate, isTime),\n groupParent: parent,\n groups: [],\n height: grid ? grid.renderedRowHeight : null,\n column\n };\n if (parent) {\n parent.groups.push(groupRow);\n }\n else {\n groupsRecords.push(groupRow);\n }\n const hierarchy = getHierarchy(groupRow);\n const expandState = expansion.find((s) => isHierarchyMatch(s.hierarchy || [{ fieldName: groupRow.expression.fieldName, value: groupRow.value }], hierarchy, expressions));\n const expanded = expandState ? expandState.expanded : state.defaultExpanded;\n let recursiveResult;\n result.push(groupRow);\n metadata.push(null);\n fullResult.data.push(groupRow);\n fullResult.metadata.push(null);\n if (level < expressions.length - 1) {\n recursiveResult = this.groupDataRecursive(group, state, level + 1, groupRow, expanded ? metadata : [], grid, groupsRecords, fullResult);\n if (expanded) {\n result = result.concat(recursiveResult);\n }\n }\n else {\n for (const groupItem of group) {\n fullResult.metadata.push(groupRow);\n fullResult.data.push(groupItem);\n }\n if (expanded) {\n metadata.push(...fullResult.metadata.slice(fullResult.metadata.length - group.length));\n result.push(...fullResult.data.slice(fullResult.data.length - group.length));\n }\n }\n i += group.length;\n }\n return result;\n }\n getFieldValue(obj, key, isDate = false, isTime = false) {\n let resolvedValue = resolveNestedPath(obj, key);\n const date = parseDate(resolvedValue);\n if (date && isDate && isTime) {\n resolvedValue = date;\n }\n else if (date && isDate && !isTime) {\n resolvedValue = new Date(date.setHours(0, 0, 0, 0));\n }\n else if (date && isTime && !isDate) {\n resolvedValue = new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return resolvedValue;\n }\n groupedRecordsByExpression(data, index, expression, isDate = false, isTime = false, isString, groupingComparer) {\n const res = [];\n const key = expression.fieldName;\n const len = data.length;\n const groupRecord = data[index];\n let groupval = this.getFieldValue(groupRecord, key, isDate, isTime);\n res.push(groupRecord);\n index++;\n const comparer = expression.groupingComparer || groupingComparer || DefaultSortingStrategy.instance().compareValues;\n for (let i = index; i < len; i++) {\n const currRec = data[i];\n let fieldValue = this.getFieldValue(currRec, key, isDate, isTime);\n if (expression.ignoreCase && isString) {\n // when column's dataType is string but the value is number\n fieldValue = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.toString().toLowerCase();\n groupval = groupval === null || groupval === void 0 ? void 0 : groupval.toString().toLowerCase();\n }\n if (comparer(fieldValue, groupval, currRec, groupRecord) === 0) {\n res.push(currRec);\n }\n else {\n break;\n }\n }\n return res;\n }\n sortDataRecursive(data, expressions, expressionIndex = 0, grid) {\n let i;\n let j;\n let gbData;\n let gbDataLen;\n const exprsLen = expressions.length;\n const dataLen = data.length;\n expressionIndex = expressionIndex || 0;\n if (expressionIndex >= exprsLen || dataLen <= 1) {\n return data;\n }\n const expr = expressions[expressionIndex];\n if (!expr.strategy) {\n expr.strategy = DefaultSortingStrategy.instance();\n }\n const column = grid === null || grid === void 0 ? void 0 : grid.getColumnByName(expr.fieldName);\n const isDate = (column === null || column === void 0 ? void 0 : column.dataType) === DATE_TYPE || (column === null || column === void 0 ? void 0 : column.dataType) === DATE_TIME_TYPE;\n const isTime = (column === null || column === void 0 ? void 0 : column.dataType) === TIME_TYPE || (column === null || column === void 0 ? void 0 : column.dataType) === DATE_TIME_TYPE;\n const isString = (column === null || column === void 0 ? void 0 : column.dataType) === STRING_TYPE;\n data = expr.strategy.sort(data, expr.fieldName, expr.dir, expr.ignoreCase, this.getFieldValue, isDate, isTime, grid);\n if (expressionIndex === exprsLen - 1) {\n return data;\n }\n // in case of multiple sorting\n for (i = 0; i < dataLen; i++) {\n gbData = this.groupedRecordsByExpression(data, i, expr, isDate, isTime, isString, column === null || column === void 0 ? void 0 : column.groupingComparer);\n gbDataLen = gbData.length;\n if (gbDataLen > 1) {\n gbData = this.sortDataRecursive(gbData, expressions, expressionIndex + 1, grid);\n }\n for (j = 0; j < gbDataLen; j++) {\n data[i + j] = gbData[j];\n }\n i += gbDataLen - 1;\n }\n return data;\n }\n}\nclass IgxGrouping extends IgxSorting {\n groupBy(data, state, grid, groupsRecords, fullResult = { data: [], metadata: [] }) {\n const metadata = [];\n const grouping = this.groupDataRecursive(data, state, 0, null, metadata, grid, groupsRecords, fullResult);\n return {\n data: grouping,\n metadata\n };\n }\n}\nclass NoopSortingStrategy {\n constructor() { }\n static instance() {\n return this._instance || (this._instance = new NoopSortingStrategy());\n }\n sort(data) {\n return data;\n }\n}\nNoopSortingStrategy._instance = null;\nclass IgxDataRecordSorting extends IgxSorting {\n getFieldValue(obj, key, isDate = false, isTime = false) {\n return super.getFieldValue(obj.data, key, isDate, isTime);\n }\n}\n\nclass DefaultDataCloneStrategy {\n clone(data) {\n return cloneValue(data);\n }\n}\n\n/**\n * @hidden\n */\nconst DataType = mkenum({\n String: 'string',\n Number: 'number',\n Boolean: 'boolean',\n Date: 'date',\n DateTime: 'dateTime',\n Time: 'time',\n Currency: 'currency',\n Percent: 'percent',\n Image: 'image'\n});\n/**\n * @hidden\n */\nconst GridColumnDataType = DataType;\n/**\n * @hidden\n */\nclass DataUtil {\n static sort(data, expressions, sorting = new IgxSorting(), grid) {\n return sorting.sort(data, expressions, grid);\n }\n static treeGridSort(hierarchicalData, expressions, sorting = new IgxDataRecordSorting(), parent, grid) {\n let res = [];\n hierarchicalData.forEach((hr) => {\n const rec = DataUtil.cloneTreeGridRecord(hr);\n rec.parent = parent;\n if (rec.children) {\n rec.children = DataUtil.treeGridSort(rec.children, expressions, sorting, rec, grid);\n }\n res.push(rec);\n });\n res = DataUtil.sort(res, expressions, sorting, grid);\n return res;\n }\n static cloneTreeGridRecord(hierarchicalRecord) {\n const rec = {\n key: hierarchicalRecord.key,\n data: hierarchicalRecord.data,\n children: hierarchicalRecord.children,\n isFilteredOutParent: hierarchicalRecord.isFilteredOutParent,\n level: hierarchicalRecord.level,\n expanded: hierarchicalRecord.expanded\n };\n return rec;\n }\n static group(data, state, grouping = new IgxGrouping(), grid = null, groupsRecords = [], fullResult = { data: [], metadata: [] }) {\n groupsRecords.splice(0, groupsRecords.length);\n return grouping.groupBy(data, state, grid, groupsRecords, fullResult);\n }\n static page(data, state, dataLength) {\n if (!state) {\n return data;\n }\n const len = dataLength !== undefined ? dataLength : data.length;\n const index = state.index;\n const res = [];\n const recordsPerPage = dataLength !== undefined && state.recordsPerPage > dataLength ? dataLength : state.recordsPerPage;\n state.metadata = {\n countPages: 0,\n countRecords: len,\n error: PagingError.None\n };\n if (index < 0 || isNaN(index)) {\n state.metadata.error = PagingError.IncorrectPageIndex;\n return res;\n }\n if (recordsPerPage <= 0 || isNaN(recordsPerPage)) {\n state.metadata.error = PagingError.IncorrectRecordsPerPage;\n return res;\n }\n state.metadata.countPages = Math.ceil(len / recordsPerPage);\n if (!len) {\n return data;\n }\n if (index >= state.metadata.countPages) {\n state.metadata.error = PagingError.IncorrectPageIndex;\n return res;\n }\n return data.slice(index * recordsPerPage, (index + 1) * recordsPerPage);\n }\n static correctPagingState(state, length) {\n const maxPage = Math.ceil(length / state.recordsPerPage) - 1;\n if (!isNaN(maxPage) && state.index > maxPage) {\n state.index = maxPage;\n }\n }\n static getHierarchy(gRow) {\n return getHierarchy(gRow);\n }\n static isHierarchyMatch(h1, h2, expressions) {\n return isHierarchyMatch(h1, h2, expressions);\n }\n /**\n * Merges all changes from provided transactions into provided data collection\n *\n * @param data Collection to merge\n * @param transactions Transactions to merge into data\n * @param primaryKey Primary key of the collection, if any\n * @param deleteRows Should delete rows with DELETE transaction type from data\n * @returns Provided data collections updated with all provided transactions\n */\n static mergeTransactions(data, transactions, primaryKey, cloneStrategy = new DefaultDataCloneStrategy(), deleteRows = false) {\n data.forEach((item, index) => {\n const rowId = primaryKey ? item[primaryKey] : item;\n const transaction = transactions.find(t => t.id === rowId);\n if (transaction && transaction.type === TransactionType.UPDATE) {\n data[index] = mergeObjects(cloneStrategy.clone(data[index]), transaction.newValue);\n }\n });\n if (deleteRows) {\n transactions\n .filter(t => t.type === TransactionType.DELETE)\n .forEach(t => {\n const index = primaryKey ? data.findIndex(d => d[primaryKey] === t.id) : data.findIndex(d => d === t.id);\n if (0 <= index && index < data.length) {\n data.splice(index, 1);\n }\n });\n }\n data.push(...transactions\n .filter(t => t.type === TransactionType.ADD)\n .map(t => t.newValue));\n return data;\n }\n /**\n * Merges all changes from provided transactions into provided hierarchical data collection\n *\n * @param data Collection to merge\n * @param transactions Transactions to merge into data\n * @param childDataKey Data key of child collections\n * @param primaryKey Primary key of the collection, if any\n * @param deleteRows Should delete rows with DELETE transaction type from data\n * @returns Provided data collections updated with all provided transactions\n */\n static mergeHierarchicalTransactions(data, transactions, childDataKey, primaryKey, cloneStrategy = new DefaultDataCloneStrategy(), deleteRows = false) {\n for (const transaction of transactions) {\n if (transaction.path) {\n const parent = this.findParentFromPath(data, primaryKey, childDataKey, transaction.path);\n let collection = parent ? parent[childDataKey] : data;\n switch (transaction.type) {\n case TransactionType.ADD:\n // if there is no parent this is ADD row at root level\n if (parent && !parent[childDataKey]) {\n parent[childDataKey] = collection = [];\n }\n collection.push(transaction.newValue);\n break;\n case TransactionType.UPDATE:\n const updateIndex = collection.findIndex(x => x[primaryKey] === transaction.id);\n if (updateIndex !== -1) {\n collection[updateIndex] = mergeObjects(cloneStrategy.clone(collection[updateIndex]), transaction.newValue);\n }\n break;\n case TransactionType.DELETE:\n if (deleteRows) {\n const deleteIndex = collection.findIndex(r => r[primaryKey] === transaction.id);\n if (deleteIndex !== -1) {\n collection.splice(deleteIndex, 1);\n }\n }\n break;\n }\n }\n else {\n // if there is no path this is ADD row in root. Push the newValue to data\n data.push(transaction.newValue);\n }\n }\n return data;\n }\n static parseValue(dataType, value) {\n if (dataType === GridColumnDataType.Number || dataType === GridColumnDataType.Currency || dataType === GridColumnDataType.Percent) {\n value = parseFloat(value);\n }\n return value;\n }\n static findParentFromPath(data, primaryKey, childDataKey, path) {\n let collection = data;\n let result;\n for (const id of path) {\n result = collection && collection.find(x => x[primaryKey] === id);\n if (!result) {\n break;\n }\n collection = result[childDataKey];\n }\n return result;\n }\n}\n\n/**\n * @hidden\n */\nclass ExportUtilities {\n static getKeysFromData(data) {\n const length = data.length;\n if (length === 0) {\n return [];\n }\n const dataEntry = data[0];\n const dataEntryMiddle = data[Math.floor(length / 2)];\n const dataEntryLast = data[length - 1];\n const keys1 = Object.keys(dataEntry);\n const keys2 = Object.keys(dataEntryMiddle);\n const keys3 = Object.keys(dataEntryLast);\n const keys = new Set(keys1.concat(keys2).concat(keys3));\n return !ExportUtilities.isSpecialData(dataEntry) ? Array.from(keys) : ['Column 1'];\n }\n static saveBlobToFile(blob, fileName) {\n const a = document.createElement('a');\n const url = window.URL.createObjectURL(blob);\n a.download = fileName;\n a.href = url;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n window.URL.revokeObjectURL(url);\n }\n static stringToArrayBuffer(s) {\n const buf = new ArrayBuffer(s.length);\n const view = new Uint8Array(buf);\n for (let i = 0; i !== s.length; ++i) {\n /* eslint-disable no-bitwise */\n view[i] = s.charCodeAt(i) & 0xFF;\n /* eslint-enable no-bitwise */\n }\n return buf;\n }\n static isSpecialData(data) {\n return (typeof data === 'string' ||\n typeof data === 'number' ||\n data instanceof Date);\n }\n static hasValue(value) {\n return value !== undefined && value !== null;\n }\n static isNullOrWhitespaces(value) {\n return value === undefined || value === null || !value.trim();\n }\n static sanitizeValue(value) {\n if (!this.hasValue(value)) {\n return '';\n }\n else {\n const stringValue = String(value);\n return stringValue.replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n }\n}\n\nvar FilteringExpressionsTreeType;\n(function (FilteringExpressionsTreeType) {\n FilteringExpressionsTreeType[FilteringExpressionsTreeType[\"Regular\"] = 0] = \"Regular\";\n FilteringExpressionsTreeType[FilteringExpressionsTreeType[\"Advanced\"] = 1] = \"Advanced\";\n})(FilteringExpressionsTreeType || (FilteringExpressionsTreeType = {}));\nclass FilteringExpressionsTree {\n constructor(operator, fieldName) {\n /**\n * Sets/gets the filtering operands.\n * ```typescript\n * const gridExpressionsTree = new FilteringExpressionsTree(FilteringLogic.And);\n * const expression = [\n * {\n * condition: IgxStringFilteringOperand.instance().condition('contains'),\n * fieldName: 'Column Field',\n * searchVal: 'Value',\n * ignoreCase: false\n * }];\n * gridExpressionsTree.filteringOperands.push(expression);\n * this.grid.filteringExpressionsTree = gridExpressionsTree;\n * ```\n * ```typescript\n * let filteringOperands = gridExpressionsTree.filteringOperands;\n * ```\n *\n * @memberof FilteringExpressionsTree\n */\n this.filteringOperands = [];\n this.operator = operator;\n this.fieldName = fieldName;\n }\n /**\n * Checks if filtering expressions tree is empty.\n *\n * @param expressionTree filtering expressions tree.\n */\n static empty(expressionTree) {\n return !expressionTree || !expressionTree.filteringOperands || !expressionTree.filteringOperands.length;\n }\n /**\n * Returns the filtering expression for a column with the provided fieldName.\n * ```typescript\n * let filteringExpression = gridExpressionTree.find('Column Field');\n * ```\n *\n * @memberof FilteringExpressionsTree\n */\n find(fieldName) {\n const index = this.findIndex(fieldName);\n if (index > -1) {\n return this.filteringOperands[index];\n }\n return null;\n }\n /**\n * Returns the index of the filtering expression for a column with the provided fieldName.\n * ```typescript\n * let filteringExpressionIndex = gridExpressionTree.findIndex('Column Field');\n * ```\n *\n * @memberof FilteringExpressionsTree\n */\n findIndex(fieldName) {\n let expr;\n for (let i = 0; i < this.filteringOperands.length; i++) {\n expr = this.filteringOperands[i];\n if (expr instanceof FilteringExpressionsTree) {\n if (this.isFilteringExpressionsTreeForColumn(expr, fieldName)) {\n return i;\n }\n }\n else {\n if (expr.fieldName === fieldName) {\n return i;\n }\n }\n }\n return -1;\n }\n isFilteringExpressionsTreeForColumn(expressionsTree, fieldName) {\n if (expressionsTree.fieldName === fieldName) {\n return true;\n }\n for (const expr of expressionsTree.filteringOperands) {\n if ((expr instanceof FilteringExpressionsTree)) {\n return this.isFilteringExpressionsTreeForColumn(expr, fieldName);\n }\n else {\n return expr.fieldName === fieldName;\n }\n }\n return false;\n }\n}\n\nvar FilteringLogic;\n(function (FilteringLogic) {\n FilteringLogic[FilteringLogic[\"And\"] = 0] = \"And\";\n FilteringLogic[FilteringLogic[\"Or\"] = 1] = \"Or\";\n})(FilteringLogic || (FilteringLogic = {}));\n\nconst DateType = 'date';\nconst DateTimeType = 'dateTime';\nconst TimeType = 'time';\nclass FilterUtil {\n static filter(data, state, grid) {\n if (!state.strategy) {\n state.strategy = new FilteringStrategy();\n }\n return state.strategy.filter(data, state.expressionsTree, state.advancedExpressionsTree, grid);\n }\n}\nclass BaseFilteringStrategy {\n // protected\n findMatchByExpression(rec, expr, isDate, isTime, grid) {\n const cond = expr.condition;\n const val = this.getFieldValue(rec, expr.fieldName, isDate, isTime, grid);\n return cond.logic(val, expr.searchVal, expr.ignoreCase);\n }\n // protected\n matchRecord(rec, expressions, grid) {\n if (expressions) {\n if (expressions instanceof FilteringExpressionsTree) {\n const expressionsTree = expressions;\n const operator = expressionsTree.operator;\n let matchOperand;\n if (expressionsTree.filteringOperands && expressionsTree.filteringOperands.length) {\n for (const operand of expressionsTree.filteringOperands) {\n matchOperand = this.matchRecord(rec, operand, grid);\n // Return false if at least one operand does not match and the filtering logic is And\n if (!matchOperand && operator === FilteringLogic.And) {\n return false;\n }\n // Return true if at least one operand matches and the filtering logic is Or\n if (matchOperand && operator === FilteringLogic.Or) {\n return true;\n }\n }\n return matchOperand;\n }\n return true;\n }\n else {\n const expression = expressions;\n const column = grid && grid.getColumnByName(expression.fieldName);\n const isDate = column ? column.dataType === DateType || column.dataType === DateTimeType : false;\n const isTime = column ? column.dataType === TimeType : false;\n return this.findMatchByExpression(rec, expression, isDate, isTime, grid);\n }\n }\n return true;\n }\n getFilterItems(column, tree) {\n let data = column.grid.gridAPI.filterDataByExpressions(tree);\n data = column.grid.gridAPI.sortDataByExpressions(data, [{ fieldName: column.field, dir: SortingDirection.Asc, ignoreCase: column.sortingIgnoreCase }]);\n const columnField = column.field;\n let filterItems = data.map(record => {\n let value = resolveNestedPath(record, columnField);\n const applyFormatter = column.formatter && this.shouldFormatFilterValues(column);\n value = applyFormatter ?\n column.formatter(value, record) :\n value;\n return {\n value,\n label: this.getFilterItemLabel(column, value, !applyFormatter, record)\n };\n });\n filterItems = this.getUniqueFilterItems(column, filterItems);\n return Promise.resolve(filterItems);\n }\n getFilterItemLabel(column, value, applyFormatter, data) {\n if (column.formatter) {\n if (applyFormatter) {\n return column.formatter(value, data);\n }\n return value;\n }\n const { display, format, digitsInfo, currencyCode, timezone } = column.pipeArgs;\n const locale = column.grid.locale;\n switch (column.dataType) {\n case GridColumnDataType.Date:\n case GridColumnDataType.DateTime:\n case GridColumnDataType.Time:\n return formatDate(value, format, locale, timezone);\n case GridColumnDataType.Currency:\n return formatCurrency(value, currencyCode || getLocaleCurrencyCode(locale), display, digitsInfo, locale);\n case GridColumnDataType.Number:\n return formatNumber(value, locale, digitsInfo);\n case GridColumnDataType.Percent:\n return formatPercent(value, locale, digitsInfo);\n default:\n return value;\n }\n }\n getUniqueFilterItems(column, filterItems) {\n const filteredUniqueValues = filterItems.reduce((map, item) => {\n var _a;\n let key = item.value;\n if (column.dataType === GridColumnDataType.String && column.filteringIgnoreCase) {\n key = key === null || key === void 0 ? void 0 : key.toString().toLowerCase();\n }\n else if (column.dataType === GridColumnDataType.DateTime) {\n key = (_a = item.value) === null || _a === void 0 ? void 0 : _a.toString();\n item.value = key ? new Date(key) : key;\n }\n else if (column.dataType === GridColumnDataType.Time) {\n const date = key ? new Date(key) : key;\n key = date ? new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds()) : key;\n item.value = key ? new Date(key) : key;\n }\n else if (column.dataType === GridColumnDataType.Date) {\n const date = key ? new Date(key) : key;\n key = date ? new Date(date.getFullYear(), date.getMonth(), date.getDate()).toISOString() : key;\n item.value = date;\n }\n return map.has(key) ? map : map.set(key, item);\n }, new Map());\n const uniqueValues = Array.from(filteredUniqueValues.values());\n return uniqueValues;\n }\n shouldFormatFilterValues(_column) {\n return false;\n }\n}\nclass NoopFilteringStrategy extends BaseFilteringStrategy {\n getFieldValue(rec, _fieldName) {\n return rec;\n }\n static instance() {\n return this._instance || (this._instance = new NoopFilteringStrategy());\n }\n filter(data, _, __) {\n return data;\n }\n}\nNoopFilteringStrategy._instance = null;\nclass FilteringStrategy extends BaseFilteringStrategy {\n constructor() {\n super();\n }\n static instance() {\n return this._instance || (this._instance = new this());\n }\n filter(data, expressionsTree, advancedExpressionsTree, grid) {\n let i;\n let rec;\n const len = data.length;\n const res = [];\n if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree)) || !len) {\n return data;\n }\n for (i = 0; i < len; i++) {\n rec = data[i];\n if (this.matchRecord(rec, expressionsTree, grid) && this.matchRecord(rec, advancedExpressionsTree, grid)) {\n res.push(rec);\n }\n }\n return res;\n }\n getFieldValue(rec, fieldName, isDate = false, isTime = false, grid) {\n const column = grid === null || grid === void 0 ? void 0 : grid.getColumnByName(fieldName);\n let value = resolveNestedPath(rec, fieldName);\n value = (column === null || column === void 0 ? void 0 : column.formatter) && this.shouldFormatFilterValues(column) ?\n column.formatter(value, rec) :\n value && (isDate || isTime) ? parseDate(value) : value;\n return value;\n }\n}\nFilteringStrategy._instance = null;\nclass FormattedValuesFilteringStrategy extends FilteringStrategy {\n /**\n * Creates a new instance of FormattedValuesFilteringStrategy.\n *\n * @param fields An array of column field names that should be formatted.\n * If omitted the values of all columns which has formatter will be formatted.\n */\n constructor(fields) {\n super();\n this.fields = fields;\n }\n shouldFormatFilterValues(column) {\n return !this.fields || this.fields.length === 0 || this.fields.some(f => f === column.field);\n }\n}\n\nclass TreeGridFilteringStrategy extends BaseFilteringStrategy {\n constructor(hierarchicalFilterFields) {\n super();\n this.hierarchicalFilterFields = hierarchicalFilterFields;\n }\n filter(data, expressionsTree, advancedExpressionsTree, grid) {\n return this.filterImpl(data, expressionsTree, advancedExpressionsTree, undefined, grid);\n }\n getFieldValue(rec, fieldName, isDate = false, isTime = false, grid) {\n const column = grid === null || grid === void 0 ? void 0 : grid.getColumnByName(fieldName);\n const hierarchicalRecord = rec;\n let value = this.isHierarchicalFilterField(fieldName) ?\n this.getHierarchicalFieldValue(hierarchicalRecord, fieldName) :\n resolveNestedPath(hierarchicalRecord.data, fieldName);\n value = (column === null || column === void 0 ? void 0 : column.formatter) && this.shouldFormatFilterValues(column) ?\n column.formatter(value, rec.data) :\n value && (isDate || isTime) ? parseDate(value) : value;\n return value;\n }\n getHierarchicalFieldValue(record, field) {\n const value = resolveNestedPath(record.data, field);\n return record.parent ?\n `${this.getHierarchicalFieldValue(record.parent, field)}${value ? `.[${value}]` : ''}` :\n `[${value}]`;\n }\n filterImpl(data, expressionsTree, advancedExpressionsTree, parent, grid) {\n let i;\n let rec;\n const len = data.length;\n const res = [];\n if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree)) || !len) {\n return data;\n }\n for (i = 0; i < len; i++) {\n rec = DataUtil.cloneTreeGridRecord(data[i]);\n rec.parent = parent;\n if (rec.children) {\n const filteredChildren = this.filterImpl(rec.children, expressionsTree, advancedExpressionsTree, rec, grid);\n rec.children = filteredChildren.length > 0 ? filteredChildren : null;\n }\n if (this.matchRecord(rec, expressionsTree, grid) && this.matchRecord(rec, advancedExpressionsTree, grid)) {\n res.push(rec);\n }\n else if (rec.children && rec.children.length > 0) {\n rec.isFilteredOutParent = true;\n res.push(rec);\n }\n }\n return res;\n }\n isHierarchicalFilterField(field) {\n return this.hierarchicalFilterFields && this.hierarchicalFilterFields.indexOf(field) !== -1;\n }\n getFilterItems(column, tree) {\n if (!this.isHierarchicalFilterField(column.field)) {\n return super.getFilterItems(column, tree);\n }\n let data = column.grid.gridAPI.filterTreeDataByExpressions(tree);\n data = DataUtil.treeGridSort(data, [{ fieldName: column.field, dir: SortingDirection.Asc, ignoreCase: column.sortingIgnoreCase }], column.grid.sortStrategy, null, column.grid);\n const items = this.getHierarchicalFilterItems(data, column);\n return Promise.resolve(items);\n }\n getHierarchicalFilterItems(records, column, parent) {\n return records === null || records === void 0 ? void 0 : records.map(record => {\n let value = resolveNestedPath(record.data, column.field);\n const applyFormatter = column.formatter && this.shouldFormatFilterValues(column);\n value = applyFormatter ?\n column.formatter(value, record.data) :\n value;\n const hierarchicalValue = parent ?\n (value || value === 0) ? `${parent.value}.[${value}]` : value :\n `[${value}]`;\n const filterItem = { value: hierarchicalValue };\n filterItem.label = this.getFilterItemLabel(column, value, !applyFormatter, record.data);\n filterItem.children = this.getHierarchicalFilterItems(record.children, column, filterItem);\n return filterItem;\n });\n }\n}\nclass TreeGridFormattedValuesFilteringStrategy extends TreeGridFilteringStrategy {\n /**\n * Creates a new instance of FormattedValuesFilteringStrategy.\n *\n * @param fields An array of column field names that should be formatted.\n * If omitted the values of all columns which has formatter will be formatted.\n */\n constructor(fields) {\n super();\n this.fields = fields;\n }\n shouldFormatFilterValues(column) {\n return !this.fields || this.fields.length === 0 || this.fields.some(f => f === column.field);\n }\n}\nclass TreeGridMatchingRecordsOnlyFilteringStrategy extends TreeGridFilteringStrategy {\n filter(data, expressionsTree, advancedExpressionsTree, grid) {\n return this.filterImplementation(data, expressionsTree, advancedExpressionsTree, undefined, grid);\n }\n filterImplementation(data, expressionsTree, advancedExpressionsTree, parent, grid) {\n let i;\n let rec;\n const len = data.length;\n const res = [];\n if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree)) || !len) {\n return data;\n }\n for (i = 0; i < len; i++) {\n rec = DataUtil.cloneTreeGridRecord(data[i]);\n rec.parent = parent;\n if (rec.children) {\n const filteredChildren = this.filterImplementation(rec.children, expressionsTree, advancedExpressionsTree, rec, grid);\n rec.children = filteredChildren.length > 0 ? filteredChildren : null;\n }\n if (this.matchRecord(rec, expressionsTree, grid) && this.matchRecord(rec, advancedExpressionsTree, grid)) {\n res.push(rec);\n }\n else if (rec.children && rec.children.length > 0) {\n rec = this.setCorrectLevelToFilteredRecords(rec);\n res.push(...rec.children);\n }\n }\n return res;\n }\n setCorrectLevelToFilteredRecords(rec) {\n if (rec.children && rec.children.length > 0) {\n rec.children.map(child => {\n child.level = child.level - 1;\n return this.setCorrectLevelToFilteredRecords(child);\n });\n }\n return rec;\n }\n}\n\nconst FilterMode = mkenum({\n quickFilter: 'quickFilter',\n excelStyleFilter: 'excelStyleFilter'\n});\nconst GridSummaryPosition = mkenum({\n top: 'top',\n bottom: 'bottom'\n});\nconst GridSummaryCalculationMode = mkenum({\n rootLevelOnly: 'rootLevelOnly',\n childLevelsOnly: 'childLevelsOnly',\n rootAndChildLevels: 'rootAndChildLevels'\n});\nconst GridSelectionMode = mkenum({\n none: 'none',\n single: 'single',\n multiple: 'multiple',\n multipleCascade: 'multipleCascade'\n});\nconst ColumnDisplayOrder = mkenum({\n Alphabetical: 'Alphabetical',\n DisplayOrder: 'DisplayOrder'\n});\nvar ColumnPinningPosition;\n(function (ColumnPinningPosition) {\n ColumnPinningPosition[ColumnPinningPosition[\"Start\"] = 0] = \"Start\";\n ColumnPinningPosition[ColumnPinningPosition[\"End\"] = 1] = \"End\";\n})(ColumnPinningPosition || (ColumnPinningPosition = {}));\nvar RowPinningPosition;\n(function (RowPinningPosition) {\n RowPinningPosition[RowPinningPosition[\"Top\"] = 0] = \"Top\";\n RowPinningPosition[RowPinningPosition[\"Bottom\"] = 1] = \"Bottom\";\n})(RowPinningPosition || (RowPinningPosition = {}));\nvar GridPagingMode;\n(function (GridPagingMode) {\n GridPagingMode[GridPagingMode[\"Local\"] = 0] = \"Local\";\n GridPagingMode[GridPagingMode[\"Remote\"] = 1] = \"Remote\";\n})(GridPagingMode || (GridPagingMode = {}));\nvar GridInstanceType;\n(function (GridInstanceType) {\n GridInstanceType[GridInstanceType[\"Grid\"] = 0] = \"Grid\";\n GridInstanceType[GridInstanceType[\"TreeGrid\"] = 1] = \"TreeGrid\";\n})(GridInstanceType || (GridInstanceType = {}));\n\nvar ExportRecordType;\n(function (ExportRecordType) {\n ExportRecordType[\"GroupedRecord\"] = \"GroupedRecord\";\n ExportRecordType[\"TreeGridRecord\"] = \"TreeGridRecord\";\n ExportRecordType[\"DataRecord\"] = \"DataRecord\";\n ExportRecordType[\"HierarchicalGridRecord\"] = \"HierarchicalGridRecord\";\n ExportRecordType[\"HeaderRecord\"] = \"HeaderRecord\";\n ExportRecordType[\"SummaryRecord\"] = \"SummaryRecord\";\n ExportRecordType[\"PivotGridRecord\"] = \"PivotGridRecord\";\n})(ExportRecordType || (ExportRecordType = {}));\nvar HeaderType;\n(function (HeaderType) {\n HeaderType[\"RowHeader\"] = \"RowHeader\";\n HeaderType[\"ColumnHeader\"] = \"ColumnHeader\";\n HeaderType[\"MultiRowHeader\"] = \"MultiRowHeader\";\n HeaderType[\"MultiColumnHeader\"] = \"MultiColumnHeader\";\n})(HeaderType || (HeaderType = {}));\n/**hidden\n * A helper class used to identify whether the user has set a specific columnIndex\n * during columnExporting, so we can honor it at the exported file.\n*/\nclass IgxColumnExportingEventArgs {\n get columnIndex() {\n return this._columnIndex;\n }\n set columnIndex(value) {\n this._columnIndex = value;\n this.userSetIndex = true;\n }\n constructor(original) {\n this.userSetIndex = false;\n this.header = original.header;\n this.field = original.field;\n this.cancel = original.cancel;\n this.skipFormatter = original.skipFormatter;\n this.grid = original.grid;\n this.owner = original.owner;\n this._columnIndex = original.columnIndex;\n }\n}\nconst DEFAULT_OWNER = 'default';\nconst GRID_ROOT_SUMMARY = 'igxGridRootSummary';\nconst GRID_PARENT = 'grid-parent';\nconst GRID_LEVEL_COL = 'GRID_LEVEL_COL';\nconst DEFAULT_COLUMN_WIDTH = 8.43;\nconst GRID_CHILD = 'grid-child-';\nclass IgxBaseExporter {\n constructor() {\n this.exportEnded = new EventEmitter();\n /**\n * This event is emitted when a row is exported.\n * ```typescript\n * this.exporterService.rowExporting.subscribe((args: IRowExportingEventArgs) => {\n * // put event handler code here\n * });\n * ```\n *\n * @memberof IgxBaseExporter\n */\n this.rowExporting = new EventEmitter();\n /**\n * This event is emitted when a column is exported.\n * ```typescript\n * this.exporterService.columnExporting.subscribe((args: IColumnExportingEventArgs) => {\n * // put event handler code here\n * });\n * ```\n *\n * @memberof IgxBaseExporter\n */\n this.columnExporting = new EventEmitter();\n this._sort = null;\n this._ownersMap = new Map();\n this._setChildSummaries = false;\n this.summaries = new Map();\n this.rowIslandCounter = -1;\n this.flatRecords = [];\n this.pivotGridColumns = [];\n this.pivotGridKeyValueMap = new Map();\n }\n /**\n * Method for exporting IgxGrid component's data.\n * ```typescript\n * this.exporterService.export(this.igxGridForExport, this.exportOptions);\n * ```\n *\n * @memberof IgxBaseExporter\n */\n export(grid, options) {\n if (options === undefined || options === null) {\n throw Error('No options provided!');\n }\n this.options = options;\n this.locale = grid.locale;\n let columns = grid.columns;\n if (this.options.ignoreMultiColumnHeaders) {\n columns = columns.filter(col => col.children === undefined);\n }\n const columnList = this.getColumns(columns);\n const tagName = grid.nativeElement.tagName.toLowerCase();\n if (tagName === 'igx-hierarchical-grid') {\n this._ownersMap.set(grid, columnList);\n const childLayoutList = grid.childLayoutList;\n for (const island of childLayoutList) {\n this.mapHierarchicalGridColumns(island, grid.data[0]);\n }\n }\n else if (tagName === 'igx-pivot-grid') {\n this.pivotGridColumns = [];\n this.isPivotGridExport = true;\n this.pivotGridKeyValueMap = new Map();\n this.pivotGridRowDimensionsMap = new Map();\n grid.pivotConfiguration.rows.filter(r => r.enabled).forEach(rowDimension => {\n this.addToRowDimensionsMap(rowDimension, rowDimension.memberName);\n });\n this._ownersMap.set(DEFAULT_OWNER, columnList);\n }\n else {\n this._ownersMap.set(DEFAULT_OWNER, columnList);\n }\n this.summaries = this.prepareSummaries(grid);\n this._setChildSummaries = this.summaries.size > 1 && grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly;\n this.addLevelColumns();\n this.prepareData(grid);\n this.addLevelData();\n this.addPivotGridColumns(grid);\n this.exportGridRecordsData(this.flatRecords, grid);\n }\n /**\n * Method for exporting any kind of array data.\n * ```typescript\n * this.exporterService.exportData(this.arrayForExport, this.exportOptions);\n * ```\n *\n * @memberof IgxBaseExporter\n */\n exportData(data, options) {\n if (options === undefined || options === null) {\n throw Error('No options provided!');\n }\n this.options = options;\n const records = data.map(d => {\n const record = {\n data: d,\n type: ExportRecordType.DataRecord,\n level: 0\n };\n return record;\n });\n this.exportGridRecordsData(records);\n }\n addToRowDimensionsMap(rowDimension, rootParentName) {\n this.pivotGridRowDimensionsMap[rowDimension.memberName] = rootParentName;\n if (rowDimension.childLevel) {\n this.addToRowDimensionsMap(rowDimension.childLevel, rootParentName);\n }\n }\n exportGridRecordsData(records, grid) {\n var _a;\n if (this._ownersMap.size === 0) {\n const recordsData = records.filter(r => r.type !== ExportRecordType.SummaryRecord).map(r => r.data);\n const keys = ExportUtilities.getKeysFromData(recordsData);\n const columns = keys.map((k) => ({ header: k, field: k, skip: false, headerType: HeaderType.ColumnHeader, level: 0, columnSpan: 1 }));\n const columnWidths = new Array(keys.length).fill(DEFAULT_COLUMN_WIDTH);\n const mapRecord = {\n columns,\n columnWidths,\n indexOfLastPinnedColumn: -1,\n maxLevel: 0\n };\n this._ownersMap.set(DEFAULT_OWNER, mapRecord);\n }\n let shouldReorderColumns = false;\n for (const [key, mapRecord] of this._ownersMap) {\n let skippedPinnedColumnsCount = 0;\n let columnsWithoutHeaderCount = 1;\n let indexOfLastPinnedColumn = mapRecord.indexOfLastPinnedColumn;\n mapRecord.columns.forEach((column, index) => {\n if (!column.skip) {\n const columnExportArgs = {\n header: !ExportUtilities.isNullOrWhitespaces(column.header) ?\n column.header :\n 'Column' + columnsWithoutHeaderCount++,\n field: column.field,\n columnIndex: index,\n cancel: false,\n skipFormatter: false,\n grid: key === DEFAULT_OWNER ? grid : key\n };\n const newColumnExportArgs = new IgxColumnExportingEventArgs(columnExportArgs);\n this.columnExporting.emit(newColumnExportArgs);\n column.header = newColumnExportArgs.header;\n column.skip = newColumnExportArgs.cancel;\n column.skipFormatter = newColumnExportArgs.skipFormatter;\n if (newColumnExportArgs.userSetIndex) {\n column.exportIndex = newColumnExportArgs.columnIndex;\n shouldReorderColumns = true;\n }\n if (column.skip) {\n if (index <= indexOfLastPinnedColumn) {\n skippedPinnedColumnsCount++;\n }\n this.calculateColumnSpans(column, mapRecord, column.columnSpan);\n const nonSkippedColumns = mapRecord.columns.filter(c => !c.skip);\n if (nonSkippedColumns.length > 0) {\n this._ownersMap.get(key).maxLevel = nonSkippedColumns.sort((a, b) => b.level - a.level)[0].level;\n }\n }\n if (this._sort && this._sort.fieldName === column.field) {\n if (column.skip) {\n this._sort = null;\n }\n else {\n this._sort.fieldName = column.header;\n }\n }\n }\n });\n indexOfLastPinnedColumn -= skippedPinnedColumnsCount;\n // Reorder columns only if a column has been assigned a specific columnIndex during columnExporting event\n if (shouldReorderColumns) {\n mapRecord.columns = this.reorderColumns(mapRecord.columns);\n }\n }\n const dataToExport = new Array();\n const actualData = (_a = records[0]) === null || _a === void 0 ? void 0 : _a.data;\n const isSpecialData = ExportUtilities.isSpecialData(actualData);\n yieldingLoop(records.length, 100, (i) => {\n const row = records[i];\n this.exportRow(dataToExport, row, i, isSpecialData);\n }, () => {\n this.exportDataImplementation(dataToExport, this.options, () => {\n this.resetDefaults();\n });\n });\n }\n calculateColumnSpans(column, mapRecord, span) {\n if (column.headerType === HeaderType.MultiColumnHeader && column.skip) {\n const columnGroupChildren = mapRecord.columns.filter(c => c.columnGroupParent === column.columnGroup);\n columnGroupChildren.forEach(cgc => {\n if (cgc.headerType === HeaderType.MultiColumnHeader) {\n cgc.columnSpan = 0;\n cgc.columnGroupParent = null;\n cgc.skip = true;\n this.calculateColumnSpans(cgc, mapRecord, cgc.columnSpan);\n }\n else {\n cgc.skip = true;\n }\n });\n }\n const targetCol = mapRecord.columns.filter(c => column.columnGroupParent !== null && c.columnGroup === column.columnGroupParent)[0];\n if (targetCol !== undefined) {\n targetCol.columnSpan -= span;\n if (targetCol.columnGroupParent !== null) {\n this.calculateColumnSpans(targetCol, mapRecord, span);\n }\n if (targetCol.columnSpan === 0) {\n targetCol.skip = true;\n }\n }\n }\n exportRow(data, record, index, isSpecialData) {\n if (!isSpecialData) {\n const owner = record.owner === undefined ? DEFAULT_OWNER : record.owner;\n const ownerCols = this._ownersMap.get(owner).columns;\n if (record.type !== ExportRecordType.HeaderRecord) {\n const columns = ownerCols\n .filter(c => c.headerType === HeaderType.ColumnHeader && !c.skip)\n .sort((a, b) => a.startIndex - b.startIndex)\n .sort((a, b) => a.pinnedIndex - b.pinnedIndex);\n record.data = columns.reduce((a, e) => {\n if (!e.skip) {\n let rawValue = resolveNestedPath(record.data, e.field);\n const shouldApplyFormatter = e.formatter && !e.skipFormatter && record.type !== ExportRecordType.GroupedRecord;\n const isOfDateType = e.dataType === 'date' || e.dataType === 'dateTime' || e.dataType === 'time';\n if (isOfDateType &&\n record.type !== ExportRecordType.SummaryRecord &&\n record.type !== ExportRecordType.GroupedRecord &&\n !(rawValue instanceof Date) &&\n !shouldApplyFormatter &&\n rawValue !== undefined &&\n rawValue !== null) {\n rawValue = new Date(rawValue);\n }\n else if (e.dataType === 'string' && rawValue instanceof Date) {\n rawValue = rawValue.toString();\n }\n let formattedValue = shouldApplyFormatter ? e.formatter(rawValue) : rawValue;\n if (this.isPivotGridExport && !isNaN(parseFloat(formattedValue))) {\n formattedValue = parseFloat(formattedValue);\n }\n a[e.field] = formattedValue;\n }\n return a;\n }, {});\n }\n else {\n const filteredHeaders = ownerCols.filter(c => c.skip).map(c => c.header ? c.header : c.field);\n record.data = record.data.filter(d => filteredHeaders.indexOf(d) === -1);\n }\n }\n const rowArgs = {\n rowData: record.data,\n rowIndex: index,\n cancel: false\n };\n this.rowExporting.emit(rowArgs);\n if (!rowArgs.cancel) {\n data.push(record);\n }\n }\n reorderColumns(columns) {\n const filteredColumns = columns.filter(c => !c.skip);\n const length = filteredColumns.length;\n const specificIndicesColumns = filteredColumns.filter((col) => !isNaN(col.exportIndex))\n .sort((a, b) => a.exportIndex - b.exportIndex);\n const indices = specificIndicesColumns.map(col => col.exportIndex);\n specificIndicesColumns.forEach(col => {\n filteredColumns.splice(filteredColumns.indexOf(col), 1);\n });\n const reorderedColumns = new Array(length);\n if (specificIndicesColumns.length > Math.max(...indices)) {\n return specificIndicesColumns.concat(filteredColumns);\n }\n else {\n indices.forEach((i, index) => {\n if (i < 0 || i >= length) {\n filteredColumns.push(specificIndicesColumns[index]);\n }\n else {\n let k = i;\n while (k < length && reorderedColumns[k] !== undefined) {\n ++k;\n }\n reorderedColumns[k] = specificIndicesColumns[index];\n }\n });\n for (let i = 0; i < length; i++) {\n if (reorderedColumns[i] === undefined) {\n reorderedColumns[i] = filteredColumns.splice(0, 1)[0];\n }\n }\n }\n return reorderedColumns;\n }\n prepareData(grid) {\n this.flatRecords = [];\n const tagName = grid.nativeElement.tagName.toLowerCase();\n const hasFiltering = (grid.filteringExpressionsTree && grid.filteringExpressionsTree.filteringOperands.length > 0) ||\n (grid.advancedFilteringExpressionsTree && grid.advancedFilteringExpressionsTree.filteringOperands.length > 0);\n const expressions = grid.groupingExpressions ? grid.groupingExpressions.concat(grid.sortingExpressions || []) : grid.sortingExpressions;\n const hasSorting = expressions && expressions.length > 0;\n let setSummaryOwner = false;\n switch (tagName) {\n case 'igx-pivot-grid': {\n this.preparePivotGridData(grid);\n break;\n }\n case 'igx-hierarchical-grid': {\n this.prepareHierarchicalGridData(grid, hasFiltering, hasSorting);\n setSummaryOwner = true;\n break;\n }\n case 'igx-tree-grid': {\n this.prepareTreeGridData(grid, hasFiltering, hasSorting);\n break;\n }\n default: {\n this.prepareGridData(grid, hasFiltering, hasSorting);\n break;\n }\n }\n if (this.summaries.size > 0 && grid.summaryCalculationMode !== GridSummaryCalculationMode.childLevelsOnly) {\n setSummaryOwner ?\n this.setSummaries(GRID_ROOT_SUMMARY, 0, false, grid) :\n this.setSummaries(GRID_ROOT_SUMMARY);\n }\n }\n preparePivotGridData(grid) {\n for (const record of grid.filteredSortedData) {\n const recordData = Object.fromEntries(record.aggregationValues);\n record.dimensionValues.forEach((value, key) => {\n const actualKey = this.pivotGridRowDimensionsMap[key];\n recordData[actualKey] = value;\n });\n const pivotGridRecord = {\n data: recordData,\n level: record.level,\n type: ExportRecordType.PivotGridRecord\n };\n this.flatRecords.push(pivotGridRecord);\n }\n }\n prepareHierarchicalGridData(grid, hasFiltering, hasSorting) {\n const skipOperations = (!hasFiltering || !this.options.ignoreFiltering) &&\n (!hasSorting || !this.options.ignoreSorting);\n if (skipOperations) {\n const data = grid.filteredSortedData;\n this.addHierarchicalGridData(grid, data);\n }\n else {\n let data = grid.data;\n if (hasFiltering && !this.options.ignoreFiltering) {\n const filteringState = {\n expressionsTree: grid.filteringExpressionsTree,\n advancedExpressionsTree: grid.advancedFilteringExpressionsTree,\n strategy: grid.filterStrategy\n };\n data = FilterUtil.filter(data, filteringState, grid);\n }\n if (hasSorting && !this.options.ignoreSorting) {\n this._sort = cloneValue(grid.sortingExpressions[0]);\n data = DataUtil.sort(data, grid.sortingExpressions, grid.sortStrategy, grid);\n }\n this.addHierarchicalGridData(grid, data);\n }\n }\n addHierarchicalGridData(grid, records) {\n const childLayoutList = grid.childLayoutList;\n const columnFields = this._ownersMap.get(grid).columns.map(col => col.field);\n for (const entry of records) {\n const expansionStateVal = grid.expansionStates.has(entry) ? grid.expansionStates.get(entry) : false;\n const dataWithoutChildren = Object.keys(entry)\n .filter(k => columnFields.includes(k))\n .reduce((obj, key) => {\n obj[key] = entry[key];\n return obj;\n }, {});\n const hierarchicalGridRecord = {\n data: dataWithoutChildren,\n level: 0,\n type: ExportRecordType.HierarchicalGridRecord,\n owner: grid,\n hierarchicalOwner: GRID_PARENT\n };\n this.flatRecords.push(hierarchicalGridRecord);\n for (const island of childLayoutList) {\n const path = {\n rowID: island.primaryKey ? entry[island.primaryKey] : entry,\n rowIslandKey: island.key\n };\n const islandGrid = grid === null || grid === void 0 ? void 0 : grid.gridAPI.getChildGrid([path]);\n const keyRecordData = this.prepareIslandData(island, islandGrid, entry[island.key]) || [];\n this.getAllChildColumnsAndData(island, keyRecordData, expansionStateVal, islandGrid);\n }\n }\n }\n prepareSummaries(grid) {\n let summaries = new Map();\n if (this.options.exportSummaries && grid.summaryService.summaryCacheMap.size > 0) {\n const summaryCacheMap = grid.summaryService.summaryCacheMap;\n switch (grid.summaryCalculationMode) {\n case GridSummaryCalculationMode.childLevelsOnly:\n summaryCacheMap.delete(GRID_ROOT_SUMMARY);\n break;\n case GridSummaryCalculationMode.rootLevelOnly:\n for (let k of summaryCacheMap.keys()) {\n if (k !== GRID_ROOT_SUMMARY) {\n summaryCacheMap.delete(k);\n }\n }\n break;\n }\n summaries = summaryCacheMap;\n }\n return summaries;\n }\n prepareIslandData(island, islandGrid, data) {\n if (islandGrid !== undefined) {\n const hasFiltering = (islandGrid.filteringExpressionsTree &&\n islandGrid.filteringExpressionsTree.filteringOperands.length > 0) ||\n (islandGrid.advancedFilteringExpressionsTree &&\n islandGrid.advancedFilteringExpressionsTree.filteringOperands.length > 0);\n const hasSorting = islandGrid.sortingExpressions &&\n islandGrid.sortingExpressions.length > 0;\n const skipOperations = (!hasFiltering || !this.options.ignoreFiltering) &&\n (!hasSorting || !this.options.ignoreSorting);\n if (skipOperations) {\n data = islandGrid.filteredSortedData;\n }\n else {\n if (hasFiltering && !this.options.ignoreFiltering) {\n const filteringState = {\n expressionsTree: islandGrid.filteringExpressionsTree,\n advancedExpressionsTree: islandGrid.advancedFilteringExpressionsTree,\n strategy: islandGrid.filterStrategy\n };\n data = FilterUtil.filter(data, filteringState, islandGrid);\n }\n if (hasSorting && !this.options.ignoreSorting) {\n this._sort = cloneValue(islandGrid.sortingExpressions[0]);\n data = DataUtil.sort(data, islandGrid.sortingExpressions, islandGrid.sortStrategy, islandGrid);\n }\n }\n }\n else {\n const hasFiltering = (island.filteringExpressionsTree &&\n island.filteringExpressionsTree.filteringOperands.length > 0) ||\n (island.advancedFilteringExpressionsTree &&\n island.advancedFilteringExpressionsTree.filteringOperands.length > 0);\n const hasSorting = island.sortingExpressions &&\n island.sortingExpressions.length > 0;\n const skipOperations = (!hasFiltering || this.options.ignoreFiltering) &&\n (!hasSorting || this.options.ignoreSorting);\n if (!skipOperations) {\n if (hasFiltering && !this.options.ignoreFiltering) {\n const filteringState = {\n expressionsTree: island.filteringExpressionsTree,\n advancedExpressionsTree: island.advancedFilteringExpressionsTree,\n strategy: island.filterStrategy\n };\n data = FilterUtil.filter(data, filteringState, island);\n }\n if (hasSorting && !this.options.ignoreSorting) {\n this._sort = cloneValue(island.sortingExpressions[0]);\n data = DataUtil.sort(data, island.sortingExpressions, island.sortStrategy, island);\n }\n }\n }\n return data;\n }\n getAllChildColumnsAndData(island, childData, expansionStateVal, grid) {\n const hierarchicalOwner = `${GRID_CHILD}${++this.rowIslandCounter}`;\n const columnList = this._ownersMap.get(island).columns;\n const columnHeader = columnList\n .filter(col => col.headerType === HeaderType.ColumnHeader)\n .map(col => col.header ? col.header : col.field);\n const headerRecord = {\n data: columnHeader,\n level: island.level,\n type: ExportRecordType.HeaderRecord,\n owner: island,\n hidden: !expansionStateVal,\n hierarchicalOwner\n };\n if (childData && childData.length > 0) {\n this.flatRecords.push(headerRecord);\n for (const rec of childData) {\n const exportRecord = {\n data: rec,\n level: island.level,\n type: ExportRecordType.HierarchicalGridRecord,\n owner: island,\n hidden: !expansionStateVal,\n hierarchicalOwner\n };\n exportRecord.summaryKey = island.key;\n this.flatRecords.push(exportRecord);\n if (island.children.length > 0) {\n const islandExpansionStateVal = grid === undefined ?\n false :\n grid.expansionStates.has(rec) ?\n grid.expansionStates.get(rec) :\n false;\n for (const childIsland of island.children) {\n const path = {\n rowID: childIsland.primaryKey ? rec[childIsland.primaryKey] : rec,\n rowIslandKey: childIsland.key\n };\n // only defined when row is expanded in UI\n const childIslandGrid = grid === null || grid === void 0 ? void 0 : grid.gridAPI.getChildGrid([path]);\n const keyRecordData = this.prepareIslandData(island, childIslandGrid, rec[childIsland.key]) || [];\n this.getAllChildColumnsAndData(childIsland, keyRecordData, islandExpansionStateVal, childIslandGrid);\n }\n }\n }\n if (grid) {\n const summaries = this.prepareSummaries(grid);\n for (const k of summaries.keys()) {\n const summary = summaries.get(k);\n this.setSummaries(island.key, island.level, !expansionStateVal, island, summary, hierarchicalOwner);\n }\n }\n }\n }\n prepareGridData(grid, hasFiltering, hasSorting) {\n const groupedGridGroupingState = {\n expressions: grid.groupingExpressions,\n expansion: grid.groupingExpansionState,\n defaultExpanded: grid.groupsExpanded,\n };\n const hasGrouping = grid.groupingExpressions &&\n grid.groupingExpressions.length > 0;\n const skipOperations = (!hasFiltering || !this.options.ignoreFiltering) &&\n (!hasSorting || !this.options.ignoreSorting) &&\n (!hasGrouping || !this.options.ignoreGrouping);\n if (skipOperations) {\n if (hasGrouping) {\n this.addGroupedData(grid, grid.groupsRecords, groupedGridGroupingState, true);\n }\n else {\n this.addFlatData(grid.filteredSortedData);\n }\n }\n else {\n let gridData = grid.data;\n if (hasFiltering && !this.options.ignoreFiltering) {\n const filteringState = {\n expressionsTree: grid.filteringExpressionsTree,\n advancedExpressionsTree: grid.advancedFilteringExpressionsTree,\n strategy: grid.filterStrategy\n };\n gridData = FilterUtil.filter(gridData, filteringState, grid);\n }\n if (hasSorting && !this.options.ignoreSorting) {\n // TODO: We should drop support for this since in a grouped grid it doesn't make sense\n // this._sort = !isGroupedGrid ?\n // cloneValue(grid.sortingExpressions[0]) :\n // grid.sortingExpressions.length > 1 ?\n // cloneValue(grid.sortingExpressions[1]) :\n // cloneValue(grid.sortingExpressions[0]);\n const expressions = grid.groupingExpressions ? grid.groupingExpressions.concat(grid.sortingExpressions || []) : grid.sortingExpressions;\n gridData = DataUtil.sort(gridData, expressions, grid.sortStrategy, grid);\n }\n if (hasGrouping && !this.options.ignoreGrouping) {\n const groupsRecords = [];\n DataUtil.group(cloneArray(gridData), groupedGridGroupingState, grid.groupStrategy, grid, groupsRecords);\n gridData = groupsRecords;\n }\n if (hasGrouping && !this.options.ignoreGrouping) {\n this.addGroupedData(grid, gridData, groupedGridGroupingState, true);\n }\n else {\n this.addFlatData(gridData);\n }\n }\n }\n prepareTreeGridData(grid, hasFiltering, hasSorting) {\n const skipOperations = (!hasFiltering || !this.options.ignoreFiltering) &&\n (!hasSorting || !this.options.ignoreSorting);\n if (skipOperations) {\n this.addTreeGridData(grid.processedRootRecords);\n }\n else {\n let gridData = grid.rootRecords;\n if (hasFiltering && !this.options.ignoreFiltering) {\n const filteringState = {\n expressionsTree: grid.filteringExpressionsTree,\n advancedExpressionsTree: grid.advancedFilteringExpressionsTree,\n strategy: (grid.filterStrategy) ? grid.filterStrategy : new TreeGridFilteringStrategy()\n };\n gridData = filteringState.strategy\n .filter(gridData, filteringState.expressionsTree, filteringState.advancedExpressionsTree);\n }\n if (hasSorting && !this.options.ignoreSorting) {\n this._sort = cloneValue(grid.sortingExpressions[0]);\n gridData = DataUtil.treeGridSort(gridData, grid.sortingExpressions, grid.sortStrategy);\n }\n this.addTreeGridData(gridData);\n }\n }\n addTreeGridData(records, parentExpanded = true, hierarchicalOwner) {\n if (!records) {\n return;\n }\n for (const record of records) {\n const treeGridRecord = {\n data: record.data,\n level: record.level,\n hidden: !parentExpanded,\n type: ExportRecordType.TreeGridRecord,\n summaryKey: record.key,\n hierarchicalOwner: record.level === 0 ? GRID_PARENT : hierarchicalOwner\n };\n this.flatRecords.push(treeGridRecord);\n if (record.children) {\n this.getTreeGridChildData(record.children, record.key, record.level, record.expanded && parentExpanded);\n }\n }\n }\n getTreeGridChildData(recordChildren, key, level, parentExpanded = true) {\n const hierarchicalOwner = `${GRID_CHILD}${++this.rowIslandCounter}`;\n let summaryLevel = level;\n let summaryHidden = !parentExpanded;\n for (const rc of recordChildren) {\n if (rc.children && rc.children.length > 0) {\n this.addTreeGridData([rc], parentExpanded, hierarchicalOwner);\n summaryLevel = rc.level;\n }\n else {\n const currentRecord = {\n data: rc.data,\n level: rc.level,\n hidden: !parentExpanded,\n type: ExportRecordType.DataRecord,\n hierarchicalOwner\n };\n if (this._setChildSummaries) {\n currentRecord.summaryKey = key;\n }\n this.flatRecords.push(currentRecord);\n summaryLevel = rc.level;\n summaryHidden = !parentExpanded;\n }\n }\n if (this._setChildSummaries) {\n this.setSummaries(key, summaryLevel, summaryHidden, null, null, hierarchicalOwner);\n }\n }\n addFlatData(records) {\n if (!records) {\n return;\n }\n for (const record of records) {\n const data = {\n data: record,\n type: ExportRecordType.DataRecord,\n level: 0\n };\n this.flatRecords.push(data);\n }\n }\n setSummaries(summaryKey, level = 0, hidden = false, owner, summary, hierarchicalOwner) {\n const rootSummary = summary !== null && summary !== void 0 ? summary : this.summaries.get(summaryKey);\n if (rootSummary) {\n const values = [...rootSummary.values()];\n const biggest = values.sort((a, b) => b.length - a.length)[0];\n for (let i = 0; i < biggest.length; i++) {\n const obj = {};\n for (const [key, value] of rootSummary) {\n const summaries = value.map(s => ({ label: s.label, value: s.summaryResult }));\n obj[key] = summaries[i];\n }\n const summaryRecord = {\n data: obj,\n type: ExportRecordType.SummaryRecord,\n level,\n hidden,\n summaryKey,\n hierarchicalOwner\n };\n if (owner) {\n summaryRecord.owner = owner;\n }\n this.flatRecords.push(summaryRecord);\n }\n }\n }\n addGroupedData(grid, records, groupingState, setGridParent, parentExpanded = true, summaryKeysArr = []) {\n if (!records) {\n return;\n }\n let previousKey = '';\n const firstCol = this._ownersMap.get(DEFAULT_OWNER).columns\n .filter(c => c.headerType === HeaderType.ColumnHeader && !c.skip)\n .sort((a, b) => a.startIndex - b.startIndex)\n .sort((a, b) => a.pinnedIndex - b.pinnedIndex)[0].field;\n for (const record of records) {\n let recordVal = record.value;\n const hierarchicalOwner = setGridParent ? GRID_PARENT : `${GRID_CHILD}${++this.rowIslandCounter}`;\n const hierarchy = getHierarchy(record);\n const expandState = groupingState.expansion.find((s) => isHierarchyMatch(s.hierarchy || [{ fieldName: record.expression.fieldName, value: recordVal }], hierarchy, grid.groupingExpressions));\n const expanded = expandState ? expandState.expanded : groupingState.defaultExpanded;\n const isDate = recordVal instanceof Date;\n if (isDate) {\n const timeZoneOffset = recordVal.getTimezoneOffset() * 60000;\n const isoString = (new Date(recordVal - timeZoneOffset)).toISOString();\n const pipe = new DatePipe(grid.locale);\n recordVal = pipe.transform(isoString);\n }\n const groupExpressionName = record.column && record.column.header ?\n record.column.header :\n record.expression.fieldName;\n recordVal = recordVal !== null ? recordVal : '';\n const groupExpression = {\n data: { [firstCol]: `${groupExpressionName}: ${recordVal !== null && recordVal !== void 0 ? recordVal : '(Blank)'} (${record.records.length})` },\n level: record.level,\n hidden: !parentExpanded,\n type: ExportRecordType.GroupedRecord,\n hierarchicalOwner\n };\n this.flatRecords.push(groupExpression);\n let currKey = '';\n let summaryKey = '';\n if (this._setChildSummaries) {\n currKey = `'${groupExpressionName}': '${recordVal}'`;\n summaryKeysArr = summaryKeysArr.filter(a => a !== previousKey);\n previousKey = currKey;\n summaryKeysArr.push(currKey);\n summaryKey = `{ ${summaryKeysArr.join(', ')} }`;\n groupExpression.summaryKey = summaryKey;\n }\n if (record.groups.length > 0) {\n this.addGroupedData(grid, record.groups, groupingState, false, expanded && parentExpanded, summaryKeysArr);\n }\n else {\n const rowRecords = record.records;\n for (const rowRecord of rowRecords) {\n const currentRecord = {\n data: rowRecord,\n level: record.level + 1,\n hidden: !(expanded && parentExpanded),\n type: ExportRecordType.DataRecord,\n hierarchicalOwner\n };\n if (summaryKey) {\n currentRecord.summaryKey = summaryKey;\n }\n this.flatRecords.push(currentRecord);\n }\n }\n if (this._setChildSummaries) {\n this.setSummaries(summaryKey, record.level + 1, !(expanded && parentExpanded), null, null, hierarchicalOwner);\n summaryKeysArr.pop();\n }\n }\n }\n getColumns(columns) {\n const colList = [];\n const colWidthList = [];\n const hiddenColumns = [];\n let indexOfLastPinnedColumn = -1;\n let lastVisibleColumnIndex = -1;\n let maxLevel = 0;\n columns.forEach((column) => {\n var _a;\n const columnHeader = !ExportUtilities.isNullOrWhitespaces(column.header) ? column.header : column.field;\n const exportColumn = !column.hidden || this.options.ignoreColumnsVisibility;\n const index = this.options.ignoreColumnsOrder || this.options.ignoreColumnsVisibility ? column.index : column.visibleIndex;\n const columnWidth = Number((_a = column.width) === null || _a === void 0 ? void 0 : _a.slice(0, -2)) || DEFAULT_COLUMN_WIDTH;\n const columnLevel = !this.options.ignoreMultiColumnHeaders ? column.level : 0;\n const isMultiColHeader = column.columnGroup;\n const colSpan = isMultiColHeader ?\n column.allChildren\n .filter(ch => !(ch.columnGroup) && (!this.options.ignoreColumnsVisibility ? !ch.hidden : true))\n .length :\n 1;\n const columnInfo = {\n header: ExportUtilities.sanitizeValue(columnHeader),\n dataType: column.dataType,\n field: column.field,\n skip: !exportColumn,\n formatter: column.formatter,\n skipFormatter: false,\n headerType: isMultiColHeader ? HeaderType.MultiColumnHeader : HeaderType.ColumnHeader,\n columnSpan: colSpan,\n level: columnLevel,\n startIndex: index,\n pinnedIndex: !column.pinned ?\n Number.MAX_VALUE :\n !column.hidden ?\n column.grid.pinnedColumns.indexOf(column)\n : NaN,\n columnGroupParent: column.parent ? column.parent : null,\n columnGroup: isMultiColHeader ? column : null\n };\n if (column.dataType === 'currency') {\n columnInfo.currencyCode = column.pipeArgs.currencyCode\n ? column.pipeArgs.currencyCode\n : getLocaleCurrencyCode(this.locale);\n columnInfo.displayFormat = column.pipeArgs.display\n ? column.pipeArgs.display\n : 'symbol';\n columnInfo.digitsInfo = column.pipeArgs.digitsInfo\n ? column.pipeArgs.digitsInfo\n : '1.0-2';\n }\n if (column.dataType === 'date') {\n columnInfo.dateFormat = getLocaleDateFormat(this.locale, FormatWidth.Medium);\n }\n if (column.dataType === 'dateTime') {\n columnInfo.dateFormat = getLocaleDateTimeFormat(this.locale, FormatWidth.Medium);\n }\n if (this.options.ignoreColumnsOrder) {\n if (columnInfo.startIndex !== columnInfo.pinnedIndex) {\n columnInfo.pinnedIndex = Number.MAX_VALUE;\n }\n }\n if (column.level > maxLevel && !this.options.ignoreMultiColumnHeaders) {\n maxLevel = column.level;\n }\n if (index !== -1) {\n colList.push(columnInfo);\n colWidthList.push(columnWidth);\n lastVisibleColumnIndex = Math.max(lastVisibleColumnIndex, colList.indexOf(columnInfo));\n }\n else {\n hiddenColumns.push(columnInfo);\n }\n if (column.pinned && exportColumn && columnInfo.headerType === HeaderType.ColumnHeader) {\n indexOfLastPinnedColumn++;\n }\n });\n //Append the hidden columns to the end of the list\n hiddenColumns.forEach((hiddenColumn) => {\n colList[++lastVisibleColumnIndex] = hiddenColumn;\n });\n const result = {\n columns: colList,\n columnWidths: colWidthList,\n indexOfLastPinnedColumn,\n maxLevel\n };\n return result;\n }\n mapHierarchicalGridColumns(island, gridData) {\n let columnList;\n let keyData;\n if (island.autoGenerate) {\n keyData = gridData[island.key];\n const islandKeys = island.children.map(i => i.key);\n const islandData = keyData.map(i => {\n const newItem = {};\n Object.keys(i).map(k => {\n if (!islandKeys.includes(k)) {\n newItem[k] = i[k];\n }\n });\n return newItem;\n });\n columnList = this.getAutoGeneratedColumns(islandData);\n }\n else {\n const islandColumnList = island.columns;\n columnList = this.getColumns(islandColumnList);\n }\n this._ownersMap.set(island, columnList);\n if (island.children.length > 0) {\n for (const childIsland of island.children) {\n const islandKeyData = keyData !== undefined ? keyData[0] : {};\n this.mapHierarchicalGridColumns(childIsland, islandKeyData);\n }\n }\n }\n getAutoGeneratedColumns(data) {\n const colList = [];\n const colWidthList = [];\n const keys = Object.keys(data[0]);\n keys.forEach((colKey, i) => {\n const columnInfo = {\n header: colKey,\n field: colKey,\n dataType: 'string',\n skip: false,\n headerType: HeaderType.ColumnHeader,\n columnSpan: 1,\n level: 0,\n startIndex: i,\n pinnedIndex: Number.MAX_VALUE\n };\n colList.push(columnInfo);\n colWidthList.push(DEFAULT_COLUMN_WIDTH);\n });\n const result = {\n columns: colList,\n columnWidths: colWidthList,\n indexOfLastPinnedColumn: -1,\n maxLevel: 0,\n };\n return result;\n }\n addPivotGridColumns(grid) {\n if (grid.nativeElement.tagName.toLowerCase() !== 'igx-pivot-grid') {\n return;\n }\n const enabledRows = grid.pivotConfiguration.rows.filter(r => r.enabled).map((r, i) => ({ name: r.memberName, level: i }));\n this.preparePivotGridColumns(enabledRows);\n this.pivotGridFilterFieldsCount = enabledRows.length;\n const columnList = this._ownersMap.get(DEFAULT_OWNER);\n columnList.columns.unshift(...this.pivotGridColumns);\n columnList.columnWidths.unshift(...Array(this.pivotGridColumns.length).fill(200));\n columnList.indexOfLastPinnedColumn = enabledRows.length - 1;\n columnList.maxRowLevel = enabledRows.length;\n this._ownersMap.set(DEFAULT_OWNER, columnList);\n }\n preparePivotGridColumns(keys, columnGroupParent) {\n if (keys.length === 0) {\n return;\n }\n let startIndex = 0;\n const key = keys[0];\n const records = this.flatRecords.map(r => r.data);\n const groupedRecords = records.reduce((hash, obj) => (Object.assign(Object.assign({}, hash), { [obj[key.name]]: (hash[obj[key.name]] || []).concat(obj) })), {});\n if (columnGroupParent) {\n const mapKeys = [...this.pivotGridKeyValueMap.keys()];\n const mapValues = [...this.pivotGridKeyValueMap.values()];\n for (const k of Object.keys(groupedRecords)) {\n groupedRecords[k] = groupedRecords[k].filter(row => mapKeys.every(mk => Object.keys(row).includes(mk))\n && mapValues.every(mv => Object.values(row).includes(mv)));\n if (groupedRecords[k].length === 0) {\n delete groupedRecords[k];\n }\n }\n }\n for (const k of Object.keys(groupedRecords)) {\n const rowSpan = groupedRecords[k].length;\n const rowDimensionColumn = {\n rowSpan,\n field: k,\n header: k,\n startIndex,\n skip: false,\n pinnedIndex: 0,\n level: key.level,\n dataType: 'string',\n headerType: groupedRecords[k].length > 1 ? HeaderType.MultiRowHeader : HeaderType.RowHeader,\n };\n if (columnGroupParent) {\n rowDimensionColumn.columnGroupParent = columnGroupParent;\n }\n else {\n rowDimensionColumn.columnGroup = k;\n }\n this.pivotGridColumns.push(rowDimensionColumn);\n if (keys.length > 1) {\n this.pivotGridKeyValueMap.set(key.name, k);\n const newKeys = keys.filter(kdd => kdd !== key);\n this.preparePivotGridColumns(newKeys, k);\n this.pivotGridKeyValueMap.delete(key.name);\n }\n startIndex += rowSpan;\n }\n }\n addLevelColumns() {\n if (this.options.exportSummaries && this.summaries.size > 0) {\n this._ownersMap.forEach(om => {\n const levelCol = {\n header: GRID_LEVEL_COL,\n dataType: 'number',\n field: GRID_LEVEL_COL,\n skip: false,\n skipFormatter: false,\n headerType: HeaderType.ColumnHeader,\n columnSpan: 1,\n level: 0,\n };\n om.columns.push(levelCol);\n om.columnWidths.push(20);\n });\n }\n }\n addLevelData() {\n if (this.options.exportSummaries && this.summaries.size > 0) {\n for (const r of this.flatRecords) {\n if (r.type === ExportRecordType.DataRecord || r.type === ExportRecordType.TreeGridRecord || r.type === ExportRecordType.HierarchicalGridRecord) {\n r.data[GRID_LEVEL_COL] = r.level;\n }\n }\n }\n }\n resetDefaults() {\n this._sort = null;\n this.flatRecords = [];\n this.options = {};\n this._ownersMap.clear();\n this.rowIslandCounter = 0;\n }\n}\n\n/**\n * @hidden\n */\nclass CharSeparatedValueData {\n constructor(_data, valueDelimiter, columns = []) {\n this._data = _data;\n this.columns = columns;\n this._headerRecord = '';\n this._dataRecords = '';\n this._eor = '\\r\\n';\n this._escapeCharacters = ['\\r', '\\n', '\\r\\n'];\n this._delimiterLength = 1;\n this._isSpecialData = false;\n this.setDelimiter(valueDelimiter);\n }\n prepareData(key) {\n if (!this._data || this._data.length === 0) {\n return '';\n }\n let keys = [];\n if (key) {\n keys = key;\n }\n else {\n keys = ExportUtilities.getKeysFromData(this._data);\n }\n if (keys.length === 0) {\n return '';\n }\n this._isSpecialData = ExportUtilities.isSpecialData(this._data[0]);\n this._escapeCharacters.push(this._delimiter);\n this._headerRecord = this.processHeaderRecord(keys);\n this._dataRecords = this.processDataRecords(this._data, keys);\n return this._headerRecord + this._dataRecords;\n }\n prepareDataAsync(done) {\n var _a;\n if (!this._data || this._data.length === 0) {\n done('');\n }\n const columns = (_a = this.columns) === null || _a === void 0 ? void 0 : _a.filter(c => !c.skip).sort((a, b) => a.startIndex - b.startIndex).sort((a, b) => a.pinnedIndex - b.pinnedIndex);\n const keys = columns && columns.length ? columns.map(c => c.field) : ExportUtilities.getKeysFromData(this._data);\n if (keys.length === 0) {\n done('');\n }\n this._isSpecialData = ExportUtilities.isSpecialData(this._data[0]);\n this._escapeCharacters.push(this._delimiter);\n const headers = columns && columns.length ?\n columns.map(c => { var _a; return (_a = c.header) !== null && _a !== void 0 ? _a : c.field; }) :\n keys;\n this._headerRecord = this.processHeaderRecord(headers);\n this.processDataRecordsAsync(this._data, keys, (dr) => {\n done(this._headerRecord + dr);\n });\n }\n processField(value, escapeChars) {\n let safeValue = ExportUtilities.hasValue(value) ? String(value) : '';\n if (escapeChars.some((v) => safeValue.includes(v))) {\n safeValue = `\"${safeValue}\"`;\n }\n return safeValue + this._delimiter;\n }\n processHeaderRecord(keys) {\n let recordData = '';\n for (const keyName of keys) {\n recordData += this.processField(keyName, this._escapeCharacters);\n }\n return recordData.slice(0, -this._delimiterLength) + this._eor;\n }\n processRecord(record, keys) {\n const recordData = new Array(keys.length);\n for (let index = 0; index < keys.length; index++) {\n const value = (record[keys[index]] !== undefined) ? record[keys[index]] : this._isSpecialData ? record : '';\n recordData[index] = this.processField(value, this._escapeCharacters);\n }\n return recordData.join('').slice(0, -this._delimiterLength) + this._eor;\n }\n processDataRecords(currentData, keys) {\n const dataRecords = new Array(currentData.length);\n for (let i = 0; i < currentData.length; i++) {\n const row = currentData[i];\n dataRecords[i] = this.processRecord(row, keys);\n }\n return dataRecords.join('');\n }\n processDataRecordsAsync(currentData, keys, done) {\n const dataRecords = new Array(currentData.length);\n yieldingLoop(currentData.length, 1000, (i) => {\n const row = currentData[i];\n dataRecords[i] = this.processRecord(row, keys);\n }, () => {\n done(dataRecords.join(''));\n });\n }\n setDelimiter(value) {\n this._delimiter = value;\n this._delimiterLength = value.length;\n }\n}\n\nclass IgxExporterOptionsBase {\n constructor(fileName, _fileExtension) {\n this._fileExtension = _fileExtension;\n /**\n * Specifies whether hidden columns should be exported.\n * ```typescript\n * let ignoreColumnsVisibility = this.exportOptions.ignoreColumnsVisibility;\n * this.exportOptions.ignoreColumnsVisibility = true;\n * ```\n *\n * @memberof IgxExporterOptionsBase\n */\n this.ignoreColumnsVisibility = false;\n /**\n * Specifies whether filtered out rows should be exported.\n * ```typescript\n * let ignoreFiltering = this.exportOptions.ignoreFiltering;\n * this.exportOptions.ignoreFiltering = true;\n * ```\n *\n * @memberof IgxExporterOptionsBase\n */\n this.ignoreFiltering = false;\n /**\n * Specifies if the exporter should ignore the current column order in the IgxGrid.\n * ```typescript\n * let ignoreColumnsOrder = this.exportOptions.ignoreColumnsOrder;\n * this.exportOptions.ignoreColumnsOrder = true;\n * ```\n *\n * @memberof IgxExporterOptionsBase\n */\n this.ignoreColumnsOrder = false;\n /**\n * Specifies whether the exported data should be sorted as in the provided IgxGrid.\n * When you export grouped data, setting ignoreSorting to true will cause\n * the grouping to fail because it relies on the sorting of the records.\n * ```typescript\n * let ignoreSorting = this.exportOptions.ignoreSorting;\n * this.exportOptions.ignoreSorting = true;\n * ```\n *\n * @memberof IgxExporterOptionsBase\n */\n this.ignoreSorting = false;\n /**\n * Specifies whether the exported data should be grouped as in the provided IgxGrid.\n * ```typescript\n * let ignoreGrouping = this.exportOptions.ignoreGrouping;\n * this.exportOptions.ignoreGrouping = true;\n * ```\n *\n * @memberof IgxExporterOptionsBase\n */\n this.ignoreGrouping = false;\n /**\n * Specifies whether the exported data should include multi column headers as in the provided IgxGrid.\n * ```typescript\n * let ignoreMultiColumnHeaders = this.exportOptions.ignoreMultiColumnHeaders;\n * this.exportOptions.ignoreMultiColumnHeaders = true;\n * ```\n *\n * @memberof IgxExporterOptionsBase\n */\n this.ignoreMultiColumnHeaders = false;\n /**\n * Specifies whether the exported data should include column summaries.\n * ```typescript\n * let exportSummaries = this.exportOptions.exportSummaries;\n * this.exportOptions.exportSummaries = true;\n * ```\n *\n * @memberof IgxExporterOptionsBase\n */\n this.exportSummaries = true;\n /**\n * Specifies whether the exported data should have frozen headers.\n * ```typescript\n * let freezeHeaders = this.exportOptions.freezeHeaders;\n * this.exportOptions.freezeHeaders = true;\n * ```\n *\n * @memberof IgxExporterOptionsBase\n */\n this.freezeHeaders = false;\n /**\n * Specifies whether the headers should be exported if there is no data.\n * ```typescript\n * let alwaysExportHeaders = this.exportOptions.alwaysExportHeaders;\n * this.exportOptions.alwaysExportHeaders = false;\n * ```\n *\n * @memberof IgxExporterOptionsBase\n */\n this.alwaysExportHeaders = true;\n this.setFileName(fileName);\n }\n setFileName(fileName) {\n this._fileName = fileName + (fileName.endsWith(this._fileExtension) === false ? this._fileExtension : '');\n }\n /**\n * Gets the file name which will be used for the exporting operation.\n * ```typescript\n * let fileName = this.exportOptions.fileName;\n * ```\n *\n * @memberof IgxExporterOptionsBase\n */\n get fileName() {\n return this._fileName;\n }\n /**\n * Sets the file name which will be used for the exporting operation.\n * ```typescript\n * this.exportOptions.fileName = 'exportedData01';\n * ```\n *\n * @memberof IgxExporterOptionsBase\n */\n set fileName(value) {\n this.setFileName(value);\n }\n}\n\n/**\n * Objects of this class are used to configure the CSV exporting process.\n */\nclass IgxCsvExporterOptions extends IgxExporterOptionsBase {\n constructor(fileName, fileType) {\n super(fileName, IgxCsvExporterOptions.getExtensionFromFileType(fileType));\n this.setFileType(fileType);\n this.setDelimiter();\n }\n static getExtensionFromFileType(fType) {\n let extension = '';\n switch (fType) {\n case CsvFileTypes.CSV:\n extension = '.csv';\n break;\n case CsvFileTypes.TSV:\n extension = '.tsv';\n break;\n case CsvFileTypes.TAB:\n extension = '.tab';\n break;\n default:\n throw Error('Unsupported CSV file type!');\n }\n return extension;\n }\n /**\n * Gets the value delimiter which will be used for the exporting operation.\n * ```typescript\n * let delimiter = this.exportOptions.valueDelimiter;\n * ```\n *\n * @memberof IgxCsvExporterOptions\n */\n get valueDelimiter() {\n return this._valueDelimiter;\n }\n /**\n * Sets a value delimiter which will overwrite the default delimiter of the selected export format.\n * ```typescript\n * this.exportOptions.valueDelimiter = '|';\n * ```\n *\n * @memberof IgxCsvExporterOptions\n */\n set valueDelimiter(value) {\n this.setDelimiter(value);\n }\n /**\n * Gets the CSV export format.\n * ```typescript\n * let filetype = this.exportOptions.fileType;\n * ```\n *\n * @memberof IgxCsvExporterOptions\n */\n get fileType() {\n return this._fileType;\n }\n /**\n * Sets the CSV export format.\n * ```typescript\n * this.exportOptions.fileType = CsvFileTypes.TAB;\n * ```\n *\n * @memberof IgxCsvExporterOptions\n */\n set fileType(value) {\n this.setFileType(value);\n }\n setFileType(value) {\n if (value !== undefined && value !== null && value !== this._fileType) {\n this._fileType = value;\n const extension = IgxCsvExporterOptions.getExtensionFromFileType(value);\n if (!this.fileName.endsWith(extension)) {\n const oldExt = '.' + this.fileName.split('.').pop();\n const newName = this.fileName.replace(oldExt, extension);\n this._fileExtension = extension;\n this.fileName = newName;\n }\n }\n }\n setDelimiter(value) {\n if (value !== undefined && value !== '' && value !== null) {\n this._valueDelimiter = value;\n }\n else {\n switch (this.fileType) {\n case CsvFileTypes.CSV:\n this._valueDelimiter = ',';\n break;\n case CsvFileTypes.TSV:\n case CsvFileTypes.TAB:\n this._valueDelimiter = '\\t';\n break;\n }\n }\n }\n}\n/**\n * This enumeration is used to configure the default value separator\n * as well as the default file extension used when performing CSV exporting.\n */\nvar CsvFileTypes;\n(function (CsvFileTypes) {\n /**\n * Character Separated Values, default separator is \"comma\", default file extension is .csv\n */\n CsvFileTypes[CsvFileTypes[\"CSV\"] = 0] = \"CSV\";\n /**\n * Tab Separated Values, default separator is tab, default file extension is .tsv\n */\n CsvFileTypes[CsvFileTypes[\"TSV\"] = 1] = \"TSV\";\n /**\n * Tab Separated Values, default separator is tab, default file extension is .tab\n */\n CsvFileTypes[CsvFileTypes[\"TAB\"] = 2] = \"TAB\";\n})(CsvFileTypes || (CsvFileTypes = {}));\n\n/**\n * **Ignite UI for Angular CSV Exporter Service** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/exporter-csv)\n *\n * The Ignite UI for Angular CSV Exporter service can export data in a Character Separated Values format from\n * both raw data (array) or from an `IgxGrid`.\n *\n * Example:\n * ```typescript\n * public localData = [\n * { Name: \"Eric Ridley\", Age: \"26\" },\n * { Name: \"Alanis Brook\", Age: \"22\" },\n * { Name: \"Jonathan Morris\", Age: \"23\" }\n * ];\n *\n * constructor(private csvExportService: IgxCsvExporterService) {\n * }\n *\n * const opt: IgxCsvExporterOptions = new IgxCsvExporterOptions(\"FileName\", CsvFileTypes.CSV);\n * this.csvExportService.exportData(this.localData, opt);\n * ```\n */\nclass IgxCsvExporterService extends IgxBaseExporter {\n constructor() {\n super(...arguments);\n /**\n * This event is emitted when the export process finishes.\n * ```typescript\n * this.exporterService.exportEnded.subscribe((args: ICsvExportEndedEventArgs) => {\n * // put event handler code here\n * });\n * ```\n *\n * @memberof IgxCsvExporterService\n */\n this.exportEnded = new EventEmitter();\n }\n exportDataImplementation(data, options, done) {\n data = data.map((item) => item.data);\n const columnList = this._ownersMap.get(DEFAULT_OWNER);\n const csvData = new CharSeparatedValueData(data, options.valueDelimiter, columnList === null || columnList === void 0 ? void 0 : columnList.columns);\n csvData.prepareDataAsync((r) => {\n this._stringData = r;\n this.saveFile(options);\n this.exportEnded.emit({ csvData: this._stringData });\n done();\n });\n }\n saveFile(options) {\n switch (options.fileType) {\n case CsvFileTypes.CSV:\n this.exportFile(this._stringData, options.fileName, 'text/csv;charset=utf-8;');\n break;\n case CsvFileTypes.TSV:\n case CsvFileTypes.TAB:\n this.exportFile(this._stringData, options.fileName, 'text/tab-separated-values;charset=utf-8;');\n break;\n }\n }\n exportFile(data, fileName, fileType) {\n const blob = new Blob(['\\ufeff', data], { type: fileType });\n ExportUtilities.saveBlobToFile(blob, fileName);\n }\n}\nIgxCsvExporterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCsvExporterService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\nIgxCsvExporterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCsvExporterService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCsvExporterService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n\n/**\n * @hidden\n */\nvar ExcelFolderTypes;\n(function (ExcelFolderTypes) {\n ExcelFolderTypes[ExcelFolderTypes[\"RootExcelFolder\"] = 0] = \"RootExcelFolder\";\n ExcelFolderTypes[ExcelFolderTypes[\"RootRelsExcelFolder\"] = 1] = \"RootRelsExcelFolder\";\n ExcelFolderTypes[ExcelFolderTypes[\"DocPropsExcelFolder\"] = 2] = \"DocPropsExcelFolder\";\n ExcelFolderTypes[ExcelFolderTypes[\"XLExcelFolder\"] = 3] = \"XLExcelFolder\";\n ExcelFolderTypes[ExcelFolderTypes[\"XLRelsExcelFolder\"] = 4] = \"XLRelsExcelFolder\";\n ExcelFolderTypes[ExcelFolderTypes[\"ThemeExcelFolder\"] = 5] = \"ThemeExcelFolder\";\n ExcelFolderTypes[ExcelFolderTypes[\"WorksheetsExcelFolder\"] = 6] = \"WorksheetsExcelFolder\";\n ExcelFolderTypes[ExcelFolderTypes[\"WorksheetsRelsExcelFolder\"] = 7] = \"WorksheetsRelsExcelFolder\";\n ExcelFolderTypes[ExcelFolderTypes[\"TablesExcelFolder\"] = 8] = \"TablesExcelFolder\";\n})(ExcelFolderTypes || (ExcelFolderTypes = {}));\n/**\n * @hidden\n */\nvar ExcelFileTypes;\n(function (ExcelFileTypes) {\n ExcelFileTypes[ExcelFileTypes[\"RootRelsFile\"] = 0] = \"RootRelsFile\";\n ExcelFileTypes[ExcelFileTypes[\"AppFile\"] = 1] = \"AppFile\";\n ExcelFileTypes[ExcelFileTypes[\"CoreFile\"] = 2] = \"CoreFile\";\n ExcelFileTypes[ExcelFileTypes[\"WorkbookRelsFile\"] = 3] = \"WorkbookRelsFile\";\n ExcelFileTypes[ExcelFileTypes[\"ThemeFile\"] = 4] = \"ThemeFile\";\n ExcelFileTypes[ExcelFileTypes[\"WorksheetFile\"] = 5] = \"WorksheetFile\";\n ExcelFileTypes[ExcelFileTypes[\"StyleFile\"] = 6] = \"StyleFile\";\n ExcelFileTypes[ExcelFileTypes[\"WorkbookFile\"] = 7] = \"WorkbookFile\";\n ExcelFileTypes[ExcelFileTypes[\"ContentTypesFile\"] = 8] = \"ContentTypesFile\";\n ExcelFileTypes[ExcelFileTypes[\"SharedStringsFile\"] = 9] = \"SharedStringsFile\";\n ExcelFileTypes[ExcelFileTypes[\"WorksheetRelsFile\"] = 10] = \"WorksheetRelsFile\";\n ExcelFileTypes[ExcelFileTypes[\"TablesFile\"] = 11] = \"TablesFile\";\n})(ExcelFileTypes || (ExcelFileTypes = {}));\n\n/** @hidden */\nclass ExcelStrings {\n static getRels() {\n return ExcelStrings.XML_STRING + '';\n }\n static getApp(worksheetName) {\n return ExcelStrings.XML_STRING + `Microsoft Excel0falseWorksheets1${worksheetName}falsefalsefalse16.0300`;\n }\n static getCore() {\n return ExcelStrings.XML_STRING + '2015-06-05T18:17:20Z2015-06-05T18:17:26Z';\n }\n static getTheme() {\n return ExcelStrings.XML_STRING + '';\n }\n static getStyles() {\n return ExcelStrings.XML_STRING +\n '';\n }\n static getWorkbook(worksheetName) {\n return ExcelStrings.XML_STRING + ``;\n }\n static getWorksheetRels() {\n return ExcelStrings.XML_STRING + ``;\n }\n static getWorkbookRels(hasSharedStrings) {\n let retVal = ExcelStrings.XML_STRING + ``;\n if (hasSharedStrings) {\n retVal += ExcelStrings.SHARED_STRING_RELATIONSHIP;\n }\n retVal += '';\n return retVal;\n }\n static getSheetXML(dimension, freezePane, cols, sheetData, hasTable, outlineLevel = 0, isHierarchical) {\n const hasOutline = outlineLevel > 0;\n const tableParts = hasTable ? '' : '';\n const sheetOutlineProp = hasOutline ? '' : '';\n const sOutlineLevel = hasOutline ? `outlineLevelRow=\"${outlineLevel}\"` : '';\n const dimensions = isHierarchical ? '' : ``;\n // return ExcelStrings.XML_STRING +\n // '' + freezePane + '' + cols + sheetData + '' + tableParts + '';\n return `${ExcelStrings.XML_STRING}\n\n${sheetOutlineProp}\n${dimensions}\n${freezePane}\n\n${cols}\n${sheetData}\n\n${tableParts}`;\n }\n static getSharedStringXML(count, uniqueCount, table) {\n return ExcelStrings.XML_STRING + '' + table + '';\n }\n static getContentTypesXML(hasSharedStrings, hasTable) {\n let contentTypes = ExcelStrings.XML_STRING +\n `\n \n \n \n \n \n \n \n `;\n contentTypes += hasSharedStrings ?\n `\t` : '';\n contentTypes += hasTable ?\n `` : '';\n contentTypes += ``;\n return contentTypes;\n }\n static getTablesXML(autoFilterDimension, tableDimension, tableColumns, sort) {\n return `${ExcelStrings.XML_STRING}\n ${sort}${tableColumns}\n
    `;\n }\n /* eslint-enable max-len */\n static getExcelColumn(index) {\n // Returns the excel column name for given 0-based index\n // For example 27 should return \"AB\"\n let returnString = '';\n while (index >= 0) {\n const char = index % 26;\n returnString = String.fromCharCode(65 + char) + returnString;\n index = Math.floor(index / 26) - 1;\n }\n return returnString;\n }\n}\n/* eslint-disable max-len */\nExcelStrings.XML_STRING = '\\r\\n';\nExcelStrings.SHARED_STRING_RELATIONSHIP = '';\n\n/**\n * @hidden\n */\nclass RootRelsFile {\n writeElement(folder) {\n folder['.rels'] = strToU8(ExcelStrings.getRels());\n }\n}\n/**\n * @hidden\n */\nclass AppFile {\n writeElement(folder, worksheetData) {\n folder['app.xml'] = strToU8(ExcelStrings.getApp(worksheetData.options.worksheetName));\n }\n}\n/**\n * @hidden\n */\nclass CoreFile {\n writeElement(folder) {\n folder['core.xml'] = strToU8(ExcelStrings.getCore());\n }\n}\n/**\n * @hidden\n */\nclass WorkbookRelsFile {\n writeElement(folder, worksheetData) {\n const hasSharedStrings = !worksheetData.isEmpty || worksheetData.options.alwaysExportHeaders;\n folder['workbook.xml.rels'] = strToU8(ExcelStrings.getWorkbookRels(hasSharedStrings));\n }\n}\n/**\n * @hidden\n */\nclass ThemeFile {\n writeElement(folder) {\n folder['theme1.xml'] = strToU8(ExcelStrings.getTheme());\n }\n}\n/**\n * @hidden\n */\nclass WorksheetFile {\n constructor() {\n this.maxOutlineLevel = 0;\n this.sheetData = '';\n this.dimension = '';\n this.freezePane = '';\n this.rowHeight = '';\n this.mergeCellStr = '';\n this.mergeCellsCounter = 0;\n this.rowIndex = 0;\n this.pivotGridRowHeadersMap = new Map();\n this.dimensionMap = new Map();\n this.hierarchicalDimensionMap = new Map();\n this.currentSummaryOwner = '';\n this.currentHierarchicalOwner = '';\n this.firstColumn = Number.MAX_VALUE;\n this.firstDataRow = Number.MAX_VALUE;\n this.currencyStyleMap = new Map([\n ['USD', { styleXf: 5, symbol: '$' }],\n ['GBP', { styleXf: 6, symbol: '£' }],\n ['CNY', { styleXf: 7, symbol: '¥' }],\n ['EUR', { styleXf: 8, symbol: '€' }],\n ['JPY', { styleXf: 9, symbol: '¥' }],\n ]);\n }\n writeElement() { }\n writeElementAsync(folder, worksheetData) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(resolve => {\n this.prepareDataAsync(worksheetData, (cols, rows) => {\n const hasTable = (!worksheetData.isEmpty || worksheetData.options.alwaysExportHeaders)\n && worksheetData.options.exportAsTable;\n folder['sheet1.xml'] = strToU8(ExcelStrings.getSheetXML(this.dimension, this.freezePane, cols, rows, hasTable, this.maxOutlineLevel, worksheetData.isHierarchical));\n resolve();\n });\n });\n });\n }\n prepareDataAsync(worksheetData, done) {\n var _a;\n this.sheetData = '';\n let cols = '';\n const dictionary = worksheetData.dataDictionary;\n this.rowIndex = 0;\n if (worksheetData.isEmpty && (!worksheetData.options.alwaysExportHeaders || worksheetData.owner.columns.length === 0)) {\n this.sheetData += '';\n this.dimension = 'A1';\n done('', this.sheetData);\n }\n else {\n const owner = worksheetData.owner;\n const isHierarchicalGrid = worksheetData.isHierarchical;\n const hasMultiColumnHeader = worksheetData.hasMultiColumnHeader;\n const hasMultiRowHeader = worksheetData.hasMultiRowHeader;\n const hasUserSetIndex = owner.columns.some(col => col.exportIndex !== undefined);\n const height = worksheetData.options.rowHeight;\n this.isValidGrid = worksheetData.isHierarchical || worksheetData.isTreeGrid || worksheetData.isGroupedGrid;\n this.rowHeight = height ? ` ht=\"${height}\" customHeight=\"1\"` : '';\n this.sheetData += ``;\n let headersForLevel = [];\n for (let i = 0; i <= owner.maxRowLevel; i++) {\n headersForLevel = owner.columns.filter(c => c.level === i && c.rowSpan > 0 && !c.skip);\n this.printHeaders(worksheetData, headersForLevel, i, true);\n this.rowIndex++;\n }\n this.rowIndex = 0;\n for (let i = 0; i <= owner.maxLevel; i++) {\n this.rowIndex++;\n const pivotGridColumns = (_a = this.pivotGridRowHeadersMap.get(this.rowIndex)) !== null && _a !== void 0 ? _a : \"\";\n this.sheetData += `${pivotGridColumns}`;\n const allowedColumns = owner.columns.filter(c => c.headerType !== HeaderType.RowHeader && c.headerType !== HeaderType.MultiRowHeader);\n headersForLevel = hasMultiColumnHeader ?\n allowedColumns\n .filter(c => (c.level < i &&\n c.headerType !== HeaderType.MultiColumnHeader || c.level === i) && c.columnSpan > 0 && !c.skip)\n .sort((a, b) => a.startIndex - b.startIndex)\n .sort((a, b) => a.pinnedIndex - b.pinnedIndex) :\n hasUserSetIndex ?\n allowedColumns.filter(c => !c.skip) :\n allowedColumns.filter(c => !c.skip)\n .sort((a, b) => a.startIndex - b.startIndex)\n .sort((a, b) => a.pinnedIndex - b.pinnedIndex);\n this.printHeaders(worksheetData, headersForLevel, i, false);\n this.sheetData += ``;\n }\n const multiColumnHeaderLevel = worksheetData.options.ignoreMultiColumnHeaders ? 0 : owner.maxLevel;\n const freezeHeaders = worksheetData.options.freezeHeaders ? 2 + multiColumnHeaderLevel : 1;\n if (!isHierarchicalGrid) {\n const col = worksheetData.hasSummaries ? worksheetData.columnCount + 1 : worksheetData.columnCount - 1;\n this.dimension = 'A1:' + ExcelStrings.getExcelColumn(col) + (worksheetData.rowCount);\n cols += '';\n if (!hasMultiColumnHeader) {\n for (let j = 0; j < worksheetData.columnCount; j++) {\n const width = dictionary.columnWidths[j];\n // Use the width provided in the options if it exists\n let widthInTwips = worksheetData.options.columnWidth !== undefined ?\n worksheetData.options.columnWidth :\n Math.max(((width / 96) * 14.4), WorksheetFile.MIN_WIDTH);\n if (!(widthInTwips > 0)) {\n widthInTwips = WorksheetFile.MIN_WIDTH;\n }\n cols += ``;\n }\n }\n else {\n cols += ``;\n }\n const indexOfLastPinnedColumn = worksheetData.indexOfLastPinnedColumn;\n const frozenColumnCount = indexOfLastPinnedColumn + 1;\n let firstCell = ExcelStrings.getExcelColumn(frozenColumnCount) + freezeHeaders;\n if (indexOfLastPinnedColumn !== undefined && indexOfLastPinnedColumn !== -1 &&\n !worksheetData.options.ignorePinning &&\n !worksheetData.options.ignoreColumnsOrder) {\n this.freezePane =\n ``;\n }\n else if (worksheetData.options.freezeHeaders) {\n firstCell = ExcelStrings.getExcelColumn(0) + freezeHeaders;\n this.freezePane =\n ``;\n }\n }\n else {\n const columnWidth = worksheetData.options.columnWidth ? worksheetData.options.columnWidth : 20;\n cols += ``;\n if (worksheetData.options.freezeHeaders) {\n const firstCell = ExcelStrings.getExcelColumn(0) + freezeHeaders;\n this.freezePane =\n ``;\n }\n }\n if (worksheetData.hasSummaries) {\n cols += ``;\n }\n cols += '';\n this.processDataRecordsAsync(worksheetData, (rows) => {\n this.sheetData += rows;\n this.sheetData += '';\n if ((hasMultiColumnHeader || hasMultiRowHeader) && this.mergeCellsCounter > 0) {\n this.sheetData += `${this.mergeCellStr}`;\n }\n done(cols, this.sheetData);\n });\n }\n }\n processDataRecordsAsync(worksheetData, done) {\n const rowDataArr = [];\n const height = worksheetData.options.rowHeight;\n this.rowHeight = height ? ' ht=\"' + height + '\" customHeight=\"1\"' : '';\n const isHierarchicalGrid = worksheetData.isHierarchical;\n const hasUserSetIndex = worksheetData.owner.columns.some(c => c.exportIndex !== undefined);\n let recordHeaders = [];\n yieldingLoop(worksheetData.rowCount - worksheetData.multiColumnHeaderRows - 1, 1000, (i) => {\n if (!worksheetData.isEmpty) {\n if (!isHierarchicalGrid) {\n if (hasUserSetIndex) {\n recordHeaders = worksheetData.rootKeys;\n }\n else {\n recordHeaders = worksheetData.owner.columns\n .filter(c => c.headerType === HeaderType.ColumnHeader && !c.skip)\n .sort((a, b) => a.startIndex - b.startIndex)\n .sort((a, b) => a.pinnedIndex - b.pinnedIndex)\n .map(c => c.field);\n }\n }\n else {\n const record = worksheetData.data[i];\n if (record.type === ExportRecordType.HeaderRecord) {\n const recordOwner = worksheetData.owners.get(record.owner);\n const hasMultiColumnHeaders = recordOwner.columns.some(c => !c.skip && c.headerType === HeaderType.MultiColumnHeader);\n if (hasMultiColumnHeaders) {\n this.hGridPrintMultiColHeaders(worksheetData, rowDataArr, record, recordOwner);\n }\n }\n recordHeaders = Object.keys(worksheetData.data[i].data);\n }\n rowDataArr.push(this.processRow(worksheetData, i, recordHeaders, isHierarchicalGrid));\n }\n }, () => {\n done(rowDataArr.join(''));\n });\n }\n hGridPrintMultiColHeaders(worksheetData, rowDataArr, record, owner) {\n for (let j = 0; j < owner.maxLevel; j++) {\n const recordLevel = record.level;\n const outlineLevel = recordLevel > 0 ? ` outlineLevel=\"${recordLevel}\"` : '';\n this.maxOutlineLevel = this.maxOutlineLevel < recordLevel ? recordLevel : this.maxOutlineLevel;\n const sHidden = record.hidden ? ` hidden=\"1\"` : '';\n this.rowIndex++;\n let row = ``;\n const headersForLevel = owner.columns\n .filter(c => (c.level < j &&\n c.headerType !== HeaderType.MultiColumnHeader || c.level === j) && c.columnSpan > 0 && !c.skip)\n .sort((a, b) => a.startIndex - b.startIndex)\n .sort((a, b) => a.pinnedIndex - b.pinnedIndex);\n let startValue = 0 + record.level;\n for (const currentCol of headersForLevel) {\n if (currentCol.level === j) {\n let columnCoordinate;\n columnCoordinate =\n ExcelStrings.getExcelColumn(startValue) + this.rowIndex;\n const columnValue = worksheetData.dataDictionary.saveValue(currentCol.header, true);\n row += `${columnValue}`;\n if (j !== owner.maxLevel) {\n this.mergeCellsCounter++;\n this.mergeCellStr += ` `;\n }\n }\n this.mergeCellStr += `${columnCoordinate}\" />`;\n }\n }\n startValue += currentCol.columnSpan;\n }\n row += ``;\n rowDataArr.push(row);\n }\n }\n processRow(worksheetData, i, headersForLevel, isHierarchicalGrid) {\n var _a;\n const record = worksheetData.data[i];\n const rowData = new Array(worksheetData.columnCount + 2);\n const rowLevel = record.level;\n const outlineLevel = rowLevel > 0 ? ` outlineLevel=\"${rowLevel}\"` : '';\n this.maxOutlineLevel = this.maxOutlineLevel < rowLevel ? rowLevel : this.maxOutlineLevel;\n const sHidden = record.hidden ? ` hidden=\"1\"` : '';\n this.rowIndex++;\n const pivotGridColumns = (_a = this.pivotGridRowHeadersMap.get(this.rowIndex)) !== null && _a !== void 0 ? _a : \"\";\n rowData[0] = `${pivotGridColumns}`;\n const keys = worksheetData.isSpecialData ? [record.data] : headersForLevel;\n const isDataRecord = record.type === ExportRecordType.HierarchicalGridRecord\n || record.type === ExportRecordType.DataRecord\n || record.type === ExportRecordType.GroupedRecord\n || record.type === ExportRecordType.TreeGridRecord;\n const isValidRecordType = isDataRecord || record.type === ExportRecordType.SummaryRecord;\n if (isValidRecordType && worksheetData.hasSummaries) {\n this.resolveSummaryDimensions(record, isDataRecord, worksheetData.isGroupedGrid);\n }\n for (let j = 0; j < keys.length; j++) {\n const col = j + (isHierarchicalGrid ? rowLevel : worksheetData.isPivotGrid ? worksheetData.owner.maxRowLevel : 0);\n const cellData = this.getCellData(worksheetData, i, col, keys[j]);\n rowData[j + 1] = cellData;\n }\n rowData[keys.length + 1] = '';\n return rowData.join('');\n }\n getCellData(worksheetData, row, column, key) {\n var _a, _b;\n const dictionary = worksheetData.dataDictionary;\n let columnName = ExcelStrings.getExcelColumn(column) + (this.rowIndex);\n const fullRow = worksheetData.data[row];\n const isHeaderRecord = fullRow.type === ExportRecordType.HeaderRecord;\n const isSummaryRecord = fullRow.type === ExportRecordType.SummaryRecord;\n const isValidRecordType = fullRow.type === ExportRecordType.GroupedRecord\n || fullRow.type === ExportRecordType.DataRecord\n || fullRow.type === ExportRecordType.HierarchicalGridRecord\n || fullRow.type === ExportRecordType.TreeGridRecord;\n this.firstDataRow = this.firstDataRow > this.rowIndex ? this.rowIndex : this.firstDataRow;\n let cellValue = worksheetData.isSpecialData ?\n fullRow.data :\n fullRow.data[key];\n if (cellValue === GRID_LEVEL_COL || key === GRID_LEVEL_COL) {\n columnName = ExcelStrings.getExcelColumn(worksheetData.columnCount + 1) + (this.rowIndex);\n }\n if (worksheetData.hasSummaries && (isValidRecordType || (worksheetData.isGroupedGrid && isSummaryRecord))) {\n this.setSummaryCoordinates(columnName, key, fullRow.hierarchicalOwner, worksheetData.isGroupedGrid && isSummaryRecord);\n }\n if (fullRow.summaryKey && fullRow.summaryKey === GRID_ROOT_SUMMARY && key !== GRID_LEVEL_COL && !this.isValidGrid) {\n this.setRootSummaryStartCoordinate(column, key);\n if (this.firstColumn > column) {\n this.setRootSummaryStartCoordinate(worksheetData.columnCount + 1, GRID_LEVEL_COL);\n this.firstColumn = column;\n }\n }\n const targetColArr = Array.from(worksheetData.owners.values()).map(arr => arr.columns).find(product => product.some(item => item.field === key));\n const targetCol = targetColArr ? targetColArr.find(col => col.field === key) : undefined;\n if ((cellValue === undefined || cellValue === null) && !worksheetData.hasSummaries) {\n return ``;\n }\n else if ((worksheetData.hasSummaries && (isValidRecordType || isHeaderRecord)) || !worksheetData.hasSummaries) {\n const savedValue = dictionary.saveValue(cellValue, isHeaderRecord);\n const isSavedAsString = savedValue !== -1;\n const isSavedAsDate = !isSavedAsString && cellValue instanceof Date;\n let value = isSavedAsString ? savedValue : cellValue;\n if (isSavedAsDate) {\n const timeZoneOffset = value.getTimezoneOffset() * 60000;\n const isoString = (new Date(value - timeZoneOffset)).toISOString();\n value = isoString.substring(0, isoString.indexOf('.'));\n }\n const type = isSavedAsString ? ` t=\"s\"` : isSavedAsDate ? ` t=\"d\"` : '';\n const isTime = (targetCol === null || targetCol === void 0 ? void 0 : targetCol.dataType) === 'time';\n const isDateTime = (targetCol === null || targetCol === void 0 ? void 0 : targetCol.dataType) === 'dateTime';\n const isPercentage = (targetCol === null || targetCol === void 0 ? void 0 : targetCol.dataType) === 'percent';\n const isColumnCurrencyType = (targetCol === null || targetCol === void 0 ? void 0 : targetCol.dataType) === 'currency';\n const format = isPercentage ? ` s=\"12\"` : isDateTime ? ` s=\"11\"` : isTime ? ` s=\"10\"` : isHeaderRecord ? ` s=\"3\"` : isSavedAsString ? '' : isSavedAsDate ? ` s=\"2\"` : isColumnCurrencyType ? ` s=\"${((_a = this.currencyStyleMap.get(targetCol.currencyCode)) === null || _a === void 0 ? void 0 : _a.styleXf) || 0}\"` : ` s=\"1\"`;\n return `${value}`;\n }\n else {\n let summaryFunc = `\"${cellValue !== null && cellValue !== void 0 ? cellValue : \"\"}\"`;\n if (isSummaryRecord && cellValue) {\n const dimensionMapKey = this.isValidGrid ? (_b = fullRow.hierarchicalOwner) !== null && _b !== void 0 ? _b : GRID_PARENT : null;\n const level = worksheetData.isGroupedGrid ? worksheetData.maxLevel : fullRow.level;\n summaryFunc = this.getSummaryFunction(cellValue.label, key, dimensionMapKey, level, targetCol);\n if (!summaryFunc) {\n const cellStr = `${cellValue.label}: ${cellValue.value}`;\n const savedValue = dictionary.saveValue(cellStr, false);\n return `${savedValue}`;\n }\n return `${summaryFunc}`;\n }\n return `${summaryFunc}`;\n }\n }\n resolveSummaryDimensions(record, isDataRecord, isGroupedGrid) {\n if (this.isValidGrid &&\n this.currentHierarchicalOwner !== '' &&\n this.currentHierarchicalOwner !== record.owner &&\n !this.hierarchicalDimensionMap.get(this.currentHierarchicalOwner)) {\n this.hierarchicalDimensionMap.set(this.currentHierarchicalOwner, new Map(this.dimensionMap));\n }\n if (isDataRecord) {\n if (this.currentSummaryOwner !== record.summaryKey || this.currentHierarchicalOwner !== record.hierarchicalOwner) {\n this.dimensionMap.clear();\n }\n this.currentSummaryOwner = record.summaryKey;\n // For grouped grid we need to reset the parent map\n // so we can change the startCoordinate for each record\n if (isGroupedGrid && this.currentHierarchicalOwner !== '' && record.hierarchicalOwner === GRID_PARENT) {\n this.hierarchicalDimensionMap.delete(GRID_PARENT);\n }\n this.currentHierarchicalOwner = record.hierarchicalOwner;\n }\n }\n setSummaryCoordinates(columnName, key, hierarchicalOwner, useLastValidEndCoordinate) {\n var _a;\n const targetDimensionMap = (_a = this.hierarchicalDimensionMap.get(hierarchicalOwner)) !== null && _a !== void 0 ? _a : this.dimensionMap;\n if (!targetDimensionMap.get(key)) {\n const initialDimensions = {\n startCoordinate: columnName,\n endCoordinate: columnName\n };\n targetDimensionMap.set(key, initialDimensions);\n }\n else {\n if (useLastValidEndCoordinate) {\n this.setEndCoordinates(targetDimensionMap, true);\n }\n else {\n targetDimensionMap.get(key).endCoordinate = columnName;\n this.lastValidRow = targetDimensionMap.get(key).endCoordinate.match(/[a-z]+|[^a-z]+/gi)[1];\n }\n }\n if (this.isValidGrid && !useLastValidEndCoordinate && hierarchicalOwner !== GRID_PARENT) {\n const parentMap = this.hierarchicalDimensionMap.get(GRID_PARENT);\n this.setEndCoordinates(parentMap);\n }\n }\n setEndCoordinates(map, useLastValidEndCoordinate = false) {\n for (const a of map.values()) {\n const colName = a.endCoordinate.match(/[a-z]+|[^a-z]+/gi)[0];\n a.endCoordinate = `${colName}${useLastValidEndCoordinate ? this.lastValidRow : this.rowIndex}`;\n }\n }\n getSummaryFunction(type, key, dimensionMapKey, recordLevel, col) {\n const dimensionMap = dimensionMapKey ? this.hierarchicalDimensionMap.get(dimensionMapKey) : this.dimensionMap;\n const dimensions = dimensionMap.get(key);\n const levelDimensions = dimensionMap.get(GRID_LEVEL_COL);\n let func = '';\n let funcType = '';\n let result = '';\n const currencyInfo = this.currencyStyleMap.get(col.currencyCode);\n switch (type.toLowerCase()) {\n case \"count\":\n return `\"Count: \"&_xlfn.COUNTIF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}, ${recordLevel})`;\n case \"min\":\n func = `_xlfn.MIN(_xlfn.IF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}=${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate}))`;\n funcType = `\"Min: \"&`;\n result = funcType + (col.dataType === 'currency' && currencyInfo\n ? `_xlfn.TEXT(${func}, \"${currencyInfo.symbol}#,##0.00\")`\n : `${func}`);\n return result;\n case \"max\":\n func = `_xlfn.MAX(_xlfn.IF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}=${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate}))`;\n funcType = `\"Max: \"&`;\n result = funcType + (col.dataType === 'currency' && currencyInfo\n ? `_xlfn.TEXT(${func}, \"${currencyInfo.symbol}#,##0.00\")`\n : `${func}`);\n return result;\n case \"sum\":\n func = `_xlfn.SUMIF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}, ${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate})`;\n funcType = `\"Sum: \"&`;\n result = funcType + (col.dataType === 'currency' && currencyInfo\n ? `_xlfn.TEXT(${func}, \"${currencyInfo.symbol}#,##0.00\")`\n : `${func}`);\n return result;\n case \"avg\":\n func = `_xlfn.AVERAGEIF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}, ${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate})`;\n funcType = `\"Avg: \"&`;\n result = funcType + (col.dataType === 'currency' && currencyInfo\n ? `_xlfn.TEXT(${func}, \"${currencyInfo.symbol}#,##0.00\")`\n : `${func}`);\n return result;\n case \"earliest\":\n // TODO: get date format from locale\n return `\"Earliest: \"&_xlfn.TEXT(_xlfn.MIN(_xlfn.IF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}=${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate})), \"m/d/yyyy\")`;\n case \"latest\":\n // TODO: get date format from locale\n return `\"Latest: \"&_xlfn.TEXT(_xlfn.MAX(_xlfn.IF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}=${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate})), \"m/d/yyyy\")`;\n }\n }\n setRootSummaryStartCoordinate(column, key) {\n const firstDataRecordColName = ExcelStrings.getExcelColumn(column) + (this.firstDataRow);\n if (this.dimensionMap.get(key).startCoordinate !== firstDataRecordColName) {\n this.dimensionMap.get(key).startCoordinate = firstDataRecordColName;\n }\n }\n printHeaders(worksheetData, headersForLevel, i, isVertical) {\n var _a, _b;\n let startValue = 0;\n let str = '';\n const isHierarchicalGrid = worksheetData.isHierarchical;\n let rowStyle = isHierarchicalGrid ? ' s=\"3\"' : '';\n const dictionary = worksheetData.dataDictionary;\n const owner = worksheetData.owner;\n const maxLevel = isVertical\n ? owner.maxRowLevel\n : owner.maxLevel;\n for (const currentCol of headersForLevel) {\n const spanLength = isVertical ? currentCol.rowSpan : currentCol.columnSpan;\n if (currentCol.level === i) {\n let columnCoordinate;\n const column = isVertical\n ? this.rowIndex\n : startValue + ((_a = owner.maxRowLevel) !== null && _a !== void 0 ? _a : 0);\n const rowCoordinate = isVertical\n ? startValue + owner.maxLevel + 2\n : this.rowIndex;\n const columnValue = dictionary.saveValue(currentCol.header, true, false);\n columnCoordinate = (currentCol.field === GRID_LEVEL_COL\n ? ExcelStrings.getExcelColumn(worksheetData.columnCount + 1)\n : ExcelStrings.getExcelColumn(column)) + rowCoordinate;\n rowStyle = isVertical && currentCol.rowSpan > 1 ? ' s=\"4\"' : rowStyle;\n str = `${columnValue}`;\n if (isVertical) {\n if (this.pivotGridRowHeadersMap.has(rowCoordinate)) {\n this.pivotGridRowHeadersMap.set(rowCoordinate, this.pivotGridRowHeadersMap.get(rowCoordinate) + str);\n }\n else {\n this.pivotGridRowHeadersMap.set(rowCoordinate, str);\n }\n }\n else {\n this.sheetData += str;\n }\n if (i !== maxLevel) {\n this.mergeCellsCounter++;\n this.mergeCellStr += ` `;\n isVertical\n ? this.pivotGridRowHeadersMap.set(row, str)\n : this.sheetData += str;\n }\n }\n this.mergeCellStr += `${columnCoordinate}\" />`;\n }\n }\n startValue += spanLength;\n }\n }\n}\nWorksheetFile.MIN_WIDTH = 8.43;\n/**\n * @hidden\n */\nclass StyleFile {\n writeElement(folder) {\n folder['styles.xml'] = strToU8(ExcelStrings.getStyles());\n }\n}\n/**\n * @hidden\n */\nclass WorkbookFile {\n writeElement(folder, worksheetData) {\n folder['workbook.xml'] = strToU8(ExcelStrings.getWorkbook(worksheetData.options.worksheetName));\n }\n}\n/**\n * @hidden\n */\nclass ContentTypesFile {\n writeElement(folder, worksheetData) {\n const hasSharedStrings = !worksheetData.isEmpty || worksheetData.options.alwaysExportHeaders;\n folder['[Content_Types].xml'] = strToU8(ExcelStrings.getContentTypesXML(hasSharedStrings, worksheetData.options.exportAsTable));\n }\n}\n/**\n * @hidden\n */\nclass SharedStringsFile {\n writeElement(folder, worksheetData) {\n const dict = worksheetData.dataDictionary;\n const sortedValues = dict.getKeys();\n const sharedStrings = new Array(sortedValues.length);\n for (const value of sortedValues) {\n sharedStrings[dict.getSanitizedValue(value)] = '' + value + '';\n }\n folder['sharedStrings.xml'] = strToU8(ExcelStrings.getSharedStringXML(dict.stringsCount, sortedValues.length, sharedStrings.join('')));\n }\n}\n/**\n * @hidden\n */\nclass TablesFile {\n writeElement(folder, worksheetData) {\n const columnCount = worksheetData.columnCount;\n const lastColumn = ExcelStrings.getExcelColumn(columnCount - 1) + worksheetData.rowCount;\n const autoFilterDimension = 'A1:' + lastColumn;\n const tableDimension = worksheetData.isEmpty\n ? 'A1:' + ExcelStrings.getExcelColumn(columnCount - 1) + (worksheetData.rowCount + 1)\n : autoFilterDimension;\n const hasUserSetIndex = worksheetData.owner.columns.some(c => c.exportIndex !== undefined);\n const values = hasUserSetIndex\n ? worksheetData.rootKeys\n : worksheetData.owner.columns\n .filter(c => !c.skip)\n .sort((a, b) => a.startIndex - b.startIndex)\n .sort((a, b) => a.pinnedIndex - b.pinnedIndex)\n .map(c => c.header);\n let sortString = '';\n let tableColumns = '';\n for (let i = 0; i < columnCount; i++) {\n const value = values[i];\n tableColumns += '';\n }\n tableColumns += '';\n if (worksheetData.sort) {\n const sortingExpression = worksheetData.sort;\n const sc = ExcelStrings.getExcelColumn(values.indexOf(sortingExpression.fieldName));\n const dir = sortingExpression.dir - 1;\n sortString = ``;\n }\n folder['table1.xml'] = strToU8(ExcelStrings.getTablesXML(autoFilterDimension, tableDimension, tableColumns, sortString));\n }\n}\n/**\n * @hidden\n */\nclass WorksheetRelsFile {\n writeElement(folder) {\n folder['sheet1.xml.rels'] = strToU8(ExcelStrings.getWorksheetRels());\n }\n}\n\n/** @hidden */\nclass RootExcelFolder {\n get folderName() {\n return '';\n }\n childFiles() {\n return [ExcelFileTypes.ContentTypesFile];\n }\n childFolders() {\n return [\n ExcelFolderTypes.RootRelsExcelFolder,\n ExcelFolderTypes.DocPropsExcelFolder,\n ExcelFolderTypes.XLExcelFolder\n ];\n }\n}\n/** @hidden */\nclass RootRelsExcelFolder {\n get folderName() {\n return '_rels';\n }\n childFiles() {\n return [ExcelFileTypes.RootRelsFile];\n }\n childFolders() {\n return [];\n }\n}\n/** @hidden */\nclass DocPropsExcelFolder {\n get folderName() {\n return 'docProps';\n }\n childFiles() {\n return [\n ExcelFileTypes.AppFile,\n ExcelFileTypes.CoreFile\n ];\n }\n childFolders() {\n return [];\n }\n}\n/** @hidden */\nclass XLExcelFolder {\n get folderName() {\n return 'xl';\n }\n childFiles(data) {\n const retVal = [\n ExcelFileTypes.StyleFile,\n ExcelFileTypes.WorkbookFile\n ];\n if (!data.isEmpty || data.options.alwaysExportHeaders) {\n retVal.push(ExcelFileTypes.SharedStringsFile);\n }\n return retVal;\n }\n childFolders(data) {\n const retVal = [\n ExcelFolderTypes.XLRelsExcelFolder,\n ExcelFolderTypes.ThemeExcelFolder,\n ExcelFolderTypes.WorksheetsExcelFolder\n ];\n if ((!data.isEmpty || data.options.alwaysExportHeaders) && data.options.exportAsTable) {\n retVal.push(ExcelFolderTypes.TablesExcelFolder);\n }\n return retVal;\n }\n}\n/** @hidden */\nclass XLRelsExcelFolder {\n get folderName() {\n return '_rels';\n }\n childFiles() {\n return [ExcelFileTypes.WorkbookRelsFile];\n }\n childFolders() {\n return [];\n }\n}\n/** @hidden */\nclass ThemeExcelFolder {\n get folderName() {\n return 'theme';\n }\n childFiles() {\n return [ExcelFileTypes.ThemeFile];\n }\n childFolders() {\n return [];\n }\n}\n/** @hidden */\nclass WorksheetsExcelFolder {\n get folderName() {\n return 'worksheets';\n }\n childFiles() {\n return [ExcelFileTypes.WorksheetFile];\n }\n childFolders(data) {\n return (data.isEmpty && !data.options.alwaysExportHeaders) || !data.options.exportAsTable ? [] : [ExcelFolderTypes.WorksheetsRelsExcelFolder];\n }\n}\n/** @hidden */\nclass TablesExcelFolder {\n get folderName() {\n return 'tables';\n }\n childFiles() {\n return [ExcelFileTypes.TablesFile];\n }\n childFolders() {\n return [];\n }\n}\n/** @hidden */\nclass WorksheetsRelsExcelFolder {\n get folderName() {\n return '_rels';\n }\n childFiles() {\n return [ExcelFileTypes.WorksheetRelsFile];\n }\n childFolders() {\n return [];\n }\n}\n\n/** @hidden */\nclass ExcelElementsFactory {\n static getExcelFolder(type) {\n switch (type) {\n case ExcelFolderTypes.RootExcelFolder:\n return new RootExcelFolder();\n case ExcelFolderTypes.RootRelsExcelFolder:\n return new RootRelsExcelFolder();\n case ExcelFolderTypes.DocPropsExcelFolder:\n return new DocPropsExcelFolder();\n case ExcelFolderTypes.XLExcelFolder:\n return new XLExcelFolder();\n case ExcelFolderTypes.XLRelsExcelFolder:\n return new XLRelsExcelFolder();\n case ExcelFolderTypes.ThemeExcelFolder:\n return new ThemeExcelFolder();\n case ExcelFolderTypes.WorksheetsExcelFolder:\n return new WorksheetsExcelFolder();\n case ExcelFolderTypes.WorksheetsRelsExcelFolder:\n return new WorksheetsRelsExcelFolder();\n case ExcelFolderTypes.TablesExcelFolder:\n return new TablesExcelFolder();\n default:\n throw new Error('Unknown excel folder type!');\n }\n }\n static getExcelFile(type) {\n switch (type) {\n case ExcelFileTypes.RootRelsFile:\n return new RootRelsFile();\n case ExcelFileTypes.AppFile:\n return new AppFile();\n case ExcelFileTypes.CoreFile:\n return new CoreFile();\n case ExcelFileTypes.WorkbookRelsFile:\n return new WorkbookRelsFile();\n case ExcelFileTypes.ThemeFile:\n return new ThemeFile();\n case ExcelFileTypes.WorksheetFile:\n return new WorksheetFile();\n case ExcelFileTypes.StyleFile:\n return new StyleFile();\n case ExcelFileTypes.WorkbookFile:\n return new WorkbookFile();\n case ExcelFileTypes.ContentTypesFile:\n return new ContentTypesFile();\n case ExcelFileTypes.SharedStringsFile:\n return new SharedStringsFile();\n case ExcelFileTypes.WorksheetRelsFile:\n return new WorksheetRelsFile();\n case ExcelFileTypes.TablesFile:\n return new TablesFile();\n default:\n throw Error('Unknown excel file type!');\n }\n }\n}\n\n/** @hidden */\nclass WorksheetDataDictionary {\n constructor(columnCount, columnWidth, columnWidthsList) {\n this.hasNumberValues = false;\n this.hasDateValues = false;\n this._dictionary = {};\n this._widthsDictionary = {};\n this._counter = 0;\n this.dirtyKeyCollections();\n this._columnWidths = new Array(columnCount);\n if (columnWidth) {\n this._columnWidths.fill(columnWidth);\n }\n else {\n this._columnWidths = columnWidthsList;\n }\n this.stringsCount = 0;\n }\n get columnWidths() {\n return this._columnWidths;\n }\n saveValue(value, isHeader, shouldSanitizeValue = true) {\n let sanitizedValue = '';\n const isDate = value instanceof Date;\n const isSavedAsString = isHeader || (typeof value !== 'number' && value !== Number(value) && !Number.isFinite(value) && !isDate);\n if (isSavedAsString) {\n sanitizedValue = shouldSanitizeValue ? ExportUtilities.sanitizeValue(value) : value;\n if (this._dictionary[sanitizedValue] === undefined) {\n this._dictionary[sanitizedValue] = this._counter++;\n this.dirtyKeyCollections();\n }\n this.stringsCount++;\n }\n else if (isDate) {\n this.hasDateValues = true;\n }\n else {\n this.hasNumberValues = true;\n }\n return isSavedAsString ? this.getSanitizedValue(sanitizedValue) : -1;\n }\n getValue(value) {\n return this.getSanitizedValue(ExportUtilities.sanitizeValue(value));\n }\n getSanitizedValue(sanitizedValue) {\n return this._dictionary[sanitizedValue];\n }\n getKeys() {\n if (!this._keysAreValid) {\n this._keys = Object.keys(this._dictionary);\n this._keysAreValid = true;\n }\n return this._keys;\n }\n getTextWidth(value) {\n if (this._widthsDictionary[value] === undefined) {\n const context = this.getContext();\n const metrics = context.measureText(value);\n this._widthsDictionary[value] = metrics.width + WorksheetDataDictionary.TEXT_PADDING;\n }\n return this._widthsDictionary[value];\n }\n getContext() {\n if (!this._context) {\n const canvas = document.createElement('canvas');\n this._context = canvas.getContext('2d');\n this._context.font = WorksheetDataDictionary.DEFAULT_FONT;\n }\n return this._context;\n }\n dirtyKeyCollections() {\n this._keysAreValid = false;\n }\n}\nWorksheetDataDictionary.DEFAULT_FONT = '11pt Calibri';\nWorksheetDataDictionary.TEXT_PADDING = 5;\n\n/** @hidden */\nclass WorksheetData {\n constructor(_data, options, sort, columnCount, rootKeys, indexOfLastPinnedColumn, columnWidths, owner, owners) {\n this._data = _data;\n this.options = options;\n this.sort = sort;\n this.columnCount = columnCount;\n this.rootKeys = rootKeys;\n this.indexOfLastPinnedColumn = indexOfLastPinnedColumn;\n this.columnWidths = columnWidths;\n this.owner = owner;\n this.owners = owners;\n this.initializeData();\n }\n get data() {\n return this._data;\n }\n get rowCount() {\n return this._rowCount;\n }\n get isEmpty() {\n return !this.rowCount\n || this.rowCount === this.owner.maxLevel + 1\n || !this.columnCount\n || this.owner.columns.every(c => c.skip);\n }\n get isSpecialData() {\n return this._isSpecialData;\n }\n get dataDictionary() {\n return this._dataDictionary;\n }\n get hasMultiColumnHeader() {\n return this._hasMultiColumnHeader;\n }\n get hasSummaries() {\n return this._hasSummaries;\n }\n get hasMultiRowHeader() {\n return this._hasMultiRowHeader;\n }\n get isHierarchical() {\n return this._isHierarchical;\n }\n get isTreeGrid() {\n return this._isTreeGrid;\n }\n get isPivotGrid() {\n return this._isPivotGrid;\n }\n get isGroupedGrid() {\n return this._data.some(d => d.type === ExportRecordType.GroupedRecord);\n }\n get maxLevel() {\n return [...new Set(this._data.map(item => item.level))].sort((a, b) => (a > b ? -1 : 1))[0];\n }\n get multiColumnHeaderRows() {\n return !this.options.ignoreMultiColumnHeaders ? Array.from(this.owners.values()).map(c => c.maxLevel).reduce((a, b) => a + b) : 0;\n }\n initializeData() {\n var _a, _b;\n this._dataDictionary = new WorksheetDataDictionary(this.columnCount, this.options.columnWidth, this.columnWidths);\n this._hasMultiColumnHeader = Array.from(this.owners.values())\n .some(o => o.columns.some(col => !col.skip && col.headerType === HeaderType.MultiColumnHeader));\n this._hasMultiRowHeader = Array.from(this.owners.values())\n .some(o => o.columns.some(col => !col.skip && col.headerType === HeaderType.MultiRowHeader));\n this._isHierarchical = ((_a = this.data[0]) === null || _a === void 0 ? void 0 : _a.type) === ExportRecordType.HierarchicalGridRecord\n || !(typeof (Array.from(this.owners.keys())[0]) === 'string');\n this._hasSummaries = this._data.filter(d => d.type === ExportRecordType.SummaryRecord).length > 0;\n this._isTreeGrid = this._data.filter(d => d.type === ExportRecordType.TreeGridRecord).length > 0;\n this._isPivotGrid = ((_b = this.data[0]) === null || _b === void 0 ? void 0 : _b.type) === ExportRecordType.PivotGridRecord;\n const exportMultiColumnHeaders = this._hasMultiColumnHeader && !this.options.ignoreMultiColumnHeaders;\n if (this._isHierarchical || exportMultiColumnHeaders || this._isPivotGrid) {\n this.options.exportAsTable = false;\n }\n if (!this._data || this._data.length === 0) {\n if (!this._isHierarchical) {\n this._rowCount = this.owner.maxLevel + 1;\n }\n return;\n }\n this._isSpecialData = ExportUtilities.isSpecialData(this._data[0].data);\n this._rowCount = this._data.length + this.multiColumnHeaderRows + 1;\n }\n}\n\nconst EXCEL_MAX_ROWS = 1048576;\nconst EXCEL_MAX_COLS = 16384;\n/**\n * **Ignite UI for Angular Excel Exporter Service** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/exporter_excel.html)\n *\n * The Ignite UI for Angular Excel Exporter service can export data in Microsoft® Excel® format from both raw data\n * (array) or from an `IgxGrid`.\n *\n * Example:\n * ```typescript\n * public localData = [\n * { Name: \"Eric Ridley\", Age: \"26\" },\n * { Name: \"Alanis Brook\", Age: \"22\" },\n * { Name: \"Jonathan Morris\", Age: \"23\" }\n * ];\n *\n * constructor(private excelExportService: IgxExcelExporterService) {\n * }\n *\n * this.excelExportService.exportData(this.localData, new IgxExcelExporterOptions(\"FileName\"));\n * ```\n */\nclass IgxExcelExporterService extends IgxBaseExporter {\n constructor() {\n super(...arguments);\n /**\n * This event is emitted when the export process finishes.\n * ```typescript\n * this.exporterService.exportEnded.subscribe((args: IExcelExportEndedEventArgs) => {\n * // put event handler code here\n * });\n * ```\n *\n * @memberof IgxExcelExporterService\n */\n this.exportEnded = new EventEmitter();\n }\n static populateZipFileConfig(fileStructure, folder, worksheetData) {\n return __awaiter(this, void 0, void 0, function* () {\n for (const childFolder of folder.childFolders(worksheetData)) {\n const folderInstance = ExcelElementsFactory.getExcelFolder(childFolder);\n const childStructure = fileStructure[folderInstance.folderName] = {};\n yield IgxExcelExporterService.populateZipFileConfig(childStructure, folderInstance, worksheetData);\n }\n for (const childFile of folder.childFiles(worksheetData)) {\n const fileInstance = ExcelElementsFactory.getExcelFile(childFile);\n if (fileInstance instanceof WorksheetFile) {\n yield fileInstance.writeElementAsync(fileStructure, worksheetData);\n }\n else {\n fileInstance.writeElement(fileStructure, worksheetData);\n }\n }\n });\n }\n exportDataImplementation(data, options, done) {\n const firstDataElement = data[0];\n const isHierarchicalGrid = (firstDataElement === null || firstDataElement === void 0 ? void 0 : firstDataElement.type) === ExportRecordType.HierarchicalGridRecord;\n const isPivotGrid = (firstDataElement === null || firstDataElement === void 0 ? void 0 : firstDataElement.type) === ExportRecordType.PivotGridRecord;\n let rootKeys;\n let columnCount;\n let columnWidths;\n let indexOfLastPinnedColumn;\n let defaultOwner;\n const columnsExceedLimit = typeof firstDataElement !== 'undefined' ?\n isHierarchicalGrid ?\n data.some(d => Object.keys(d.data).length > EXCEL_MAX_COLS) :\n Object.keys(firstDataElement.data).length > EXCEL_MAX_COLS :\n false;\n if (data.length > EXCEL_MAX_ROWS || columnsExceedLimit) {\n throw Error('The Excel file can contain up to 1,048,576 rows and 16,384 columns.');\n }\n if (typeof firstDataElement !== 'undefined') {\n let maxLevel = 0;\n data.forEach((r) => {\n maxLevel = Math.max(maxLevel, r.level);\n });\n if (maxLevel > 7) {\n throw Error('Can create an outline of up to eight levels!');\n }\n if (isHierarchicalGrid) {\n columnCount = data\n .map(a => this._ownersMap.get(a.owner).columns.filter(c => !c.skip).length + a.level)\n .sort((a, b) => b - a)[0];\n rootKeys = this._ownersMap.get(firstDataElement.owner).columns.filter(c => !c.skip).map(c => c.field);\n defaultOwner = this._ownersMap.get(firstDataElement.owner);\n }\n else {\n defaultOwner = this._ownersMap.get(DEFAULT_OWNER);\n const columns = defaultOwner.columns.filter(col => col.field !== GRID_LEVEL_COL && !col.skip && col.headerType === HeaderType.ColumnHeader);\n columnWidths = defaultOwner.columnWidths;\n indexOfLastPinnedColumn = defaultOwner.indexOfLastPinnedColumn;\n columnCount = isPivotGrid ? columns.length + this.pivotGridFilterFieldsCount : columns.length;\n rootKeys = columns.map(c => c.field);\n }\n }\n else {\n const ownersKeys = Array.from(this._ownersMap.keys());\n defaultOwner = this._ownersMap.get(ownersKeys[0]);\n columnWidths = defaultOwner.columnWidths;\n columnCount = defaultOwner.columns.filter(col => col.field !== GRID_LEVEL_COL && !col.skip && col.headerType === HeaderType.ColumnHeader).length;\n }\n const worksheetData = new WorksheetData(data, options, this._sort, columnCount, rootKeys, indexOfLastPinnedColumn, columnWidths, defaultOwner, this._ownersMap);\n const rootFolder = ExcelElementsFactory.getExcelFolder(ExcelFolderTypes.RootExcelFolder);\n const fileData = {};\n IgxExcelExporterService.populateZipFileConfig(fileData, rootFolder, worksheetData)\n .then(() => {\n zip(fileData, (_, result) => {\n this.saveFile(result, options.fileName);\n this.exportEnded.emit({ xlsx: fileData });\n done();\n });\n });\n }\n saveFile(data, fileName) {\n const blob = new Blob([data], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n });\n ExportUtilities.saveBlobToFile(blob, fileName);\n }\n}\nIgxExcelExporterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelExporterService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\nIgxExcelExporterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelExporterService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelExporterService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n\n/**\n * Objects of this class are used to configure the Excel exporting process.\n */\nclass IgxExcelExporterOptions extends IgxExporterOptionsBase {\n constructor(fileName) {\n super(fileName, '.xlsx');\n /**\n * Specifies if column pinning should be ignored. If ignoreColumnsOrder is set to true,\n * this option will always be considered as set to true.\n * ```typescript\n * let ignorePinning = this.exportOptions.ignorePinning;\n * this.exportOptions.ignorePinning = true;\n * ```\n *\n * @memberof IgxExcelExporterOptions\n */\n this.ignorePinning = false;\n /**\n * Specifies whether the exported data should be formatted as Excel table. (True by default)\n * ```typescript\n * let exportAsTable = this.exportOptions.exportAsTable;\n * this.exportOptions.exportAsTable = false;\n * ```\n *\n * @memberof IgxExcelExporterOptions\n */\n this.exportAsTable = true;\n }\n /**\n * Gets the width of the columns in the exported excel file.\n * ```typescript\n * let width = this.exportOptions.columnWidth;\n * ```\n *\n * @memberof IgxExcelExporterOptions\n */\n get columnWidth() {\n return this._columnWidth;\n }\n /**\n * Sets the width of the columns in the exported excel file. If left unspecified,\n * the width of the column or the default width of the excel columns will be used.\n * ```typescript\n * this.exportOptions.columnWidth = 55;\n * ```\n *\n * @memberof IgxExcelExporterOptions\n */\n set columnWidth(value) {\n if (value < 0) {\n throw Error('Invalid value for column width!');\n }\n this._columnWidth = value;\n }\n /**\n * Gets the height of the rows in the exported excel file.\n * ```typescript\n * let height = this.exportOptions.rowHeight;\n * ```\n *\n * @memberof IgxExcelExporterOptions\n */\n get rowHeight() {\n return this._rowHeight;\n }\n /**\n * Sets the height of the rows in the exported excel file. If left unspecified or 0,\n * the default height of the excel rows will be used.\n * ```typescript\n * this.exportOptions.rowHeight = 25;\n * ```\n *\n * @memberof IgxExcelExporterOptions\n */\n set rowHeight(value) {\n if (value < 0) {\n throw Error('Invalid value for row height!');\n }\n this._rowHeight = value;\n }\n /**\n * Gets the name of the worksheet in the exported excel file.\n * ```typescript\n * let worksheetName = this.exportOptions.worksheetName;\n * ```\n *\n * @memberof IgxExcelExporterOptions\n */\n get worksheetName() {\n if (this._worksheetName === undefined || this._worksheetName === null) {\n return 'Sheet1';\n }\n return this._worksheetName;\n }\n /**\n * Sets the name of the worksheet in the exported excel file.\n * ```typescript\n * this.exportOptions.worksheetName = \"Worksheet\";\n * ```\n *\n * @memberof IgxExcelExporterOptions\n */\n set worksheetName(value) {\n this._worksheetName = value;\n }\n}\n\nclass IgxAngularAnimationPlayer {\n get position() {\n return this._innerPlayer.getPosition();\n }\n set position(value) {\n this.internalPlayer.setPosition(value);\n }\n constructor(internalPlayer) {\n this.internalPlayer = internalPlayer;\n this.animationStart = new EventEmitter();\n this.animationEnd = new EventEmitter();\n this.internalPlayer.onDone(() => this.onDone());\n const innerRenderer = this.internalPlayer._renderer;\n // We need inner player as Angular.AnimationPlayer.getPosition returns always 0.\n // To workaround this we are getting the positions from the inner player.\n // This is logged in Angular here - https://github.com/angular/angular/issues/18891\n // As soon as this is resolved we can remove this hack\n this._innerPlayer = innerRenderer.engine.players[innerRenderer.engine.players.length - 1];\n }\n init() {\n this.internalPlayer.init();\n }\n play() {\n this.animationStart.emit({ owner: this });\n this.internalPlayer.play();\n }\n finish() {\n this.internalPlayer.finish();\n // TODO: when animation finish angular deletes all onDone handlers. Add handlers again if needed\n }\n reset() {\n this.internalPlayer.reset();\n // calling reset does not change hasStarted to false. This is why we are doing it here via internal field\n this.internalPlayer._started = false;\n }\n destroy() {\n this.internalPlayer.destroy();\n }\n hasStarted() {\n return this.internalPlayer.hasStarted();\n }\n onDone() {\n this.animationEnd.emit({ owner: this });\n }\n}\n\nclass IgxAngularAnimationService {\n constructor(builder) {\n this.builder = builder;\n }\n buildAnimation(animationMetaData, element) {\n if (!animationMetaData) {\n return null;\n }\n const animationBuilder = this.builder.build(animationMetaData);\n const player = new IgxAngularAnimationPlayer(animationBuilder.create(element));\n return player;\n }\n}\nIgxAngularAnimationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAngularAnimationService, deps: [{ token: i1.AnimationBuilder }], target: i0.ɵɵFactoryTarget.Injectable });\nIgxAngularAnimationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAngularAnimationService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAngularAnimationService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: i1.AnimationBuilder }]; } });\n\nvar HorizontalAlignment;\n(function (HorizontalAlignment) {\n HorizontalAlignment[HorizontalAlignment[\"Left\"] = -1] = \"Left\";\n HorizontalAlignment[HorizontalAlignment[\"Center\"] = -0.5] = \"Center\";\n HorizontalAlignment[HorizontalAlignment[\"Right\"] = 0] = \"Right\";\n})(HorizontalAlignment || (HorizontalAlignment = {}));\nvar VerticalAlignment;\n(function (VerticalAlignment) {\n VerticalAlignment[VerticalAlignment[\"Top\"] = -1] = \"Top\";\n VerticalAlignment[VerticalAlignment[\"Middle\"] = -0.5] = \"Middle\";\n VerticalAlignment[VerticalAlignment[\"Bottom\"] = 0] = \"Bottom\";\n})(VerticalAlignment || (VerticalAlignment = {}));\n/**\n * Defines the possible values of the overlays' position strategy.\n */\nvar RelativePositionStrategy;\n(function (RelativePositionStrategy) {\n RelativePositionStrategy[\"Connected\"] = \"connected\";\n RelativePositionStrategy[\"Auto\"] = \"auto\";\n RelativePositionStrategy[\"Elastic\"] = \"elastic\";\n})(RelativePositionStrategy || (RelativePositionStrategy = {}));\n/**\n * Defines the possible positions for the relative overlay settings presets.\n */\nvar RelativePosition;\n(function (RelativePosition) {\n RelativePosition[\"Above\"] = \"above\";\n RelativePosition[\"Below\"] = \"below\";\n RelativePosition[\"Before\"] = \"before\";\n RelativePosition[\"After\"] = \"after\";\n RelativePosition[\"Default\"] = \"default\";\n})(RelativePosition || (RelativePosition = {}));\n/**\n * Defines the possible positions for the absolute overlay settings presets.\n */\nvar AbsolutePosition;\n(function (AbsolutePosition) {\n AbsolutePosition[\"Bottom\"] = \"bottom\";\n AbsolutePosition[\"Top\"] = \"top\";\n AbsolutePosition[\"Center\"] = \"center\";\n})(AbsolutePosition || (AbsolutePosition = {}));\n// TODO: make this interface\nclass Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n}\n/** @hidden @internal */\nclass Util {\n /**\n * Calculates the rectangle of target for provided overlay settings. Defaults to 0,0,0,0,0,0 rectangle\n * if no target is provided\n *\n * @param settings Overlay settings for which to calculate target rectangle\n */\n static getTargetRect(target) {\n let targetRect = {\n bottom: 0,\n height: 0,\n left: 0,\n right: 0,\n top: 0,\n width: 0\n };\n if (target instanceof HTMLElement) {\n targetRect = target.getBoundingClientRect();\n }\n else if (target instanceof Point) {\n const targetPoint = target;\n targetRect = {\n bottom: targetPoint.y,\n height: 0,\n left: targetPoint.x,\n right: targetPoint.x,\n top: targetPoint.y,\n width: 0\n };\n }\n return targetRect;\n }\n static getViewportRect(document) {\n const width = document.documentElement.clientWidth;\n const height = document.documentElement.clientHeight;\n const scrollPosition = Util.getViewportScrollPosition(document);\n return {\n top: scrollPosition.y,\n left: scrollPosition.x,\n right: scrollPosition.x + width,\n bottom: scrollPosition.y + height,\n width,\n height,\n };\n }\n static getViewportScrollPosition(document) {\n const documentElement = document.documentElement;\n const documentRect = documentElement.getBoundingClientRect();\n const horizontalScrollPosition = -documentRect.left || document.body.scrollLeft || window.scrollX || documentElement.scrollLeft || 0;\n const verticalScrollPosition = -documentRect.top || document.body.scrollTop || window.scrollY || documentElement.scrollTop || 0;\n return new Point(horizontalScrollPosition, verticalScrollPosition);\n }\n static cloneInstance(object) {\n const clonedObj = Object.assign(Object.create(Object.getPrototypeOf(object)), object);\n clonedObj.settings = cloneValue(clonedObj.settings);\n return clonedObj;\n }\n}\n\n/**\n * Positions the element based on the directions and start point passed in trough PositionSettings.\n * It is possible to either pass a start point or an HTMLElement as a positioning base.\n */\nclass ConnectedPositioningStrategy {\n constructor(settings) {\n this._defaultSettings = {\n horizontalDirection: HorizontalAlignment.Right,\n verticalDirection: VerticalAlignment.Bottom,\n horizontalStartPoint: HorizontalAlignment.Left,\n verticalStartPoint: VerticalAlignment.Bottom,\n openAnimation: scaleInVerTop,\n closeAnimation: scaleOutVerTop,\n minSize: { width: 0, height: 0 }\n };\n this.settings = Object.assign({}, this._defaultSettings, settings);\n }\n /**\n * Position the element based on the PositionStrategy implementing this interface.\n *\n * @param contentElement The HTML element to be positioned\n * @param size Size of the element\n * @param document reference to the Document object\n * @param initialCall should be true if this is the initial call to the method\n * @param target attaching target for the component to show\n * ```typescript\n * settings.positionStrategy.position(content, size, document, true);\n * ```\n */\n position(contentElement, size, document, initialCall, target) {\n const targetElement = target || this.settings.target;\n const rects = this.calculateElementRectangles(contentElement, targetElement);\n this.setStyle(contentElement, rects.targetRect, rects.elementRect, {});\n }\n /**\n * Creates clone of this position strategy\n * @returns clone of this position strategy\n */\n clone() {\n return Util.cloneInstance(this);\n }\n /**\n * Obtains the DomRect objects for the required elements - target and element to position\n *\n * @returns target and element DomRect objects\n */\n calculateElementRectangles(contentElement, target) {\n return {\n targetRect: Util.getTargetRect(target),\n elementRect: contentElement.getBoundingClientRect()\n };\n }\n /**\n * Sets element's style which effectively positions provided element according\n * to provided position settings\n *\n * @param element Element to position\n * @param targetRect Bounding rectangle of strategy target\n * @param elementRect Bounding rectangle of the element\n */\n setStyle(element, targetRect, elementRect, connectedFit) {\n const horizontalOffset = connectedFit.horizontalOffset ? connectedFit.horizontalOffset : 0;\n const verticalOffset = connectedFit.verticalOffset ? connectedFit.verticalOffset : 0;\n const startPoint = {\n x: targetRect.right + targetRect.width * this.settings.horizontalStartPoint + horizontalOffset,\n y: targetRect.bottom + targetRect.height * this.settings.verticalStartPoint + verticalOffset\n };\n const wrapperRect = element.parentElement.getBoundingClientRect();\n // clean up styles - if auto position strategy is chosen we may pass here several times\n element.style.right = '';\n element.style.left = '';\n element.style.bottom = '';\n element.style.top = '';\n switch (this.settings.horizontalDirection) {\n case HorizontalAlignment.Left:\n element.style.right = `${Math.round(wrapperRect.right - startPoint.x)}px`;\n break;\n case HorizontalAlignment.Center:\n element.style.left = `${Math.round(startPoint.x - wrapperRect.left - elementRect.width / 2)}px`;\n break;\n case HorizontalAlignment.Right:\n element.style.left = `${Math.round(startPoint.x - wrapperRect.left)}px`;\n break;\n }\n switch (this.settings.verticalDirection) {\n case VerticalAlignment.Top:\n element.style.bottom = `${Math.round(wrapperRect.bottom - startPoint.y)}px`;\n break;\n case VerticalAlignment.Middle:\n element.style.top = `${Math.round(startPoint.y - wrapperRect.top - elementRect.height / 2)}px`;\n break;\n case VerticalAlignment.Bottom:\n element.style.top = `${Math.round(startPoint.y - wrapperRect.top)}px`;\n break;\n }\n }\n}\n\nclass BaseFitPositionStrategy extends ConnectedPositioningStrategy {\n /**\n * Position the element based on the PositionStrategy implementing this interface.\n *\n * @param contentElement The HTML element to be positioned\n * @param size Size of the element\n * @param document reference to the Document object\n * @param initialCall should be true if this is the initial call to the method\n * @param target attaching target for the component to show\n * ```typescript\n * settings.positionStrategy.position(content, size, document, true);\n * ```\n */\n position(contentElement, size, document, initialCall, target) {\n const targetElement = target || this.settings.target;\n const rects = super.calculateElementRectangles(contentElement, targetElement);\n const connectedFit = {};\n if (initialCall) {\n connectedFit.targetRect = rects.targetRect;\n connectedFit.contentElementRect = rects.elementRect;\n this._initialSettings = this._initialSettings || Object.assign({}, this.settings);\n this.settings = Object.assign({}, this._initialSettings);\n connectedFit.viewPortRect = Util.getViewportRect(document);\n this.updateViewPortFit(connectedFit);\n if (this.shouldFitInViewPort(connectedFit)) {\n this.fitInViewport(contentElement, connectedFit);\n }\n }\n this.setStyle(contentElement, rects.targetRect, rects.elementRect, connectedFit);\n }\n /**\n * Checks if element can fit in viewport and updates provided connectedFit\n * with the result\n *\n * @param connectedFit connectedFit to update\n */\n updateViewPortFit(connectedFit) {\n connectedFit.left = this.calculateLeft(connectedFit.targetRect, connectedFit.contentElementRect, this.settings.horizontalStartPoint, this.settings.horizontalDirection, connectedFit.horizontalOffset ? connectedFit.horizontalOffset : 0);\n connectedFit.right = connectedFit.left + connectedFit.contentElementRect.width;\n connectedFit.fitHorizontal = {\n back: Math.round(connectedFit.left),\n forward: Math.round(connectedFit.viewPortRect.width - connectedFit.right)\n };\n connectedFit.top = this.calculateTop(connectedFit.targetRect, connectedFit.contentElementRect, this.settings.verticalStartPoint, this.settings.verticalDirection, connectedFit.verticalOffset ? connectedFit.verticalOffset : 0);\n connectedFit.bottom = connectedFit.top + connectedFit.contentElementRect.height;\n connectedFit.fitVertical = {\n back: Math.round(connectedFit.top),\n forward: Math.round(connectedFit.viewPortRect.height - connectedFit.bottom)\n };\n }\n /**\n * Calculates the position of the left border of the element if it gets positioned\n * with provided start point and direction\n *\n * @param targetRect Rectangle of the target where element is attached\n * @param elementRect Rectangle of the element\n * @param startPoint Start point of the target\n * @param direction Direction in which to show the element\n */\n calculateLeft(targetRect, elementRect, startPoint, direction, offset) {\n return targetRect.right + targetRect.width * startPoint + elementRect.width * direction + offset;\n }\n /**\n * Calculates the position of the top border of the element if it gets positioned\n * with provided position settings related to the target\n *\n * @param targetRect Rectangle of the target where element is attached\n * @param elementRect Rectangle of the element\n * @param startPoint Start point of the target\n * @param direction Direction in which to show the element\n */\n calculateTop(targetRect, elementRect, startPoint, direction, offset) {\n return targetRect.bottom + targetRect.height * startPoint + elementRect.height * direction + offset;\n }\n /**\n * Returns whether the element should fit in viewport\n *\n * @param connectedFit connectedFit object containing all necessary parameters\n */\n shouldFitInViewPort(connectedFit) {\n return connectedFit.fitHorizontal.back < 0 || connectedFit.fitHorizontal.forward < 0 ||\n connectedFit.fitVertical.back < 0 || connectedFit.fitVertical.forward < 0;\n }\n}\n\n/**\n * Positions the element as in **Connected** positioning strategy and re-positions the element in\n * the view port (calculating a different start point) in case the element is partially getting out of view\n */\nclass AutoPositionStrategy extends BaseFitPositionStrategy {\n /**\n * Fits the element into viewport according to the position settings\n *\n * @param element element to fit in viewport\n * @param connectedFit connectedFit object containing all necessary parameters\n */\n fitInViewport(element, connectedFit) {\n const transformString = [];\n if (connectedFit.fitHorizontal.back < 0 || connectedFit.fitHorizontal.forward < 0) {\n if (this.canFlipHorizontal(connectedFit)) {\n this.flipHorizontal();\n this.flipAnimation(FlipDirection.Horizontal);\n }\n else {\n const horizontalPush = this.horizontalPush(connectedFit);\n transformString.push(`translateX(${horizontalPush}px)`);\n }\n }\n if (connectedFit.fitVertical.back < 0 || connectedFit.fitVertical.forward < 0) {\n if (this.canFlipVertical(connectedFit)) {\n this.flipVertical();\n this.flipAnimation(FlipDirection.Vertical);\n }\n else {\n const verticalPush = this.verticalPush(connectedFit);\n transformString.push(`translateY(${verticalPush}px)`);\n }\n }\n element.style.transform = transformString.join(' ').trim();\n }\n /**\n * Checks if element can be flipped without get off the viewport\n *\n * @param connectedFit connectedFit object containing all necessary parameters\n * @returns true if element can be flipped and stain in viewport\n */\n canFlipHorizontal(connectedFit) {\n // HorizontalAlignment can be Left = -1; Center = -0.5 or Right = 0.\n // To virtually flip direction and start point (both are HorizontalAlignment) we can do this:\n // flippedAlignment = (-1) * (HorizontalAlignment + 1)\n // this way:\n // (-1) * (Left + 1) = 0 = Right\n // (-1) * (Center + 1) = -0.5 = Center\n // (-1) * (Right + 1) = -1 = Left\n const flippedStartPoint = (-1) * (this.settings.horizontalStartPoint + 1);\n const flippedDirection = (-1) * (this.settings.horizontalDirection + 1);\n const leftBorder = this.calculateLeft(connectedFit.targetRect, connectedFit.contentElementRect, flippedStartPoint, flippedDirection, 0);\n const rightBorder = leftBorder + connectedFit.contentElementRect.width;\n return 0 < leftBorder && rightBorder < connectedFit.viewPortRect.width;\n }\n /**\n * Checks if element can be flipped without get off the viewport\n *\n * @param connectedFit connectedFit object containing all necessary parameters\n * @returns true if element can be flipped and stain in viewport\n */\n canFlipVertical(connectedFit) {\n const flippedStartPoint = (-1) * (this.settings.verticalStartPoint + 1);\n const flippedDirection = (-1) * (this.settings.verticalDirection + 1);\n const topBorder = this.calculateTop(connectedFit.targetRect, connectedFit.contentElementRect, flippedStartPoint, flippedDirection, 0);\n const bottomBorder = topBorder + connectedFit.contentElementRect.height;\n return 0 < topBorder && bottomBorder < connectedFit.viewPortRect.height;\n }\n /**\n * Flips direction and start point of the position settings\n */\n flipHorizontal() {\n switch (this.settings.horizontalDirection) {\n case HorizontalAlignment.Left:\n this.settings.horizontalDirection = HorizontalAlignment.Right;\n break;\n case HorizontalAlignment.Right:\n this.settings.horizontalDirection = HorizontalAlignment.Left;\n break;\n }\n switch (this.settings.horizontalStartPoint) {\n case HorizontalAlignment.Left:\n this.settings.horizontalStartPoint = HorizontalAlignment.Right;\n break;\n case HorizontalAlignment.Right:\n this.settings.horizontalStartPoint = HorizontalAlignment.Left;\n break;\n }\n }\n /**\n * Flips direction and start point of the position settings\n */\n flipVertical() {\n switch (this.settings.verticalDirection) {\n case VerticalAlignment.Top:\n this.settings.verticalDirection = VerticalAlignment.Bottom;\n break;\n case VerticalAlignment.Bottom:\n this.settings.verticalDirection = VerticalAlignment.Top;\n break;\n }\n switch (this.settings.verticalStartPoint) {\n case VerticalAlignment.Top:\n this.settings.verticalStartPoint = VerticalAlignment.Bottom;\n break;\n case VerticalAlignment.Bottom:\n this.settings.verticalStartPoint = VerticalAlignment.Top;\n break;\n }\n }\n /**\n * Calculates necessary horizontal push according to provided connectedFit\n *\n * @param connectedFit connectedFit object containing all necessary parameters\n * @returns amount of necessary translation which will push the element into viewport\n */\n horizontalPush(connectedFit) {\n const leftExtend = connectedFit.left;\n const rightExtend = connectedFit.right - connectedFit.viewPortRect.width;\n // if leftExtend < 0 overlay goes beyond left end of the screen. We should push it back with exactly\n // as much as it is beyond the screen.\n // if rightExtend > 0 overlay goes beyond right end of the screen. We should push it back with the\n // extend but with amount not bigger than what left between left border of screen and left border of\n // overlay, e.g. leftExtend\n if (leftExtend < 0) {\n return Math.abs(leftExtend);\n }\n else if (rightExtend > 0) {\n return -Math.min(rightExtend, leftExtend);\n }\n else {\n return 0;\n }\n }\n /**\n * Calculates necessary vertical push according to provided connectedFit\n *\n * @param connectedFit connectedFit object containing all necessary parameters\n * @returns amount of necessary translation which will push the element into viewport\n */\n verticalPush(connectedFit) {\n const topExtend = connectedFit.top;\n const bottomExtend = connectedFit.bottom - connectedFit.viewPortRect.height;\n if (topExtend < 0) {\n return Math.abs(topExtend);\n }\n else if (bottomExtend > 0) {\n return -Math.min(bottomExtend, topExtend);\n }\n else {\n return 0;\n }\n }\n /**\n * Changes open and close animation with reverse animation if one exists\n *\n * @param flipDirection direction for which to change the animations\n */\n flipAnimation(flipDirection) {\n if (this.settings.openAnimation) {\n this.settings.openAnimation = this.updateAnimation(this.settings.openAnimation, flipDirection);\n }\n if (this.settings.closeAnimation) {\n this.settings.closeAnimation = this.updateAnimation(this.settings.closeAnimation, flipDirection);\n }\n }\n /**\n * Tries to find the reverse animation according to provided direction\n *\n * @param animation animation to update\n * @param direction required animation direction\n * @returns reverse animation in given direction if one exists\n */\n updateAnimation(animation, direction) {\n switch (direction) {\n case FlipDirection.Horizontal:\n if (isHorizontalAnimation(animation)) {\n return reverseAnimationResolver(animation);\n }\n break;\n case FlipDirection.Vertical:\n if (isVerticalAnimation(animation)) {\n return reverseAnimationResolver(animation);\n }\n break;\n }\n return animation;\n }\n}\nvar FlipDirection;\n(function (FlipDirection) {\n FlipDirection[FlipDirection[\"Horizontal\"] = 0] = \"Horizontal\";\n FlipDirection[FlipDirection[\"Vertical\"] = 1] = \"Vertical\";\n})(FlipDirection || (FlipDirection = {}));\n\n/**\n * Positions the element based on the directions passed in trough PositionSettings.\n * These are Top/Middle/Bottom for verticalDirection and Left/Center/Right for horizontalDirection\n */\nclass GlobalPositionStrategy {\n constructor(settings) {\n this._defaultSettings = {\n horizontalDirection: HorizontalAlignment.Center,\n verticalDirection: VerticalAlignment.Middle,\n horizontalStartPoint: HorizontalAlignment.Center,\n verticalStartPoint: VerticalAlignment.Middle,\n openAnimation: fadeIn,\n closeAnimation: fadeOut,\n minSize: { width: 0, height: 0 }\n };\n this.settings = Object.assign({}, this._defaultSettings, settings);\n }\n /**\n * Position the element based on the PositionStrategy implementing this interface.\n *\n * @param contentElement The HTML element to be positioned\n * @param size Size of the element\n * @param document reference to the Document object\n * @param initialCall should be true if this is the initial call to the method\n * @param target attaching target for the component to show\n * ```typescript\n * settings.positionStrategy.position(content, size, document, true);\n * ```\n */\n position(contentElement) {\n contentElement.classList.add('igx-overlay__content--relative');\n contentElement.parentElement.classList.add('igx-overlay__wrapper--flex');\n this.setPosition(contentElement);\n }\n /**\n * Clone the strategy instance.\n * ```typescript\n * settings.positionStrategy.clone();\n * ```\n */\n clone() {\n return Util.cloneInstance(this);\n }\n setPosition(contentElement) {\n switch (this.settings.horizontalDirection) {\n case HorizontalAlignment.Left:\n contentElement.parentElement.style.justifyContent = 'flex-start';\n break;\n case HorizontalAlignment.Center:\n contentElement.parentElement.style.justifyContent = 'center';\n break;\n case HorizontalAlignment.Right:\n contentElement.parentElement.style.justifyContent = 'flex-end';\n break;\n default:\n break;\n }\n switch (this.settings.verticalDirection) {\n case VerticalAlignment.Top:\n contentElement.parentElement.style.alignItems = 'flex-start';\n break;\n case VerticalAlignment.Middle:\n contentElement.parentElement.style.alignItems = 'center';\n break;\n case VerticalAlignment.Bottom:\n contentElement.parentElement.style.alignItems = 'flex-end';\n break;\n default:\n break;\n }\n }\n}\n\n/**\n * Positions the element inside the containing outlet based on the directions passed in trough PositionSettings.\n * These are Top/Middle/Bottom for verticalDirection and Left/Center/Right for horizontalDirection\n */\nclass ContainerPositionStrategy extends GlobalPositionStrategy {\n constructor(settings) {\n super(settings);\n }\n /**\n * Position the element based on the PositionStrategy implementing this interface.\n */\n position(contentElement) {\n contentElement.classList.add('igx-overlay__content--relative');\n contentElement.parentElement.classList.add('igx-overlay__wrapper--flex-container');\n this.setPosition(contentElement);\n }\n}\n\n/**\n * Positions the element as in **Connected** positioning strategy and resize the element\n * to fit in the view port in case the element is partially getting out of view\n */\nclass ElasticPositionStrategy extends BaseFitPositionStrategy {\n /**\n * Fits the element into viewport according to the position settings\n *\n * @param element element to fit in viewport\n * @param connectedFit connectedFit object containing all necessary parameters\n */\n fitInViewport(element, connectedFit) {\n element.classList.add('igx-overlay__content--elastic');\n const transformString = [];\n if (connectedFit.fitHorizontal.back < 0 || connectedFit.fitHorizontal.forward < 0) {\n const maxReduction = Math.max(0, connectedFit.contentElementRect.width - this.settings.minSize.width);\n const leftExtend = Math.max(0, -connectedFit.fitHorizontal.back);\n const rightExtend = Math.max(0, -connectedFit.fitHorizontal.forward);\n const reduction = Math.min(maxReduction, leftExtend + rightExtend);\n element.style.width = `${connectedFit.contentElementRect.width - reduction}px`;\n // if direction is center and element goes off the screen in left direction we should push the\n // element to the right. Prevents left still going out of view when normally positioned\n if (this.settings.horizontalDirection === HorizontalAlignment.Center) {\n // the amount of translation depends on whether element goes off the screen to the left,\n // to the right or in both directions, as well as how much it goes of the screen and finally\n // on the minSize. The translation should be proportional between left and right extend\n // taken from the reduction\n const translation = leftExtend * reduction / (leftExtend + rightExtend);\n if (translation > 0) {\n transformString.push(`translateX(${translation}px)`);\n }\n }\n }\n if (connectedFit.fitVertical.back < 0 || connectedFit.fitVertical.forward < 0) {\n const maxReduction = Math.max(0, connectedFit.contentElementRect.height - this.settings.minSize.height);\n const topExtend = Math.max(0, -connectedFit.fitVertical.back);\n const bottomExtend = Math.max(0, -connectedFit.fitVertical.forward);\n const reduction = Math.min(maxReduction, topExtend + bottomExtend);\n element.style.height = `${connectedFit.contentElementRect.height - reduction}px`;\n // if direction is middle and element goes off the screen in top direction we should push the\n // element to the bottom. Prevents top still going out of view when normally positioned\n if (this.settings.verticalDirection === VerticalAlignment.Middle) {\n // the amount of translation depends on whether element goes off the screen to the top,\n // to the bottom or in both directions, as well as how much it goes of the screen and finally\n // on the minSize. The translation should be proportional between top and bottom extend\n // taken from the reduction\n const translation = topExtend * reduction / (topExtend + bottomExtend);\n if (translation > 0) {\n transformString.push(`translateY(${translation}px)`);\n }\n }\n }\n element.style.transform = transformString.join(' ').trim();\n }\n}\n\nclass ScrollStrategy {\n constructor() { }\n}\n\n/**\n * Empty scroll strategy. Does nothing.\n */\nclass NoOpScrollStrategy extends ScrollStrategy {\n constructor() {\n super();\n }\n /**\n * Initializes the strategy. Should be called once\n */\n initialize() { }\n /**\n * Detaches the strategy\n * ```typescript\n * settings.scrollStrategy.detach();\n * ```\n */\n attach() { }\n /**\n * Detaches the strategy\n * ```typescript\n * settings.scrollStrategy.detach();\n * ```\n */\n detach() { }\n}\n\n/**\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/overlay-main)\n * The overlay service allows users to show components on overlay div above all other elements in the page.\n */\nclass IgxOverlayService {\n constructor(_factoryResolver, _appRef, _injector, builder, document, _zone, platformUtil, animationService) {\n this._factoryResolver = _factoryResolver;\n this._appRef = _appRef;\n this._injector = _injector;\n this.builder = builder;\n this.document = document;\n this._zone = _zone;\n this.platformUtil = platformUtil;\n this.animationService = animationService;\n /**\n * Emitted just before the overlay content starts to open.\n * ```typescript\n * opening(event: OverlayCancelableEventArgs){\n * const opening = event;\n * }\n * ```\n */\n this.opening = new EventEmitter();\n /**\n * Emitted after the overlay content is opened and all animations are finished.\n * ```typescript\n * opened(event: OverlayEventArgs){\n * const opened = event;\n * }\n * ```\n */\n this.opened = new EventEmitter();\n /**\n * Emitted just before the overlay content starts to close.\n * ```typescript\n * closing(event: OverlayCancelableEventArgs){\n * const closing = event;\n * }\n * ```\n */\n this.closing = new EventEmitter();\n /**\n * Emitted after the overlay content is closed and all animations are finished.\n * ```typescript\n * closed(event: OverlayEventArgs){\n * const closed = event;\n * }\n * ```\n */\n this.closed = new EventEmitter();\n /**\n * Emitted before the content is appended to the overlay.\n * ```typescript\n * contentAppending(event: OverlayEventArgs){\n * const contentAppending = event;\n * }\n * ```\n */\n this.contentAppending = new EventEmitter();\n /**\n * Emitted after the content is appended to the overlay, and before animations are started.\n * ```typescript\n * contentAppended(event: OverlayEventArgs){\n * const contentAppended = event;\n * }\n * ```\n */\n this.contentAppended = new EventEmitter();\n /**\n * Emitted just before the overlay animation start.\n * ```typescript\n * animationStarting(event: OverlayAnimationEventArgs){\n * const animationStarting = event;\n * }\n * ```\n */\n this.animationStarting = new EventEmitter();\n this._componentId = 0;\n this._overlayInfos = [];\n this.destroy$ = new Subject();\n this._cursorStyleIsSet = false;\n this._defaultSettings = {\n excludeFromOutsideClick: [],\n positionStrategy: new GlobalPositionStrategy(),\n scrollStrategy: new NoOpScrollStrategy(),\n modal: true,\n closeOnOutsideClick: true,\n closeOnEscape: false\n };\n /** @hidden */\n this.repositionAll = () => {\n for (let i = this._overlayInfos.length; i--;) {\n this.reposition(this._overlayInfos[i].id);\n }\n };\n this.documentClicked = (ev) => {\n var _a;\n // if we get to modal overlay just return - we should not close anything under it\n // if we get to non-modal overlay do the next:\n // 1. Check it has close on outside click. If not go on to next overlay;\n // 2. If true check if click is on the element. If it is on the element we have closed\n // already all previous non-modal with close on outside click elements, so we return. If\n // not close the overlay and check next\n for (let i = this._overlayInfos.length; i--;) {\n const info = this._overlayInfos[i];\n if (info.settings.modal) {\n return;\n }\n if (info.settings.closeOnOutsideClick) {\n const target = ev.composed ? ev.composedPath()[0] : ev.target;\n const overlayElement = info.elementRef.nativeElement;\n // check if the click is on the overlay element or on an element from the exclusion list, and if so do not close the overlay\n const excludeElements = info.settings.excludeFromOutsideClick ?\n [...info.settings.excludeFromOutsideClick, overlayElement] : [overlayElement];\n const isInsideClick = excludeElements.some(e => e.contains(target));\n if (isInsideClick) {\n return;\n // if the click is outside click, but close animation has started do nothing\n }\n else if (!((_a = info.closeAnimationPlayer) === null || _a === void 0 ? void 0 : _a.hasStarted())) {\n this._hide(info.id, ev);\n }\n }\n }\n };\n this._document = this.document;\n }\n /**\n * Creates overlay settings with global or container position strategy and preset position settings\n *\n * @param position Preset position settings. Default position is 'center'\n * @param outlet The outlet container to attach the overlay to\n * @returns Non-modal overlay settings based on Global or Container position strategy and the provided position.\n */\n static createAbsoluteOverlaySettings(position, outlet) {\n const positionSettings = this.createAbsolutePositionSettings(position);\n const strategy = outlet ? new ContainerPositionStrategy(positionSettings) : new GlobalPositionStrategy(positionSettings);\n const overlaySettings = {\n positionStrategy: strategy,\n scrollStrategy: new NoOpScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true,\n outlet\n };\n return overlaySettings;\n }\n /**\n * Creates overlay settings with auto, connected or elastic position strategy and preset position settings\n *\n * @param target Attaching target for the component to show\n * @param strategy The relative position strategy to be applied to the overlay settings. Default is Auto positioning strategy.\n * @param position Preset position settings. By default the element is positioned below the target, left aligned.\n * @returns Non-modal overlay settings based on the provided target, strategy and position.\n */\n static createRelativeOverlaySettings(target, position, strategy) {\n const positionSettings = this.createRelativePositionSettings(position);\n const overlaySettings = {\n target,\n positionStrategy: this.createPositionStrategy(strategy, positionSettings),\n scrollStrategy: new NoOpScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n return overlaySettings;\n }\n static createAbsolutePositionSettings(position) {\n let positionSettings;\n switch (position) {\n case AbsolutePosition.Bottom:\n positionSettings = {\n horizontalDirection: HorizontalAlignment.Center,\n verticalDirection: VerticalAlignment.Bottom,\n openAnimation: slideInBottom,\n closeAnimation: slideOutBottom\n };\n break;\n case AbsolutePosition.Top:\n positionSettings = {\n horizontalDirection: HorizontalAlignment.Center,\n verticalDirection: VerticalAlignment.Top,\n openAnimation: slideInTop,\n closeAnimation: slideOutTop\n };\n break;\n case AbsolutePosition.Center:\n default:\n positionSettings = {\n horizontalDirection: HorizontalAlignment.Center,\n verticalDirection: VerticalAlignment.Middle,\n openAnimation: fadeIn,\n closeAnimation: fadeOut\n };\n }\n return positionSettings;\n }\n static createRelativePositionSettings(position) {\n let positionSettings;\n switch (position) {\n case RelativePosition.Above:\n positionSettings = {\n horizontalStartPoint: HorizontalAlignment.Center,\n verticalStartPoint: VerticalAlignment.Top,\n horizontalDirection: HorizontalAlignment.Center,\n verticalDirection: VerticalAlignment.Top,\n openAnimation: scaleInVerBottom,\n closeAnimation: scaleOutVerBottom,\n };\n break;\n case RelativePosition.Below:\n positionSettings = {\n horizontalStartPoint: HorizontalAlignment.Center,\n verticalStartPoint: VerticalAlignment.Bottom,\n horizontalDirection: HorizontalAlignment.Center,\n verticalDirection: VerticalAlignment.Bottom,\n openAnimation: scaleInVerTop,\n closeAnimation: scaleOutVerTop\n };\n break;\n case RelativePosition.After:\n positionSettings = {\n horizontalStartPoint: HorizontalAlignment.Right,\n verticalStartPoint: VerticalAlignment.Middle,\n horizontalDirection: HorizontalAlignment.Right,\n verticalDirection: VerticalAlignment.Middle,\n openAnimation: scaleInHorLeft,\n closeAnimation: scaleOutHorLeft\n };\n break;\n case RelativePosition.Before:\n positionSettings = {\n horizontalStartPoint: HorizontalAlignment.Left,\n verticalStartPoint: VerticalAlignment.Middle,\n horizontalDirection: HorizontalAlignment.Left,\n verticalDirection: VerticalAlignment.Middle,\n openAnimation: scaleInHorRight,\n closeAnimation: scaleOutHorRight\n };\n break;\n case RelativePosition.Default:\n default:\n positionSettings = {\n horizontalStartPoint: HorizontalAlignment.Left,\n verticalStartPoint: VerticalAlignment.Bottom,\n horizontalDirection: HorizontalAlignment.Right,\n verticalDirection: VerticalAlignment.Bottom,\n openAnimation: scaleInVerTop,\n closeAnimation: scaleOutVerTop,\n };\n break;\n }\n return positionSettings;\n }\n static createPositionStrategy(strategy, positionSettings) {\n switch (strategy) {\n case RelativePositionStrategy.Connected:\n return new ConnectedPositioningStrategy(positionSettings);\n case RelativePositionStrategy.Elastic:\n return new ElasticPositionStrategy(positionSettings);\n case RelativePositionStrategy.Auto:\n default:\n return new AutoPositionStrategy(positionSettings);\n }\n }\n attach(componentOrElement, viewContainerRefOrSettings, moduleRefOrSettings) {\n const info = this.getOverlayInfo(componentOrElement, this.getUserViewContainerOrModuleRef(viewContainerRefOrSettings, moduleRefOrSettings));\n if (!info) {\n console.warn('Overlay was not able to attach provided component!');\n return null;\n }\n info.id = (this._componentId++).toString();\n info.visible = false;\n const settings = Object.assign({}, this._defaultSettings, this.getUserOverlaySettings(viewContainerRefOrSettings, moduleRefOrSettings));\n // Emit the contentAppending event before appending the content\n const eventArgs = { id: info.id, elementRef: info.elementRef, componentRef: info.componentRef, settings };\n this.contentAppending.emit(eventArgs);\n // Append the content to the overlay\n info.settings = eventArgs.settings;\n this._overlayInfos.push(info);\n info.hook = this.placeElementHook(info.elementRef.nativeElement);\n const elementRect = info.elementRef.nativeElement.getBoundingClientRect();\n info.initialSize = { width: elementRect.width, height: elementRect.height };\n this.moveElementToOverlay(info);\n this.contentAppended.emit({ id: info.id, componentRef: info.componentRef });\n info.settings.scrollStrategy.initialize(this._document, this, info.id);\n info.settings.scrollStrategy.attach();\n this.addOutsideClickListener(info);\n this.addResizeHandler();\n this.addCloseOnEscapeListener(info);\n this.buildAnimationPlayers(info);\n return info.id;\n }\n /**\n * Remove overlay with the provided id.\n *\n * @param id Id of the overlay to remove\n * ```typescript\n * this.overlay.detach(id);\n * ```\n */\n detach(id) {\n const info = this.getOverlayById(id);\n if (!info) {\n console.warn('igxOverlay.detach was called with wrong id: ', id);\n return;\n }\n info.detached = true;\n this.finishAnimations(info);\n info.settings.scrollStrategy.detach();\n this.removeOutsideClickListener(info);\n this.removeResizeHandler();\n this.cleanUp(info);\n }\n /**\n * Remove all the overlays.\n * ```typescript\n * this.overlay.detachAll();\n * ```\n */\n detachAll() {\n for (let i = this._overlayInfos.length; i--;) {\n this.detach(this._overlayInfos[i].id);\n }\n }\n /**\n * Shows the overlay for provided id.\n *\n * @param id Id to show overlay for\n * @param settings Display settings for the overlay, such as positioning and scroll/close behavior.\n */\n show(id, settings) {\n const info = this.getOverlayById(id);\n if (!info) {\n console.warn('igxOverlay.show was called with wrong id: ', id);\n return;\n }\n const eventArgs = { id, componentRef: info.componentRef, cancel: false };\n this.opening.emit(eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (settings) {\n // TODO: update attach\n }\n this.updateSize(info);\n info.settings.positionStrategy.position(info.elementRef.nativeElement.parentElement, { width: info.initialSize.width, height: info.initialSize.height }, document, true, info.settings.target);\n this.addModalClasses(info);\n if (info.settings.positionStrategy.settings.openAnimation) {\n // TODO: should we build players again. This was already done in attach!!!\n // this.buildAnimationPlayers(info);\n this.playOpenAnimation(info);\n }\n else {\n // to eliminate flickering show the element just before opened fires\n info.wrapperElement.style.visibility = '';\n info.visible = true;\n this.opened.emit({ id: info.id, componentRef: info.componentRef });\n }\n }\n /**\n * Hides the component with the ID provided as a parameter.\n * ```typescript\n * this.overlay.hide(id);\n * ```\n */\n hide(id, event) {\n this._hide(id, event);\n }\n /**\n * Hides all the components and the overlay.\n * ```typescript\n * this.overlay.hideAll();\n * ```\n */\n hideAll() {\n for (let i = this._overlayInfos.length; i--;) {\n this.hide(this._overlayInfos[i].id);\n }\n }\n /**\n * Repositions the component with ID provided as a parameter.\n *\n * @param id Id to reposition overlay for\n * ```typescript\n * this.overlay.reposition(id);\n * ```\n */\n reposition(id) {\n const overlayInfo = this.getOverlayById(id);\n if (!overlayInfo || !overlayInfo.settings) {\n console.error('Wrong id provided in overlay.reposition method. Id: ' + id);\n return;\n }\n if (!overlayInfo.visible) {\n return;\n }\n const contentElement = overlayInfo.elementRef.nativeElement.parentElement;\n const contentElementRect = contentElement.getBoundingClientRect();\n overlayInfo.settings.positionStrategy.position(contentElement, {\n width: contentElementRect.width,\n height: contentElementRect.height\n }, this._document, false, overlayInfo.settings.target);\n }\n /**\n * Offsets the content along the corresponding axis by the provided amount\n *\n * @param id Id to offset overlay for\n * @param deltaX Amount of offset in horizontal direction\n * @param deltaY Amount of offset in vertical direction\n * ```typescript\n * this.overlay.setOffset(id, deltaX, deltaY);\n * ```\n */\n setOffset(id, deltaX, deltaY) {\n const info = this.getOverlayById(id);\n if (!info) {\n return;\n }\n info.transformX += deltaX;\n info.transformY += deltaY;\n const transformX = info.transformX;\n const transformY = info.transformY;\n const translate = `translate(${transformX}px, ${transformY}px)`;\n info.elementRef.nativeElement.parentElement.style.transform = translate;\n }\n /** @hidden */\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n /** @hidden @internal */\n getOverlayById(id) {\n if (!id) {\n return null;\n }\n const info = this._overlayInfos.find(e => e.id === id);\n return info;\n }\n _hide(id, event) {\n const info = this.getOverlayById(id);\n if (!info) {\n console.warn('igxOverlay.hide was called with wrong id: ', id);\n return;\n }\n const eventArgs = { id, componentRef: info.componentRef, cancel: false, event };\n this.closing.emit(eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.removeModalClasses(info);\n if (info.settings.positionStrategy.settings.closeAnimation) {\n this.playCloseAnimation(info, event);\n }\n else {\n this.closeDone(info);\n }\n }\n getUserOverlaySettings(viewContainerRefOrSettings, moduleRefOrSettings) {\n let result;\n if (viewContainerRefOrSettings && !(viewContainerRefOrSettings instanceof ViewContainerRef)) {\n result = viewContainerRefOrSettings;\n return result;\n }\n if (moduleRefOrSettings && !('injector' in moduleRefOrSettings && 'componentFactoryResolver' in moduleRefOrSettings)) {\n result = moduleRefOrSettings;\n }\n return result;\n }\n getUserViewContainerOrModuleRef(viewContainerRefOrSettings, moduleRefOrSettings) {\n let result;\n if (viewContainerRefOrSettings instanceof ViewContainerRef) {\n result = viewContainerRefOrSettings;\n }\n if (moduleRefOrSettings && 'injector' in moduleRefOrSettings && 'componentFactoryResolver' in moduleRefOrSettings) {\n result = moduleRefOrSettings;\n }\n return result;\n }\n getOverlayInfo(component, viewContainerRef) {\n const info = { ngZone: this._zone, transformX: 0, transformY: 0 };\n if (component instanceof ElementRef) {\n info.elementRef = component;\n }\n else {\n let dynamicComponent;\n if (viewContainerRef instanceof ViewContainerRef) {\n dynamicComponent = viewContainerRef.createComponent(component);\n }\n else {\n let dynamicFactory;\n const factoryResolver = viewContainerRef ? viewContainerRef.componentFactoryResolver : this._factoryResolver;\n try {\n dynamicFactory = factoryResolver.resolveComponentFactory(component);\n }\n catch (error) {\n console.error(error);\n return null;\n }\n const injector = viewContainerRef ? viewContainerRef.injector : this._injector;\n dynamicComponent = dynamicFactory.create(injector);\n this._appRef.attachView(dynamicComponent.hostView);\n }\n if (dynamicComponent.onDestroy) {\n dynamicComponent.onDestroy(() => {\n if (!info.detached && this._overlayInfos.indexOf(info) !== -1) {\n this.detach(info.id);\n }\n });\n }\n // If the element is newly created from a Component, it is wrapped in 'ng-component' tag - we do not want that.\n const element = dynamicComponent.location.nativeElement;\n info.elementRef = { nativeElement: element };\n info.componentRef = dynamicComponent;\n }\n return info;\n }\n placeElementHook(element) {\n if (!element.parentElement) {\n return null;\n }\n const hook = this._document.createElement('div');\n hook.style.display = 'none';\n element.parentElement.insertBefore(hook, element);\n return hook;\n }\n moveElementToOverlay(info) {\n info.wrapperElement = this.getWrapperElement();\n const contentElement = this.getContentElement(info.wrapperElement, info.settings.modal);\n this.getOverlayElement(info).appendChild(info.wrapperElement);\n contentElement.appendChild(info.elementRef.nativeElement);\n }\n getWrapperElement() {\n const wrapper = this._document.createElement('div');\n wrapper.classList.add('igx-overlay__wrapper');\n return wrapper;\n }\n getContentElement(wrapperElement, modal) {\n const content = this._document.createElement('div');\n if (modal) {\n content.classList.add('igx-overlay__content--modal');\n content.addEventListener('click', (ev) => {\n ev.stopPropagation();\n });\n }\n else {\n content.classList.add('igx-overlay__content');\n }\n content.addEventListener('scroll', (ev) => {\n ev.stopPropagation();\n });\n // hide element to eliminate flickering. Show the element exactly before animation starts\n wrapperElement.style.visibility = 'hidden';\n wrapperElement.appendChild(content);\n return content;\n }\n getOverlayElement(info) {\n if (info.settings.outlet) {\n return info.settings.outlet.nativeElement || info.settings.outlet;\n }\n if (!this._overlayElement) {\n this._overlayElement = this._document.createElement('div');\n this._overlayElement.classList.add('igx-overlay');\n this._document.body.appendChild(this._overlayElement);\n }\n return this._overlayElement;\n }\n updateSize(info) {\n if (info.componentRef) {\n // if we are positioning component this is first time it gets visible\n // and we can finally get its size\n info.componentRef.changeDetectorRef.detectChanges();\n info.initialSize = info.elementRef.nativeElement.getBoundingClientRect();\n }\n // set content div width only if element to show has width\n if (info.initialSize.width !== 0) {\n info.elementRef.nativeElement.parentElement.style.width = info.initialSize.width + 'px';\n }\n }\n closeDone(info) {\n info.visible = false;\n if (info.wrapperElement) {\n // to eliminate flickering show the element just before animation start\n info.wrapperElement.style.visibility = 'hidden';\n }\n if (!info.closeAnimationDetaching) {\n this.closed.emit({ id: info.id, componentRef: info.componentRef, event: info.event });\n }\n delete info.event;\n }\n cleanUp(info) {\n var _a, _b;\n const child = info.elementRef.nativeElement;\n const outlet = this.getOverlayElement(info);\n // if same element is shown in other overlay outlet will not contain\n // the element and we should not remove it form outlet\n if (outlet.contains(child)) {\n outlet.removeChild(child.parentNode.parentNode);\n }\n if (info.componentRef) {\n this._appRef.detachView(info.componentRef.hostView);\n info.componentRef.destroy();\n delete info.componentRef;\n }\n if (info.hook) {\n info.hook.parentElement.insertBefore(info.elementRef.nativeElement, info.hook);\n info.hook.parentElement.removeChild(info.hook);\n delete info.hook;\n }\n const index = this._overlayInfos.indexOf(info);\n this._overlayInfos.splice(index, 1);\n // this._overlayElement.parentElement check just for tests that manually delete the element\n if (this._overlayInfos.length === 0) {\n if (this._overlayElement && this._overlayElement.parentElement) {\n this._overlayElement.parentElement.removeChild(this._overlayElement);\n this._overlayElement = null;\n }\n this.removeCloseOnEscapeListener();\n }\n // clean all the resources attached to info\n delete info.elementRef;\n delete info.settings;\n delete info.initialSize;\n info.openAnimationDetaching = true;\n (_a = info.openAnimationPlayer) === null || _a === void 0 ? void 0 : _a.destroy();\n delete info.openAnimationPlayer;\n info.closeAnimationDetaching = true;\n (_b = info.closeAnimationPlayer) === null || _b === void 0 ? void 0 : _b.destroy();\n delete info.closeAnimationPlayer;\n delete info.ngZone;\n delete info.wrapperElement;\n info = null;\n }\n playOpenAnimation(info) {\n var _a, _b;\n // if there is opening animation already started do nothing\n if ((_a = info.openAnimationPlayer) === null || _a === void 0 ? void 0 : _a.hasStarted()) {\n return;\n }\n if ((_b = info.closeAnimationPlayer) === null || _b === void 0 ? void 0 : _b.hasStarted()) {\n const position = info.closeAnimationPlayer.position;\n info.closeAnimationPlayer.reset();\n info.openAnimationPlayer.init();\n info.openAnimationPlayer.position = 1 - position;\n }\n this.animationStarting.emit({ id: info.id, animationPlayer: info.openAnimationPlayer, animationType: 'open' });\n // to eliminate flickering show the element just before animation start\n info.wrapperElement.style.visibility = '';\n info.visible = true;\n info.openAnimationPlayer.play();\n }\n playCloseAnimation(info, event) {\n var _a, _b;\n // if there is closing animation already started do nothing\n if ((_a = info.closeAnimationPlayer) === null || _a === void 0 ? void 0 : _a.hasStarted()) {\n return;\n }\n if ((_b = info.openAnimationPlayer) === null || _b === void 0 ? void 0 : _b.hasStarted()) {\n const position = info.openAnimationPlayer.position;\n info.openAnimationPlayer.reset();\n info.closeAnimationPlayer.init();\n info.closeAnimationPlayer.position = 1 - position;\n }\n this.animationStarting.emit({ id: info.id, animationPlayer: info.closeAnimationPlayer, animationType: 'close' });\n info.event = event;\n info.closeAnimationPlayer.play();\n }\n // TODO: check if applyAnimationParams will work with complex animations\n applyAnimationParams(wrapperElement, animationOptions) {\n if (!animationOptions) {\n wrapperElement.style.transitionDuration = '0ms';\n return;\n }\n if (!animationOptions.options || !animationOptions.options.params) {\n return;\n }\n const params = animationOptions.options.params;\n if (params.duration) {\n wrapperElement.style.transitionDuration = params.duration;\n }\n if (params.easing) {\n wrapperElement.style.transitionTimingFunction = params.easing;\n }\n }\n addOutsideClickListener(info) {\n if (info.settings.closeOnOutsideClick) {\n if (info.settings.modal) {\n fromEvent(info.elementRef.nativeElement.parentElement.parentElement, 'click')\n .pipe(takeUntil(this.destroy$))\n .subscribe((e) => this._hide(info.id, e));\n }\n else if (\n // if all overlays minus closing overlays equals one add the handler\n this._overlayInfos.filter(x => x.settings.closeOnOutsideClick && !x.settings.modal).length -\n this._overlayInfos.filter(x => {\n var _a;\n return x.settings.closeOnOutsideClick && !x.settings.modal &&\n ((_a = x.closeAnimationPlayer) === null || _a === void 0 ? void 0 : _a.hasStarted());\n }).length === 1) {\n // click event is not fired on iOS. To make element \"clickable\" we are\n // setting the cursor to pointer\n if (this.platformUtil.isIOS && !this._cursorStyleIsSet) {\n this._cursorOriginalValue = this._document.body.style.cursor;\n this._document.body.style.cursor = 'pointer';\n this._cursorStyleIsSet = true;\n }\n this._document.addEventListener('click', this.documentClicked, true);\n }\n }\n }\n removeOutsideClickListener(info) {\n if (info.settings.modal === false) {\n let shouldRemoveClickEventListener = true;\n this._overlayInfos.forEach(o => {\n if (o.settings.modal === false && o.id !== info.id) {\n shouldRemoveClickEventListener = false;\n }\n });\n if (shouldRemoveClickEventListener) {\n if (this._cursorStyleIsSet) {\n this._document.body.style.cursor = this._cursorOriginalValue;\n this._cursorOriginalValue = '';\n this._cursorStyleIsSet = false;\n }\n this._document.removeEventListener('click', this.documentClicked, true);\n }\n }\n }\n addResizeHandler() {\n const closingOverlaysCount = this._overlayInfos\n .filter(o => { var _a; return (_a = o.closeAnimationPlayer) === null || _a === void 0 ? void 0 : _a.hasStarted(); })\n .length;\n if (this._overlayInfos.length - closingOverlaysCount === 1) {\n this._document.defaultView.addEventListener('resize', this.repositionAll);\n }\n }\n removeResizeHandler() {\n const closingOverlaysCount = this._overlayInfos\n .filter(o => { var _a; return (_a = o.closeAnimationPlayer) === null || _a === void 0 ? void 0 : _a.hasStarted(); })\n .length;\n if (this._overlayInfos.length - closingOverlaysCount === 1) {\n this._document.defaultView.removeEventListener('resize', this.repositionAll);\n }\n }\n addCloseOnEscapeListener(info) {\n if (info.settings.closeOnEscape && !this._keyPressEventListener) {\n this._keyPressEventListener = fromEvent(this._document, 'keydown').pipe(filter((ev) => ev.key === 'Escape' || ev.key === 'Esc')).subscribe((ev) => {\n const visibleOverlays = this._overlayInfos.filter(o => o.visible);\n if (visibleOverlays.length < 1) {\n return;\n }\n const targetOverlayInfo = visibleOverlays[visibleOverlays.length - 1];\n if (targetOverlayInfo.visible && targetOverlayInfo.settings.closeOnEscape) {\n this.hide(targetOverlayInfo.id, ev);\n }\n });\n }\n }\n removeCloseOnEscapeListener() {\n if (this._keyPressEventListener) {\n this._keyPressEventListener.unsubscribe();\n this._keyPressEventListener = null;\n }\n }\n addModalClasses(info) {\n if (info.settings.modal) {\n const wrapperElement = info.elementRef.nativeElement.parentElement.parentElement;\n wrapperElement.classList.remove('igx-overlay__wrapper');\n this.applyAnimationParams(wrapperElement, info.settings.positionStrategy.settings.openAnimation);\n requestAnimationFrame(() => {\n wrapperElement.classList.add('igx-overlay__wrapper--modal');\n });\n }\n }\n removeModalClasses(info) {\n if (info.settings.modal) {\n const wrapperElement = info.elementRef.nativeElement.parentElement.parentElement;\n this.applyAnimationParams(wrapperElement, info.settings.positionStrategy.settings.closeAnimation);\n wrapperElement.classList.remove('igx-overlay__wrapper--modal');\n wrapperElement.classList.add('igx-overlay__wrapper');\n }\n }\n buildAnimationPlayers(info) {\n if (info.settings.positionStrategy.settings.openAnimation) {\n info.openAnimationPlayer = this.animationService\n .buildAnimation(info.settings.positionStrategy.settings.openAnimation, info.elementRef.nativeElement);\n info.openAnimationPlayer.animationEnd\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.openAnimationDone(info));\n }\n if (info.settings.positionStrategy.settings.closeAnimation) {\n info.closeAnimationPlayer = this.animationService\n .buildAnimation(info.settings.positionStrategy.settings.closeAnimation, info.elementRef.nativeElement);\n info.closeAnimationPlayer.animationEnd\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.closeAnimationDone(info));\n }\n }\n openAnimationDone(info) {\n var _a;\n if (!info.openAnimationDetaching) {\n this.opened.emit({ id: info.id, componentRef: info.componentRef });\n }\n if (info.openAnimationPlayer) {\n info.openAnimationPlayer.reset();\n }\n if ((_a = info.closeAnimationPlayer) === null || _a === void 0 ? void 0 : _a.hasStarted()) {\n info.closeAnimationPlayer.reset();\n }\n }\n closeAnimationDone(info) {\n var _a;\n if (info.closeAnimationPlayer) {\n info.closeAnimationPlayer.reset();\n }\n if ((_a = info.openAnimationPlayer) === null || _a === void 0 ? void 0 : _a.hasStarted()) {\n info.openAnimationPlayer.reset();\n }\n this.closeDone(info);\n }\n finishAnimations(info) {\n var _a, _b;\n // // TODO: should we emit here opened or closed events\n if ((_a = info.openAnimationPlayer) === null || _a === void 0 ? void 0 : _a.hasStarted()) {\n info.openAnimationPlayer.finish();\n }\n if ((_b = info.closeAnimationPlayer) === null || _b === void 0 ? void 0 : _b.hasStarted()) {\n info.closeAnimationPlayer.finish();\n }\n }\n}\nIgxOverlayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxOverlayService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ApplicationRef }, { token: i0.Injector }, { token: i1.AnimationBuilder }, { token: DOCUMENT }, { token: i0.NgZone }, { token: PlatformUtil }, { token: IgxAngularAnimationService }], target: i0.ɵɵFactoryTarget.Injectable });\nIgxOverlayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxOverlayService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxOverlayService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () {\n return [{ type: i0.ComponentFactoryResolver }, { type: i0.ApplicationRef }, { type: i0.Injector }, { type: i1.AnimationBuilder }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i0.NgZone }, { type: PlatformUtil }, { type: undefined, decorators: [{\n type: Inject,\n args: [IgxAngularAnimationService]\n }] }];\n } });\n\n// Export position strategies\n\n/**\n * On scroll reposition the overlay content.\n */\nclass AbsoluteScrollStrategy extends ScrollStrategy {\n constructor(scrollContainer) {\n super();\n this._initialized = false;\n this.onScroll = (e) => {\n const overlayInfo = this._overlayService.getOverlayById(this._id);\n if (!overlayInfo) {\n return;\n }\n if (!overlayInfo.elementRef.nativeElement.contains(e.target)) {\n this._overlayService.reposition(this._id);\n }\n };\n this._scrollContainer = scrollContainer;\n }\n /**\n * Initializes the strategy. Should be called once\n *\n * @param document reference to Document object.\n * @param overlayService IgxOverlay service to use in this strategy.\n * @param id Unique id for this strategy.\n * ```typescript\n * settings.scrollStrategy.initialize(document, overlay, id);\n * ```\n */\n initialize(document, overlayService, id) {\n if (this._initialized) {\n return;\n }\n this._overlayService = overlayService;\n this._id = id;\n this._document = document;\n this._zone = overlayService.getOverlayById(id).ngZone;\n this._initialized = true;\n }\n /**\n * Attaches the strategy\n * ```typescript\n * settings.scrollStrategy.attach();\n * ```\n */\n attach() {\n if (this._zone) {\n this._zone.runOutsideAngular(() => {\n this.addScrollEventListener();\n });\n }\n else {\n this.addScrollEventListener();\n }\n }\n /**\n * Detaches the strategy\n * ```typescript\n * settings.scrollStrategy.detach();\n * ```\n */\n detach() {\n var _a;\n if (this._scrollContainer) {\n this._scrollContainer.removeEventListener('scroll', this.onScroll, true);\n }\n else {\n // Tired of this thing throwing every other time. Fix it ffs!\n (_a = this._document) === null || _a === void 0 ? void 0 : _a.removeEventListener('scroll', this.onScroll, true);\n }\n this._initialized = false;\n }\n addScrollEventListener() {\n if (this._scrollContainer) {\n this._scrollContainer.addEventListener('scroll', this.onScroll, true);\n }\n else {\n this._document.addEventListener('scroll', this.onScroll, true);\n }\n }\n}\n\n/**\n * Prevents scrolling while the overlay content is shown.\n */\nclass BlockScrollStrategy extends ScrollStrategy {\n constructor() {\n super();\n this._initialized = false;\n this.onScroll = (ev) => {\n ev.preventDefault();\n if (!this._sourceElement || this._sourceElement !== ev.target) {\n this._sourceElement = ev.target;\n this._initialScrollTop = this._sourceElement.scrollTop;\n this._initialScrollLeft = this._sourceElement.scrollLeft;\n }\n this._sourceElement.scrollTop = this._initialScrollTop;\n this._sourceElement.scrollLeft = this._initialScrollLeft;\n };\n }\n /**\n * Initializes the strategy. Should be called once\n *\n */\n initialize(document) {\n if (this._initialized) {\n return;\n }\n this._document = document;\n this._initialized = true;\n }\n /**\n * Attaches the strategy\n * ```typescript\n * settings.scrollStrategy.attach();\n * ```\n */\n attach() {\n this._document.addEventListener('scroll', this.onScroll, true);\n }\n /**\n * Detaches the strategy\n * ```typescript\n * settings.scrollStrategy.detach();\n * ```\n */\n detach() {\n this._document.removeEventListener('scroll', this.onScroll, true);\n this._sourceElement = null;\n this._initialScrollTop = 0;\n this._initialScrollLeft = 0;\n this._initialized = false;\n }\n}\n\n/**\n * Uses a tolerance and closes the shown component upon scrolling if the tolerance is exceeded\n */\nclass CloseScrollStrategy extends ScrollStrategy {\n constructor(scrollContainer) {\n super();\n this._initialized = false;\n this.onScroll = (ev) => {\n if (!this._sourceElement) {\n this._sourceElement = ev.target;\n this.initialScrollTop = this._sourceElement.scrollTop;\n this.initialScrollLeft = this._sourceElement.scrollLeft;\n }\n if (this._overlayInfo.elementRef.nativeElement.contains(this._sourceElement)) {\n return;\n }\n if (Math.abs(this._sourceElement.scrollTop - this.initialScrollTop) > this._threshold ||\n Math.abs(this._sourceElement.scrollLeft - this.initialScrollLeft) > this._threshold) {\n this._overlayService.hide(this._id);\n }\n };\n this._scrollContainer = scrollContainer;\n this._threshold = 10;\n }\n /**\n * Initializes the strategy. Should be called once\n *\n * @param document reference to Document object.\n * @param overlayService IgxOverlay service to use in this strategy.\n * @param id Unique id for this strategy.\n * ```typescript\n * settings.scrollStrategy.initialize(document, overlay, id);\n * ```\n */\n initialize(document, overlayService, id) {\n if (this._initialized) {\n return;\n }\n this._overlayService = overlayService;\n this._id = id;\n this._document = document;\n this._initialized = true;\n this._overlayInfo = overlayService.getOverlayById(id);\n }\n /**\n * Attaches the strategy\n * ```typescript\n * settings.scrollStrategy.attach();\n * ```\n */\n attach() {\n if (this._scrollContainer) {\n this._scrollContainer.addEventListener('scroll', this.onScroll);\n this._sourceElement = this._scrollContainer;\n }\n else {\n this._document.addEventListener('scroll', this.onScroll, true);\n }\n }\n /**\n * Detaches the strategy\n * ```typescript\n * settings.scrollStrategy.detach();\n * ```\n */\n detach() {\n // TODO: check why event listener removes only on first call and remains on each next!!!\n if (this._scrollContainer) {\n this._scrollContainer.removeEventListener('scroll', this.onScroll);\n }\n else {\n this._document.removeEventListener('scroll', this.onScroll, true);\n }\n this._sourceElement = null;\n this._initialized = false;\n }\n}\n\n// Export scroll strategies\n\nclass IgxBaseTransactionService {\n constructor() {\n /**\n * Event fired when transaction state has changed - add transaction, commit all transactions, undo and redo\n */\n this.onStateUpdate = new EventEmitter();\n this._isPending = false;\n this._pendingTransactions = [];\n this._pendingStates = new Map();\n this._cloneStrategy = new DefaultDataCloneStrategy();\n }\n /**\n * Gets/Sets the data clone strategy used to clone data\n */\n get cloneStrategy() {\n return this._cloneStrategy;\n }\n set cloneStrategy(strategy) {\n if (strategy) {\n this._cloneStrategy = strategy;\n }\n }\n /**\n * @returns if there are any transactions in the Redo stack\n */\n get canRedo() {\n return false;\n }\n /**\n * @returns if there are any transactions in the Undo stack\n */\n get canUndo() {\n return false;\n }\n /**\n * Returns whether transaction is enabled for this service\n */\n get enabled() {\n return this._isPending;\n }\n /**\n * Adds provided transaction with recordRef if any\n *\n * @param transaction Transaction to be added\n * @param recordRef Reference to the value of the record in the data source related to the changed item\n */\n add(transaction, recordRef) {\n if (this._isPending) {\n this.updateState(this._pendingStates, transaction, recordRef);\n this._pendingTransactions.push(transaction);\n }\n }\n /**\n * Returns all recorded transactions in chronological order\n *\n * @param id Optional record id to get transactions for\n * @returns All transaction in the service or for the specified record\n */\n getTransactionLog(_id) {\n return [];\n }\n /**\n * Remove the last transaction if any\n */\n undo() { }\n /**\n * Applies the last undone transaction if any\n */\n redo() { }\n /**\n * Returns aggregated changes from all transactions\n *\n * @param mergeChanges If set to true will merge each state's value over relate recordRef\n * and will record resulting value in the related transaction\n * @returns Collection of aggregated transactions for each changed record\n */\n getAggregatedChanges(mergeChanges) {\n const result = [];\n this._pendingStates.forEach((state, key) => {\n const value = mergeChanges ? this.getAggregatedValue(key, mergeChanges) : state.value;\n result.push({ id: key, newValue: value, type: state.type });\n });\n return result;\n }\n /**\n * Returns the state of the record with provided id\n *\n * @param id The id of the record\n * @param pending Should get pending state\n * @returns State of the record if any\n */\n getState(id) {\n return this._pendingStates.get(id);\n }\n /**\n * Returns value of the required id including all uncommitted changes\n *\n * @param id The id of the record to return value for\n * @param mergeChanges If set to true will merge state's value over relate recordRef\n * and will return merged value\n * @returns Value with changes or **null**\n */\n getAggregatedValue(id, mergeChanges) {\n const state = this._pendingStates.get(id);\n if (!state) {\n return null;\n }\n if (mergeChanges && state.recordRef) {\n return this.updateValue(state);\n }\n return state.value;\n }\n /**\n * Applies all transactions over the provided data\n *\n * @param data Data source to update\n * @param id Optional record id to commit transactions for\n */\n commit(_data, _id) { }\n /**\n * Clears all transactions\n *\n * @param id Optional record id to clear transactions for\n */\n clear(_id) {\n this._pendingStates.clear();\n this._pendingTransactions = [];\n }\n /**\n * Starts pending transactions. All transactions passed after call to startPending\n * will not be added to transaction log\n */\n startPending() {\n this._isPending = true;\n }\n /**\n * Clears all pending transactions and aggregated pending state. If commit is set to true\n * commits pending states as single transaction\n *\n * @param commit Should commit the pending states\n */\n endPending(_commit) {\n this._isPending = false;\n this._pendingStates.clear();\n this._pendingTransactions = [];\n }\n /**\n * Updates the provided states collection according to passed transaction and recordRef\n *\n * @param states States collection to apply the update to\n * @param transaction Transaction to apply to the current state\n * @param recordRef Reference to the value of the record in data source, if any, where transaction should be applied\n */\n updateState(states, transaction, recordRef) {\n let state = states.get(transaction.id);\n if (state) {\n if (isObject(state.value)) {\n mergeObjects(state.value, transaction.newValue);\n }\n else {\n state.value = transaction.newValue;\n }\n }\n else {\n state = { value: this.cloneStrategy.clone(transaction.newValue), recordRef, type: transaction.type };\n states.set(transaction.id, state);\n }\n this.cleanState(transaction.id, states);\n }\n /**\n * Updates the recordRef of the provided state with all the changes in the state. Accepts primitive and object value types\n *\n * @param state State to update value for\n * @returns updated value including all the changes in provided state\n */\n updateValue(state) {\n return this.mergeValues(state.recordRef, state.value);\n }\n /**\n * Merges second values in first value and the result in empty object. If values are primitive type\n * returns second value if exists, or first value.\n *\n * @param first Value to merge into\n * @param second Value to merge\n */\n mergeValues(first, second) {\n if (isObject(first) || isObject(second)) {\n return mergeObjects(this.cloneStrategy.clone(first), second);\n }\n else {\n return second ? second : first;\n }\n }\n /**\n * Compares the state with recordRef and clears all duplicated values. If any state ends as\n * empty object removes it from states.\n *\n * @param state State to clean\n */\n cleanState(id, states) {\n const state = states.get(id);\n // do nothing if\n // there is no state, or\n // there is no state value (e.g. DELETED transaction), or\n // there is no recordRef (e.g. ADDED transaction)\n if (state && state.value && state.recordRef) {\n // if state's value is object compare each key with the ones in recordRef\n // if values in any key are the same delete it from state's value\n // if state's value is not object, simply compare with recordRef and remove\n // the state if they are equal\n if (isObject(state.recordRef)) {\n for (const key of Object.keys(state.value)) {\n if (JSON.stringify(state.recordRef[key]) === JSON.stringify(state.value[key])) {\n delete state.value[key];\n }\n }\n // if state's value is empty remove the state from the states, only if state is not DELETE type\n if (state.type !== TransactionType.DELETE && Object.keys(state.value).length === 0) {\n states.delete(id);\n }\n }\n else {\n if (state.recordRef === state.value) {\n states.delete(id);\n }\n }\n }\n }\n}\n\nclass IgxTransactionService extends IgxBaseTransactionService {\n constructor() {\n super(...arguments);\n this._transactions = [];\n this._redoStack = [];\n this._undoStack = [];\n this._states = new Map();\n }\n /**\n * @returns if there are any transactions in the Undo stack\n */\n get canUndo() {\n return this._undoStack.length > 0;\n }\n /**\n * @returns if there are any transactions in the Redo stack\n */\n get canRedo() {\n return this._redoStack.length > 0;\n }\n /**\n * Adds provided transaction with recordRef if any\n *\n * @param transaction Transaction to be added\n * @param recordRef Reference to the value of the record in the data source related to the changed item\n */\n add(transaction, recordRef) {\n const states = this._isPending ? this._pendingStates : this._states;\n this.verifyAddedTransaction(states, transaction, recordRef);\n this.addTransaction(transaction, states, recordRef);\n }\n /**\n * Returns all recorded transactions in chronological order\n *\n * @param id Optional record id to get transactions for\n * @returns All transaction in the service or for the specified record\n */\n getTransactionLog(id) {\n if (id !== undefined) {\n return this._transactions.filter(t => t.id === id);\n }\n return [...this._transactions];\n }\n /**\n * Returns aggregated changes from all transactions\n *\n * @param mergeChanges If set to true will merge each state's value over relate recordRef\n * and will record resulting value in the related transaction\n * @returns Collection of aggregated transactions for each changed record\n */\n getAggregatedChanges(mergeChanges) {\n const result = [];\n this._states.forEach((state, key) => {\n const value = mergeChanges ? this.mergeValues(state.recordRef, state.value) : state.value;\n result.push({ id: key, newValue: value, type: state.type });\n });\n return result;\n }\n /**\n * Returns the state of the record with provided id\n *\n * @param id The id of the record\n * @param pending Should get pending state\n * @returns State of the record if any\n */\n getState(id, pending = false) {\n return pending ? this._pendingStates.get(id) : this._states.get(id);\n }\n /**\n * Returns whether transaction is enabled for this service\n */\n get enabled() {\n return true;\n }\n /**\n * Returns value of the required id including all uncommitted changes\n *\n * @param id The id of the record to return value for\n * @param mergeChanges If set to true will merge state's value over relate recordRef\n * and will return merged value\n * @returns Value with changes or **null**\n */\n getAggregatedValue(id, mergeChanges) {\n const state = this._states.get(id);\n const pendingState = super.getState(id);\n // if there is no state and there is no pending state return null\n if (!state && !pendingState) {\n return null;\n }\n const pendingChange = super.getAggregatedValue(id, false);\n const change = state && state.value;\n let aggregatedValue = this.mergeValues(change, pendingChange);\n if (mergeChanges) {\n const originalValue = state ? state.recordRef : pendingState.recordRef;\n aggregatedValue = this.mergeValues(originalValue, aggregatedValue);\n }\n return aggregatedValue;\n }\n /**\n * Clears all pending transactions and aggregated pending state. If commit is set to true\n * commits pending states as single transaction\n *\n * @param commit Should commit the pending states\n */\n endPending(commit) {\n this._isPending = false;\n if (commit) {\n const actions = [];\n // don't use addTransaction due to custom undo handling\n for (const transaction of this._pendingTransactions) {\n const pendingState = this._pendingStates.get(transaction.id);\n this._transactions.push(transaction);\n this.updateState(this._states, transaction, pendingState.recordRef);\n actions.push({ transaction, recordRef: pendingState.recordRef });\n }\n this._undoStack.push(actions);\n this._redoStack = [];\n this.onStateUpdate.emit({ origin: TransactionEventOrigin.END, actions });\n }\n super.endPending(commit);\n }\n /**\n * Applies all transactions over the provided data\n *\n * @param data Data source to update\n * @param id Optional record id to commit transactions for\n */\n commit(data, id) {\n if (id !== undefined) {\n const state = this.getState(id);\n if (state) {\n this.updateRecord(data, state);\n }\n }\n else {\n this._states.forEach((s) => {\n this.updateRecord(data, s);\n });\n }\n this.clear(id);\n }\n /**\n * Clears all transactions\n *\n * @param id Optional record id to clear transactions for\n */\n clear(id) {\n if (id !== undefined) {\n this._transactions = this._transactions.filter(t => t.id !== id);\n this._states.delete(id);\n // Undo stack is an array of actions. Each action is array of transaction like objects\n // We are going trough all the actions. For each action we are filtering out transactions\n // with provided id. Finally if any action ends up as empty array we are removing it from\n // undo stack\n this._undoStack = this._undoStack.map(a => a.filter(t => t.transaction.id !== id)).filter(a => a.length > 0);\n }\n else {\n this._transactions = [];\n this._states.clear();\n this._undoStack = [];\n }\n this._redoStack = [];\n this.onStateUpdate.emit({ origin: TransactionEventOrigin.CLEAR, actions: [] });\n }\n /**\n * Remove the last transaction if any\n */\n undo() {\n if (this._undoStack.length <= 0) {\n return;\n }\n const lastActions = this._undoStack.pop();\n this._transactions.splice(this._transactions.length - lastActions.length);\n this._redoStack.push(lastActions);\n this._states.clear();\n for (const currentActions of this._undoStack) {\n for (const transaction of currentActions) {\n this.updateState(this._states, transaction.transaction, transaction.recordRef);\n }\n }\n this.onStateUpdate.emit({ origin: TransactionEventOrigin.UNDO, actions: lastActions });\n }\n /**\n * Applies the last undone transaction if any\n */\n redo() {\n if (this._redoStack.length > 0) {\n const actions = this._redoStack.pop();\n for (const action of actions) {\n this.updateState(this._states, action.transaction, action.recordRef);\n this._transactions.push(action.transaction);\n }\n this._undoStack.push(actions);\n this.onStateUpdate.emit({ origin: TransactionEventOrigin.REDO, actions });\n }\n }\n addTransaction(transaction, states, recordRef) {\n this.updateState(states, transaction, recordRef);\n const transactions = this._isPending ? this._pendingTransactions : this._transactions;\n transactions.push(transaction);\n if (!this._isPending) {\n const actions = [{ transaction, recordRef }];\n this._undoStack.push(actions);\n this._redoStack = [];\n this.onStateUpdate.emit({ origin: TransactionEventOrigin.ADD, actions });\n }\n }\n /**\n * Verifies if the passed transaction is correct. If not throws an exception.\n *\n * @param transaction Transaction to be verified\n */\n verifyAddedTransaction(states, transaction, recordRef) {\n const state = states.get(transaction.id);\n switch (transaction.type) {\n case TransactionType.ADD:\n if (state) {\n // cannot add same item twice\n throw new Error(`Cannot add this transaction. Transaction with id: ${transaction.id} has been already added.`);\n }\n break;\n case TransactionType.DELETE:\n case TransactionType.UPDATE:\n if (state && state.type === TransactionType.DELETE) {\n // cannot delete or update deleted items\n throw new Error(`Cannot add this transaction. Transaction with id: ${transaction.id} has been already deleted.`);\n }\n if (!state && !recordRef && !this._isPending) {\n // cannot initially add transaction or delete item with no recordRef\n throw new Error(`Cannot add this transaction. This is first transaction of type ${transaction.type} ` +\n `for id ${transaction.id}. For first transaction of this type recordRef is mandatory.`);\n }\n break;\n }\n }\n /**\n * Updates the provided states collection according to passed transaction and recordRef\n *\n * @param states States collection to apply the update to\n * @param transaction Transaction to apply to the current state\n * @param recordRef Reference to the value of the record in data source, if any, where transaction should be applied\n */\n updateState(states, transaction, recordRef) {\n let state = states.get(transaction.id);\n // if TransactionType is ADD simply add transaction to states;\n // if TransactionType is DELETE:\n // - if there is state with this id of type ADD remove it from the states;\n // - if there is state with this id of type UPDATE change its type to DELETE;\n // - if there is no state with this id add transaction to states;\n // if TransactionType is UPDATE:\n // - if there is state with this id of type ADD merge new value and state recordRef into state new value\n // - if there is state with this id of type UPDATE merge new value into state new value\n // - if there is state with this id and state type is DELETE change its type to UPDATE\n // - if there is no state with this id add transaction to states;\n if (state) {\n switch (transaction.type) {\n case TransactionType.DELETE:\n if (state.type === TransactionType.ADD) {\n states.delete(transaction.id);\n }\n else if (state.type === TransactionType.UPDATE) {\n state.value = transaction.newValue;\n state.type = TransactionType.DELETE;\n }\n break;\n case TransactionType.UPDATE:\n if (isObject(state.value)) {\n if (state.type === TransactionType.ADD) {\n state.value = this.mergeValues(state.value, transaction.newValue);\n }\n if (state.type === TransactionType.UPDATE) {\n mergeObjects(state.value, transaction.newValue);\n }\n }\n else {\n state.value = transaction.newValue;\n }\n }\n }\n else {\n state = { value: this.cloneStrategy.clone(transaction.newValue), recordRef, type: transaction.type };\n states.set(transaction.id, state);\n }\n this.cleanState(transaction.id, states);\n }\n /**\n * Updates state related record in the provided data\n *\n * @param data Data source to update\n * @param state State to update data from\n */\n updateRecord(data, state) {\n const index = data.findIndex(i => JSON.stringify(i) === JSON.stringify(state.recordRef || {}));\n switch (state.type) {\n case TransactionType.ADD:\n data.push(state.value);\n break;\n case TransactionType.DELETE:\n if (0 <= index && index < data.length) {\n data.splice(index, 1);\n }\n break;\n case TransactionType.UPDATE:\n if (0 <= index && index < data.length) {\n data[index] = this.updateValue(state);\n }\n break;\n }\n }\n}\n\n/** @experimental @hidden */\nclass IgxHierarchicalTransactionService extends IgxTransactionService {\n getAggregatedChanges(mergeChanges) {\n const result = [];\n this._states.forEach((state, key) => {\n const value = mergeChanges ? this.mergeValues(state.recordRef, state.value) : this.cloneStrategy.clone(state.value);\n this.clearArraysFromObject(value);\n result.push({ id: key, path: state.path, newValue: value, type: state.type });\n });\n return result;\n }\n commit(data, primaryKeyOrId, childDataKey, id) {\n if (childDataKey !== undefined) {\n let transactions = this.getAggregatedChanges(true);\n if (id !== undefined) {\n transactions = transactions.filter(t => t.id === id);\n }\n DataUtil.mergeHierarchicalTransactions(data, transactions, childDataKey, primaryKeyOrId, this.cloneStrategy, true);\n this.clear(id);\n }\n else {\n super.commit(data, primaryKeyOrId);\n }\n }\n updateState(states, transaction, recordRef) {\n super.updateState(states, transaction, recordRef);\n // if transaction has no path, e.g. flat data source, get out\n if (!transaction.path) {\n return;\n }\n const currentState = states.get(transaction.id);\n if (currentState) {\n currentState.path = transaction.path;\n }\n // if transaction has path, Hierarchical data source, and it is DELETE\n // type transaction for all child rows remove ADD states and update\n // transaction type and value of UPDATE states\n if (transaction.type === TransactionType.DELETE) {\n states.forEach((v, k) => {\n if (v.path && v.path.indexOf(transaction.id) !== -1) {\n switch (v.type) {\n case TransactionType.ADD:\n states.delete(k);\n break;\n case TransactionType.UPDATE:\n states.get(k).type = TransactionType.DELETE;\n states.get(k).value = null;\n }\n }\n });\n }\n }\n // TODO: remove this method. Force cloning to strip child arrays when needed instead\n clearArraysFromObject(obj) {\n if (obj) {\n for (const prop of Object.keys(obj)) {\n if (Array.isArray(obj[prop])) {\n delete obj[prop];\n }\n }\n }\n }\n}\n\n/**\n * Factory service for instantiating TransactionServices\n */\nclass IgxFlatTransactionFactory {\n /**\n * Creates a new Transaction service instance depending on the specified type.\n *\n * @param type The type of the transaction\n * @returns a new instance of TransactionService\n */\n create(type) {\n switch (type) {\n case (\"Base\" /* TRANSACTION_TYPE.Base */):\n return new IgxTransactionService();\n default:\n return new IgxBaseTransactionService();\n }\n }\n}\nIgxFlatTransactionFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFlatTransactionFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIgxFlatTransactionFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFlatTransactionFactory, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFlatTransactionFactory, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n/**\n * Factory service for instantiating HierarchicalTransactionServices\n */\nclass IgxHierarchicalTransactionFactory extends IgxFlatTransactionFactory {\n /**\n * Creates a new HierarchialTransaction service instance depending on the specified type.\n *\n * @param type The type of the transaction\n * @returns a new instance of HierarchialTransaction\n */\n create(type) {\n switch (type) {\n case (\"Base\" /* TRANSACTION_TYPE.Base */):\n return new IgxHierarchicalTransactionService();\n ;\n default:\n return new IgxBaseTransactionService();\n }\n }\n}\nIgxHierarchicalTransactionFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalTransactionFactory, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\nIgxHierarchicalTransactionFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalTransactionFactory, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalTransactionFactory, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n\n// Export services\n\nclass IgxToggleDirective {\n /**\n * @hidden\n */\n get collapsed() {\n return this._collapsed;\n }\n /**\n * @hidden\n */\n get element() {\n return this.elementRef.nativeElement;\n }\n /**\n * @hidden\n */\n get hiddenClass() {\n return this.collapsed;\n }\n /**\n * @hidden\n */\n get defaultClass() {\n return !this.collapsed;\n }\n /**\n * @hidden\n */\n constructor(elementRef, cdr, overlayService, navigationService) {\n this.elementRef = elementRef;\n this.cdr = cdr;\n this.overlayService = overlayService;\n this.navigationService = navigationService;\n /**\n * Emits an event after the toggle container is opened.\n *\n * ```typescript\n * onToggleOpened(event) {\n * alert(\"Toggle opened!\");\n * }\n * ```\n *\n * ```html\n * \n *
    \n * ```\n */\n this.opened = new EventEmitter();\n /**\n * Emits an event before the toggle container is opened.\n *\n * ```typescript\n * onToggleOpening(event) {\n * alert(\"Toggle opening!\");\n * }\n * ```\n *\n * ```html\n * \n *
    \n * ```\n */\n this.opening = new EventEmitter();\n /**\n * Emits an event after the toggle container is closed.\n *\n * ```typescript\n * onToggleClosed(event) {\n * alert(\"Toggle closed!\");\n * }\n * ```\n *\n * ```html\n * \n *
    \n * ```\n */\n this.closed = new EventEmitter();\n /**\n * Emits an event before the toggle container is closed.\n *\n * ```typescript\n * onToggleClosing(event) {\n * alert(\"Toggle closing!\");\n * }\n * ```\n *\n * ```html\n * \n *
    \n * ```\n */\n this.closing = new EventEmitter();\n /**\n * Emits an event after the toggle element is appended to the overlay container.\n *\n * ```typescript\n * onAppended() {\n * alert(\"Content appended!\");\n * }\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.appended = new EventEmitter();\n this._collapsed = true;\n this.destroy$ = new Subject();\n this._overlaySubFilter = [\n filter(x => x.id === this._overlayId),\n takeUntil(this.destroy$)\n ];\n this.overlayClosed = (e) => {\n this._collapsed = true;\n this.cdr.detectChanges();\n this.unsubscribe();\n this.overlayService.detach(this.overlayId);\n const args = { owner: this, id: this._overlayId, event: e.event };\n delete this._overlayId;\n this.closed.emit(args);\n this.cdr.markForCheck();\n };\n }\n /**\n * Opens the toggle.\n *\n * ```typescript\n * this.myToggle.open();\n * ```\n */\n open(overlaySettings) {\n var _a, _b, _c, _d;\n // if there is open animation do nothing\n // if toggle is not collapsed and there is no close animation do nothing\n const info = this.overlayService.getOverlayById(this._overlayId);\n const openAnimationStarted = (_b = (_a = info === null || info === void 0 ? void 0 : info.openAnimationPlayer) === null || _a === void 0 ? void 0 : _a.hasStarted()) !== null && _b !== void 0 ? _b : false;\n const closeAnimationStarted = (_d = (_c = info === null || info === void 0 ? void 0 : info.closeAnimationPlayer) === null || _c === void 0 ? void 0 : _c.hasStarted()) !== null && _d !== void 0 ? _d : false;\n if (openAnimationStarted || !(this._collapsed || closeAnimationStarted)) {\n return;\n }\n this._collapsed = false;\n this.cdr.detectChanges();\n if (!info) {\n this.unsubscribe();\n this.subscribe();\n this._overlayId = this.overlayService.attach(this.elementRef, overlaySettings);\n }\n const args = { cancel: false, owner: this, id: this._overlayId };\n this.opening.emit(args);\n if (args.cancel) {\n this.unsubscribe();\n this.overlayService.detach(this._overlayId);\n this._collapsed = true;\n delete this._overlayId;\n this.cdr.detectChanges();\n return;\n }\n this.overlayService.show(this._overlayId, overlaySettings);\n }\n /**\n * Closes the toggle.\n *\n * ```typescript\n * this.myToggle.close();\n * ```\n */\n close(event) {\n var _a;\n // if toggle is collapsed do nothing\n // if there is close animation do nothing, toggle will close anyway\n const info = this.overlayService.getOverlayById(this._overlayId);\n const closeAnimationStarted = ((_a = info === null || info === void 0 ? void 0 : info.closeAnimationPlayer) === null || _a === void 0 ? void 0 : _a.hasStarted()) || false;\n if (this._collapsed || closeAnimationStarted) {\n return;\n }\n this.overlayService.hide(this._overlayId, event);\n }\n /**\n * Opens or closes the toggle, depending on its current state.\n *\n * ```typescript\n * this.myToggle.toggle();\n * ```\n */\n toggle(overlaySettings) {\n // if toggle is collapsed call open\n // if there is running close animation call open\n if (this.collapsed || this.isClosing) {\n this.open(overlaySettings);\n }\n else {\n this.close();\n }\n }\n /** @hidden @internal */\n get isClosing() {\n var _a;\n const info = this.overlayService.getOverlayById(this._overlayId);\n return info ? (_a = info.closeAnimationPlayer) === null || _a === void 0 ? void 0 : _a.hasStarted() : false;\n }\n /**\n * Returns the id of the overlay the content is rendered in.\n * ```typescript\n * this.myToggle.overlayId;\n * ```\n */\n get overlayId() {\n return this._overlayId;\n }\n /**\n * Repositions the toggle.\n * ```typescript\n * this.myToggle.reposition();\n * ```\n */\n reposition() {\n this.overlayService.reposition(this._overlayId);\n }\n /**\n * Offsets the content along the corresponding axis by the provided amount\n */\n setOffset(deltaX, deltaY) {\n this.overlayService.setOffset(this._overlayId, deltaX, deltaY);\n }\n /**\n * @hidden\n */\n ngOnInit() {\n if (this.navigationService && this.id) {\n this.navigationService.add(this.id, this);\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.navigationService && this.id) {\n this.navigationService.remove(this.id);\n }\n if (this._overlayId) {\n this.overlayService.detach(this._overlayId);\n }\n this.unsubscribe();\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n subscribe() {\n this._overlayContentAppendedSub = this.overlayService\n .contentAppended\n .pipe(first$1(), takeUntil(this.destroy$))\n .subscribe(() => {\n const args = { owner: this, id: this._overlayId };\n this.appended.emit(args);\n });\n this._overlayOpenedSub = this.overlayService\n .opened\n .pipe(...this._overlaySubFilter)\n .subscribe(() => {\n const args = { owner: this, id: this._overlayId };\n this.opened.emit(args);\n });\n this._overlayClosingSub = this.overlayService\n .closing\n .pipe(...this._overlaySubFilter)\n .subscribe((e) => {\n const args = { cancel: false, event: e.event, owner: this, id: this._overlayId };\n this.closing.emit(args);\n e.cancel = args.cancel;\n // in case event is not canceled this will close the toggle and we need to unsubscribe.\n // Otherwise if for some reason, e.g. close on outside click, close() gets called before\n // onClosed was fired we will end with calling onClosing more than once\n if (!e.cancel) {\n this.clearSubscription(this._overlayClosingSub);\n }\n });\n this._overlayClosedSub = this.overlayService\n .closed\n .pipe(...this._overlaySubFilter)\n .subscribe(this.overlayClosed);\n }\n unsubscribe() {\n this.clearSubscription(this._overlayOpenedSub);\n this.clearSubscription(this._overlayClosingSub);\n this.clearSubscription(this._overlayClosedSub);\n this.clearSubscription(this._overlayContentAppendedSub);\n }\n clearSubscription(subscription) {\n if (subscription && !subscription.closed) {\n subscription.unsubscribe();\n }\n }\n}\nIgxToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToggleDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxOverlayService }, { token: IgxNavigationService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nIgxToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxToggleDirective, selector: \"[igxToggle]\", inputs: { id: \"id\" }, outputs: { opened: \"opened\", opening: \"opening\", closed: \"closed\", closing: \"closing\", appended: \"appended\" }, host: { properties: { \"class.igx-toggle--hidden\": \"this.hiddenClass\", \"attr.aria-hidden\": \"this.hiddenClass\", \"class.igx-toggle\": \"this.defaultClass\" } }, exportAs: [\"toggle\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToggleDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'toggle',\n selector: '[igxToggle]'\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxOverlayService, decorators: [{\n type: Inject,\n args: [IgxOverlayService]\n }] }, { type: IgxNavigationService, decorators: [{\n type: Optional\n }] }];\n }, propDecorators: { opened: [{\n type: Output\n }], opening: [{\n type: Output\n }], closed: [{\n type: Output\n }], closing: [{\n type: Output\n }], appended: [{\n type: Output\n }], id: [{\n type: Input\n }], hiddenClass: [{\n type: HostBinding,\n args: ['class.igx-toggle--hidden']\n }, {\n type: HostBinding,\n args: ['attr.aria-hidden']\n }], defaultClass: [{\n type: HostBinding,\n args: ['class.igx-toggle']\n }] } });\nclass IgxToggleActionDirective {\n /**\n * @hidden\n */\n set target(target) {\n if (target !== null && target !== '') {\n this._target = target;\n }\n }\n /**\n * @hidden\n */\n get target() {\n if (typeof this._target === 'string') {\n return this.navigationService.get(this._target);\n }\n return this._target;\n }\n constructor(element, navigationService) {\n this.element = element;\n this.navigationService = navigationService;\n }\n /**\n * @hidden\n */\n onClick() {\n if (this.outlet) {\n this._overlayDefaults.outlet = this.outlet;\n }\n const clonedSettings = Object.assign({}, this._overlayDefaults, this.overlaySettings);\n this.updateOverlaySettings(clonedSettings);\n this.target.toggle(clonedSettings);\n }\n /**\n * @hidden\n */\n ngOnInit() {\n const targetElement = this.element.nativeElement;\n this._overlayDefaults = {\n target: targetElement,\n positionStrategy: new ConnectedPositioningStrategy(),\n scrollStrategy: new AbsoluteScrollStrategy(),\n closeOnOutsideClick: true,\n modal: false,\n excludeFromOutsideClick: [targetElement]\n };\n }\n /**\n * Updates provided overlay settings\n *\n * @param settings settings to update\n * @returns returns updated copy of provided overlay settings\n */\n updateOverlaySettings(settings) {\n if (settings && settings.positionStrategy) {\n const positionStrategyClone = settings.positionStrategy.clone();\n settings.target = this.element.nativeElement;\n settings.positionStrategy = positionStrategyClone;\n }\n return settings;\n }\n}\nIgxToggleActionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToggleActionDirective, deps: [{ token: i0.ElementRef }, { token: IgxNavigationService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nIgxToggleActionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxToggleActionDirective, selector: \"[igxToggleAction]\", inputs: { overlaySettings: \"overlaySettings\", outlet: [\"igxToggleOutlet\", \"outlet\"], target: [\"igxToggleAction\", \"target\"] }, host: { listeners: { \"click\": \"onClick()\" } }, exportAs: [\"toggle-action\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToggleActionDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'toggle-action',\n selector: '[igxToggleAction]'\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: IgxNavigationService, decorators: [{\n type: Optional\n }] }];\n }, propDecorators: { overlaySettings: [{\n type: Input\n }], outlet: [{\n type: Input,\n args: ['igxToggleOutlet']\n }], target: [{\n type: Input,\n args: ['igxToggleAction']\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }] } });\n/**\n * Mark an element as an igxOverlay outlet container.\n * Directive instance is exported as `overlay-outlet` to be assigned to templates variables:\n * ```html\n *
    \n * ```\n */\nclass IgxOverlayOutletDirective {\n constructor(element) {\n this.element = element;\n }\n /** @hidden */\n get nativeElement() {\n return this.element.nativeElement;\n }\n}\nIgxOverlayOutletDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxOverlayOutletDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxOverlayOutletDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxOverlayOutletDirective, selector: \"[igxOverlayOutlet]\", exportAs: [\"overlay-outlet\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxOverlayOutletDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'overlay-outlet',\n selector: '[igxOverlayOutlet]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n/**\n * @hidden\n */\nclass IgxToggleModule {\n}\nIgxToggleModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToggleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxToggleModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToggleModule, declarations: [IgxToggleDirective, IgxToggleActionDirective, IgxOverlayOutletDirective], exports: [IgxToggleDirective, IgxToggleActionDirective, IgxOverlayOutletDirective] });\nIgxToggleModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToggleModule, providers: [IgxNavigationService] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToggleModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxToggleDirective, IgxToggleActionDirective, IgxOverlayOutletDirective],\n exports: [IgxToggleDirective, IgxToggleActionDirective, IgxOverlayOutletDirective],\n providers: [IgxNavigationService]\n }]\n }] });\n\n/** @hidden */\nvar Navigate;\n(function (Navigate) {\n Navigate[Navigate[\"Up\"] = -1] = \"Up\";\n Navigate[Navigate[\"Down\"] = 1] = \"Down\";\n})(Navigate || (Navigate = {}));\n/** Key actions that have designated handlers in IgxDropDownComponent */\nconst DropDownActionKey = mkenum({\n ESCAPE: 'escape',\n ENTER: 'enter',\n SPACE: 'space'\n});\nconst IGX_DROPDOWN_BASE = new InjectionToken('IgxDropDownBaseToken');\n\n/** @hidden */\nclass IgxSelectionAPIService {\n constructor() {\n /**\n * If primaryKey is defined, then multiple selection is based on the primaryKey, and it is array of numbers, strings, etc.\n * If the primaryKey is omitted, then selection is based on the item data\n */\n this.selection = new Map();\n }\n /**\n * Get current component selection.\n *\n * @param componentID ID of the component.\n */\n get(componentID) {\n return this.selection.get(componentID);\n }\n /**\n * Set new component selection.\n *\n * @param componentID ID of the component.\n * @param newSelection The new component selection to be set.\n */\n set(componentID, newSelection) {\n if (!componentID) {\n throw Error('Invalid value for component id!');\n }\n this.selection.set(componentID, newSelection);\n }\n /**\n * Clears selection for component.\n *\n * @param componentID ID of the component.\n */\n clear(componentID) {\n this.selection.set(componentID, this.get_empty());\n }\n /**\n * Get current component selection length.\n *\n * @param componentID ID of the component.\n */\n size(componentID) {\n const sel = this.get(componentID);\n return sel ? sel.size : 0;\n }\n /**\n * Creates new selection that consist of the new item added to the current component selection.\n * The returned collection is new Set,\n * therefore if you want to update component selection you need to call in addition the set_selection() method\n * or instead use the select_item() one.\n *\n * @param componentID ID of the component, which we add new item to.\n * @param itemID ID of the item to add to component selection.\n * @param sel Used internally only by the selection (add_items method) to accumulate selection for multiple items.\n *\n * @returns Selection after the new item is added.\n */\n add_item(componentID, itemID, sel) {\n if (!sel) {\n sel = new Set(this.get(componentID));\n }\n if (sel === undefined) {\n sel = this.get_empty();\n }\n sel.add(itemID);\n return sel;\n }\n /**\n * Creates new selection that consist of the new items added to the current component selection.\n * The returned collection is new Set,\n * therefore if you want to update component selection you need to call in addition the set_selection() method\n * or instead use the select_items() one.\n *\n * @param componentID ID of the component, which we add new items to.\n * @param itemIDs Array of IDs of the items to add to component selection.\n * @param clearSelection If true it will clear previous selection.\n *\n * @returns Selection after the new items are added.\n */\n add_items(componentID, itemIDs, clearSelection) {\n let selection;\n if (clearSelection) {\n selection = this.get_empty();\n }\n else if (itemIDs && itemIDs.length === 0) {\n selection = new Set(this.get(componentID));\n }\n itemIDs.forEach((item) => selection = this.add_item(componentID, item, selection));\n return selection;\n }\n /**\n * Add item to the current component selection.\n *\n * @param componentID ID of the component, which we add new item to.\n * @param itemID ID of the item to add to component selection.\n * @param sel Used internally only by the selection (select_items method) to accumulate selection for multiple items.\n */\n select_item(componentID, itemID, sel) {\n this.set(componentID, this.add_item(componentID, itemID, sel));\n }\n /**\n * Add items to the current component selection.\n *\n * @param componentID ID of the component, which we add new items to.\n * @param itemIDs Array of IDs of the items to add to component selection.\n * @param clearSelection If true it will clear previous selection.\n */\n select_items(componentID, itemID, clearSelection) {\n this.set(componentID, this.add_items(componentID, itemID, clearSelection));\n }\n /**\n * Creates new selection that consist of the new items excluded from the current component selection.\n * The returned collection is new Set,\n * therefore if you want to update component selection you need to call in addition the set_selection() method\n * or instead use the deselect_item() one.\n *\n * @param componentID ID of the component, which we remove items from.\n * @param itemID ID of the item to remove from component selection.\n * @param sel Used internally only by the selection (delete_items method) to accumulate deselected items.\n *\n * @returns Selection after the item is removed.\n */\n delete_item(componentID, itemID, sel) {\n if (!sel) {\n sel = new Set(this.get(componentID));\n }\n if (sel === undefined) {\n return;\n }\n sel.delete(itemID);\n return sel;\n }\n /**\n * Creates new selection that consist of the new items removed to the current component selection.\n * The returned collection is new Set,\n * therefore if you want to update component selection you need to call in addition the set_selection() method\n * or instead use the deselect_items() one.\n *\n * @param componentID ID of the component, which we remove items from.\n * @param itemID ID of the items to remove from component selection.\n *\n * @returns Selection after the items are removed.\n */\n delete_items(componentID, itemIDs) {\n let selection;\n itemIDs.forEach((deselectedItem) => selection = this.delete_item(componentID, deselectedItem, selection));\n return selection;\n }\n /**\n * Remove item from the current component selection.\n *\n * @param componentID ID of the component, which we remove item from.\n * @param itemID ID of the item to remove from component selection.\n * @param sel Used internally only by the selection (deselect_items method) to accumulate selection for multiple items.\n */\n deselect_item(componentID, itemID, sel) {\n this.set(componentID, this.delete_item(componentID, itemID, sel));\n }\n /**\n * Remove items to the current component selection.\n *\n * @param componentID ID of the component, which we add new items to.\n * @param itemIDs Array of IDs of the items to add to component selection.\n */\n deselect_items(componentID, itemID, _clearSelection) {\n this.set(componentID, this.delete_items(componentID, itemID));\n }\n /**\n * Check if the item is selected in the component selection.\n *\n * @param componentID ID of the component.\n * @param itemID ID of the item to search.\n *\n * @returns If item is selected.\n */\n is_item_selected(componentID, itemID) {\n const sel = this.get(componentID);\n if (!sel) {\n return false;\n }\n return sel.has(itemID);\n }\n /**\n * Get first element in the selection.\n * This is correct when we have only one item in the collection (for single selection purposes)\n * and the method returns that item.\n *\n * @param componentID ID of the component.\n *\n * @returns First element in the set.\n */\n first_item(componentID) {\n const sel = this.get(componentID);\n if (sel && sel.size > 0) {\n return sel.values().next().value;\n }\n }\n /**\n * Returns whether all items are selected.\n *\n * @param componentID ID of the component.\n * @param dataCount: number Number of items in the data.\n *\n * @returns If all items are selected.\n */\n are_all_selected(componentID, dataCount) {\n return dataCount > 0 && dataCount === this.size(componentID);\n }\n /**\n * Returns whether any of the items is selected.\n *\n * @param componentID ID of the component.\n * @param data Entire data array.\n *\n * @returns If there is any item selected.\n */\n are_none_selected(componentID) {\n return this.size(componentID) === 0;\n }\n /**\n * Get all primary key values from a data array. If there isn't a primary key defined that the entire data is returned instead.\n *\n * @param data Entire data array.\n * @param primaryKey Data primary key.\n *\n * @returns Array of identifiers, either primary key values or the entire data array.\n */\n get_all_ids(data, primaryKey) {\n // If primaryKey is 0, this should still map to the property\n return primaryKey !== undefined && primaryKey !== null ? data.map((x) => x[primaryKey]) : data;\n }\n /**\n * Returns empty selection collection.\n *\n * @returns empty set.\n */\n get_empty() {\n return new Set();\n }\n}\nIgxSelectionAPIService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectionAPIService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIgxSelectionAPIService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectionAPIService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectionAPIService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n\nlet NEXT_ID$v = 0;\n/**\n * The `` is a container intended for row items in\n * a `` container.\n */\nclass IgxDropDownGroupComponent {\n constructor() {\n /**\n * @hidden @internal\n */\n this.role = 'group';\n /** @hidden @internal */\n this.groupClass = true;\n /**\n * Sets/gets if the item group is disabled\n *\n * ```typescript\n * const myDropDownGroup: IgxDropDownGroupComponent = this.dropdownGroup;\n * // get\n * ...\n * const groupState: boolean = myDropDownGroup.disabled;\n * ...\n * //set\n * ...\n * myDropDownGroup,disabled = false;\n * ...\n * ```\n *\n * ```html\n * \n * \n * {{ item.text }}\n * \n * \n * ```\n *\n * **NOTE:** All items inside of a disabled drop down group will be treated as disabled\n */\n this.disabled = false;\n this._id = NEXT_ID$v++;\n }\n /**\n * @hidden @internal\n */\n get labelId() {\n return `igx-item-group-label-${this._id}`;\n }\n get labelledBy() {\n return this.labelId;\n }\n}\nIgxDropDownGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxDropDownGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDropDownGroupComponent, selector: \"igx-drop-down-item-group\", inputs: { disabled: \"disabled\", label: \"label\" }, host: { properties: { \"attr.aria-labelledby\": \"this.labelledBy\", \"attr.role\": \"this.role\", \"class.igx-drop-down__group\": \"this.groupClass\", \"attr.aria-disabled\": \"this.disabled\", \"class.igx-drop-down__group--disabled\": \"this.disabled\" } }, ngImport: i0, template: `\n \n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownGroupComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'igx-drop-down-item-group',\n template: `\n \n \n `\n }]\n }], propDecorators: { labelledBy: [{\n type: HostBinding,\n args: [`attr.aria-labelledby`]\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], groupClass: [{\n type: HostBinding,\n args: ['class.igx-drop-down__group']\n }], disabled: [{\n type: Input\n }, {\n type: HostBinding,\n args: [`attr.aria-disabled`]\n }, {\n type: HostBinding,\n args: ['class.igx-drop-down__group--disabled']\n }], label: [{\n type: Input\n }] } });\n\nlet NEXT_ID$u = 0;\n/**\n * An abstract class defining a drop-down item:\n * With properties / styles for selection, highlight, height\n * Bindable property for passing data (`value: any`)\n * Parent component (has to be used under a parent with type `IDropDownBase`)\n * Method for handling click on Host()\n */\nclass IgxDropDownItemBaseDirective {\n get ariaLabel() {\n return this._label ? this._label : this.value ? this.value : this.id;\n }\n set ariaLabel(value) {\n this._label = value;\n }\n /**\n * @hidden @internal\n */\n get itemID() {\n return this;\n }\n /**\n * The data index of the dropdown item.\n *\n * ```typescript\n * // get the data index of the selected dropdown item\n * let selectedItemIndex = this.dropdown.selectedItem.index\n * ```\n */\n get index() {\n if (this._index === null) {\n return this.itemIndex;\n }\n return this._index;\n }\n set index(value) {\n this._index = value;\n }\n /**\n * @hidden @internal\n */\n get itemStyle() {\n return !this.isHeader;\n }\n /**\n * @hidden @internal\n */\n get itemStyleCosy() {\n return this.dropDown.displayDensity === 'cosy' && !this.isHeader;\n }\n /**\n * @hidden @internal\n */\n get itemStyleCompact() {\n return this.dropDown.displayDensity === 'compact' && !this.isHeader;\n }\n /**\n * Sets/Gets if the item is the currently selected one in the dropdown\n *\n * ```typescript\n * let mySelectedItem = this.dropdown.selectedItem;\n * let isMyItemSelected = mySelectedItem.selected; // true\n * ```\n *\n * Two-way data binding\n * ```html\n * \n * ```\n */\n get selected() {\n return this._selected;\n }\n set selected(value) {\n if (this.isHeader) {\n return;\n }\n this._selected = value;\n this.selectedChange.emit(this._selected);\n }\n /**\n * Sets/gets if the given item is focused\n * ```typescript\n * let mySelectedItem = this.dropdown.selectedItem;\n * let isMyItemFocused = mySelectedItem.focused;\n * ```\n */\n get focused() {\n return this.isSelectable && this._focused;\n }\n /**\n * ```html\n * \n *
    \n * {{item.field}}\n *
    \n *
    \n * ```\n */\n set focused(value) {\n this._focused = value;\n }\n /**\n * @hidden @internal\n */\n get headerClassCosy() {\n return this.isHeader && this.dropDown.displayDensity === 'cosy';\n }\n /**\n * @hidden @internal\n */\n get headerClassCompact() {\n return this.isHeader && this.dropDown.displayDensity === 'compact';\n }\n /**\n * Sets/gets if the given item is disabled\n *\n * ```typescript\n * // get\n * let mySelectedItem = this.dropdown.selectedItem;\n * let myItemIsDisabled = mySelectedItem.disabled;\n * ```\n *\n * ```html\n * \n *
    \n * {{item.field}}\n *
    \n *
    \n * ```\n * **NOTE:** Drop-down items inside of a disabled `IgxDropDownGroup` will always count as disabled\n */\n get disabled() {\n return this.group ? this.group.disabled || this._disabled : this._disabled;\n }\n set disabled(value) {\n this._disabled = value;\n }\n /**\n * Gets item index\n *\n * @hidden @internal\n */\n get itemIndex() {\n return this.dropDown.items.indexOf(this);\n }\n /**\n * Gets item element height\n *\n * @hidden @internal\n */\n get elementHeight() {\n return this.elementRef.nativeElement.clientHeight;\n }\n /**\n * Get item html element\n *\n * @hidden @internal\n */\n get element() {\n return this.elementRef;\n }\n get hasIndex() {\n return this._index !== null && this._index !== undefined;\n }\n constructor(dropDown, elementRef, group, selection) {\n this.dropDown = dropDown;\n this.elementRef = elementRef;\n this.group = group;\n this.selection = selection;\n /**\n * Sets/gets the `id` of the item.\n * ```html\n * \n * ```\n * ```typescript\n * let itemId = this.item.id;\n * ```\n *\n * @memberof IgxSelectItemComponent\n */\n this.id = `igx-drop-down-item-${NEXT_ID$u++}`;\n /**\n * @hidden\n */\n this.selectedChange = new EventEmitter();\n /**\n * Gets/sets the `role` attribute of the item. Default is 'option'.\n *\n * ```html\n * \n * ```\n */\n this.role = 'option';\n /**\n * @hidden\n */\n this._focused = false;\n this._selected = false;\n this._index = null;\n this._disabled = false;\n this._label = null;\n }\n /**\n * @hidden\n * @internal\n */\n clicked(event) {\n }\n /**\n * @hidden\n * @internal\n */\n handleMousedown(event) {\n if (!this.dropDown.allowItemsFocus) {\n event.preventDefault();\n }\n }\n ngDoCheck() {\n if (this._selected) {\n const dropDownSelectedItem = this.dropDown.selectedItem;\n if (!dropDownSelectedItem) {\n this.dropDown.selectItem(this);\n }\n else if (this.hasIndex\n ? this._index !== dropDownSelectedItem.index || this.value !== dropDownSelectedItem.value :\n this !== dropDownSelectedItem) {\n this.dropDown.selectItem(this);\n }\n }\n }\n /** Returns true if the items is not a header or disabled */\n get isSelectable() {\n return !(this.disabled || this.isHeader);\n }\n /** If `allowItemsFocus` is enabled, keep the browser focus on the active item */\n ensureItemFocus() {\n if (this.dropDown.allowItemsFocus) {\n const focusedItem = this.dropDown.items.find((item) => item.focused);\n if (!focusedItem) {\n return;\n }\n focusedItem.element.nativeElement.focus({ preventScroll: true });\n }\n }\n}\nIgxDropDownItemBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownItemBaseDirective, deps: [{ token: IGX_DROPDOWN_BASE }, { token: i0.ElementRef }, { token: IgxDropDownGroupComponent, optional: true }, { token: IgxSelectionAPIService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nIgxDropDownItemBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDropDownItemBaseDirective, selector: \"[igxDropDownItemBase]\", inputs: { id: \"id\", ariaLabel: \"ariaLabel\", index: \"index\", value: \"value\", selected: \"selected\", isHeader: \"isHeader\", disabled: \"disabled\", role: \"role\" }, outputs: { selectedChange: \"selectedChange\" }, host: { listeners: { \"click\": \"clicked($event)\", \"mousedown\": \"handleMousedown($event)\" }, properties: { \"attr.id\": \"this.id\", \"attr.aria-label\": \"this.ariaLabel\", \"class.igx-drop-down__item\": \"this.itemStyle\", \"class.igx-drop-down__item--cosy\": \"this.itemStyleCosy\", \"class.igx-drop-down__item--compact\": \"this.itemStyleCompact\", \"attr.aria-selected\": \"this.selected\", \"class.igx-drop-down__item--selected\": \"this.selected\", \"class.igx-drop-down__item--focused\": \"this.focused\", \"class.igx-drop-down__header\": \"this.isHeader\", \"class.igx-drop-down__header--cosy\": \"this.headerClassCosy\", \"class.igx-drop-down__header--compact\": \"this.headerClassCompact\", \"attr.aria-disabled\": \"this.disabled\", \"class.igx-drop-down__item--disabled\": \"this.disabled\", \"attr.role\": \"this.role\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownItemBaseDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxDropDownItemBase]'\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_DROPDOWN_BASE]\n }] }, { type: i0.ElementRef }, { type: IgxDropDownGroupComponent, decorators: [{\n type: Optional\n }] }, { type: IgxSelectionAPIService, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IgxSelectionAPIService]\n }] }];\n }, propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], ariaLabel: [{\n type: HostBinding,\n args: ['attr.aria-label']\n }, {\n type: Input\n }], index: [{\n type: Input\n }], value: [{\n type: Input\n }], itemStyle: [{\n type: HostBinding,\n args: ['class.igx-drop-down__item']\n }], itemStyleCosy: [{\n type: HostBinding,\n args: ['class.igx-drop-down__item--cosy']\n }], itemStyleCompact: [{\n type: HostBinding,\n args: ['class.igx-drop-down__item--compact']\n }], selected: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.aria-selected']\n }, {\n type: HostBinding,\n args: ['class.igx-drop-down__item--selected']\n }], selectedChange: [{\n type: Output\n }], focused: [{\n type: HostBinding,\n args: ['class.igx-drop-down__item--focused']\n }], isHeader: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.igx-drop-down__header']\n }], headerClassCosy: [{\n type: HostBinding,\n args: ['class.igx-drop-down__header--cosy']\n }], headerClassCompact: [{\n type: HostBinding,\n args: ['class.igx-drop-down__header--compact']\n }], disabled: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.igx-drop-down__item--disabled']\n }], role: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.role']\n }], clicked: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], handleMousedown: [{\n type: HostListener,\n args: ['mousedown', ['$event']]\n }] } });\n\n/**\n * The `` is a container intended for row items in\n * a `` container.\n */\nclass IgxDropDownItemComponent extends IgxDropDownItemBaseDirective {\n /**\n * Sets/gets if the given item is focused\n * ```typescript\n * let mySelectedItem = this.dropdown.selectedItem;\n * let isMyItemFocused = mySelectedItem.focused;\n * ```\n */\n get focused() {\n let focusedState = this._focused;\n if (this.hasIndex) {\n const focusedItem = this.selection.first_item(`${this.dropDown.id}-active`);\n const focusedIndex = focusedItem ? focusedItem.index : -1;\n focusedState = this._index === focusedIndex;\n }\n return this.isSelectable && focusedState;\n }\n /**\n * Sets/gets if the given item is focused\n * ```typescript\n * let mySelectedItem = this.dropdown.selectedItem;\n * let isMyItemFocused = mySelectedItem.focused;\n * ```\n */\n set focused(value) {\n this._focused = value;\n }\n /**\n * Sets/Gets if the item is the currently selected one in the dropdown\n *\n * ```typescript\n * let mySelectedItem = this.dropdown.selectedItem;\n * let isMyItemSelected = mySelectedItem.selected; // true\n * ```\n *\n * Two-way data binding\n * ```html\n * \n * ```\n */\n get selected() {\n if (this.hasIndex) {\n const item = this.selection.first_item(`${this.dropDown.id}`);\n return item ? item.index === this._index && item.value === this.value : false;\n }\n return this._selected;\n }\n /**\n * Sets/Gets if the item is the currently selected one in the dropdown\n *\n */\n set selected(value) {\n if (this.isHeader) {\n return;\n }\n this._selected = value;\n this.selectedChange.emit(this._selected);\n }\n /**\n * @hidden @internal\n */\n get setTabIndex() {\n const shouldSetTabIndex = this.dropDown.allowItemsFocus && this.isSelectable;\n if (shouldSetTabIndex) {\n return 0;\n }\n else {\n return null;\n }\n }\n clicked(event) {\n if (!this.isSelectable) {\n this.ensureItemFocus();\n return;\n }\n if (this.selection) {\n this.dropDown.selectItem(this, event);\n }\n }\n}\nIgxDropDownItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxDropDownItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDropDownItemComponent, selector: \"igx-drop-down-item\", host: { properties: { \"attr.tabindex\": \"this.setTabIndex\" } }, usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n \\n \\n \\n \\n\\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-drop-down-item', template: \"\\n \\n \\n \\n \\n \\n \\n\\n\" }]\n }], propDecorators: { setTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }] } });\n\n/**\n * Defines the possible values of the components' display density.\n */\nconst DisplayDensity = mkenum({\n comfortable: 'comfortable',\n cosy: 'cosy',\n compact: 'compact'\n});\n/**\n * Defines the DisplayDensity DI token.\n */\nconst DisplayDensityToken = new InjectionToken('DisplayDensity');\n/**\n * Base class containing all logic required for implementing DisplayDensity.\n */\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nclass DisplayDensityBase {\n /**\n * Returns the theme of the component.\n * The default theme is `comfortable`.\n * Available options are `comfortable`, `cosy`, `compact`.\n * ```typescript\n * let componentTheme = this.component.displayDensity;\n * ```\n */\n get displayDensity() {\n return this._displayDensity ||\n ((this.displayDensityOptions && this.displayDensityOptions.displayDensity) || DisplayDensity.comfortable);\n }\n /**\n * Sets the theme of the component.\n */\n set displayDensity(val) {\n const currentDisplayDensity = this._displayDensity;\n this._displayDensity = val;\n if (currentDisplayDensity !== this._displayDensity) {\n const densityChangedArgs = {\n oldDensity: currentDisplayDensity,\n newDensity: this._displayDensity\n };\n this.densityChanged.emit(densityChangedArgs);\n }\n }\n constructor(displayDensityOptions) {\n this.displayDensityOptions = displayDensityOptions;\n this.densityChanged = new EventEmitter();\n this.oldDisplayDensityOptions = { displayDensity: DisplayDensity.comfortable };\n Object.assign(this.oldDisplayDensityOptions, displayDensityOptions);\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.initialDensity = this._displayDensity;\n }\n ngDoCheck() {\n if (!this._displayDensity && this.displayDensityOptions &&\n this.oldDisplayDensityOptions.displayDensity !== this.displayDensityOptions.displayDensity) {\n const densityChangedArgs = {\n oldDensity: this.oldDisplayDensityOptions.displayDensity,\n newDensity: this.displayDensityOptions.displayDensity\n };\n this.densityChanged.emit(densityChangedArgs);\n this.oldDisplayDensityOptions = Object.assign(this.oldDisplayDensityOptions, this.displayDensityOptions);\n }\n }\n /**\n * Given a style class of a component/element returns the modified version of it based\n * on the current display density.\n */\n getComponentDensityClass(baseStyleClass) {\n switch (this.displayDensity) {\n case DisplayDensity.cosy:\n return `${baseStyleClass}--${DisplayDensity.cosy}`;\n case DisplayDensity.compact:\n return `${baseStyleClass}--${DisplayDensity.compact}`;\n default:\n return baseStyleClass;\n }\n }\n}\nDisplayDensityBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: DisplayDensityBase, deps: [{ token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nDisplayDensityBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: DisplayDensityBase, selector: \"[igxDisplayDensityBase]\", inputs: { displayDensity: \"displayDensity\" }, outputs: { densityChanged: \"densityChanged\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: DisplayDensityBase, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxDisplayDensityBase]'\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }];\n }, propDecorators: { densityChanged: [{\n type: Output\n }], displayDensity: [{\n type: Input\n }] } });\nclass IgxDisplayDensityModule {\n}\nIgxDisplayDensityModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDisplayDensityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxDisplayDensityModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDisplayDensityModule, declarations: [DisplayDensityBase], exports: [DisplayDensityBase] });\nIgxDisplayDensityModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDisplayDensityModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDisplayDensityModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n DisplayDensityBase\n ],\n exports: [\n DisplayDensityBase\n ]\n }]\n }] });\n\nlet NEXT_ID$t = 0;\n/**\n * An abstract class, defining a drop-down component, with:\n * Properties for display styles and classes\n * A collection items of type `IgxDropDownItemBaseDirective`\n * Properties and methods for navigating (highlighting/focusing) items from the collection\n * Properties and methods for selecting items from the collection\n */\nclass IgxDropDownBaseDirective extends DisplayDensityBase {\n /**\n * Gets/Sets the drop down's id\n *\n * ```typescript\n * // get\n * let myDropDownCurrentId = this.dropdown.id;\n * ```\n * ```html\n * \n * \n * ```\n */\n get id() {\n return this._id;\n }\n set id(value) {\n this._id = value;\n }\n /**\n * Get all non-header items\n *\n * ```typescript\n * let myDropDownItems = this.dropdown.items;\n * ```\n */\n get items() {\n const items = [];\n if (this.children !== undefined) {\n for (const child of this.children.toArray()) {\n if (!child.isHeader) {\n items.push(child);\n }\n }\n }\n return items;\n }\n /**\n * Get all header items\n *\n * ```typescript\n * let myDropDownHeaderItems = this.dropdown.headers;\n * ```\n */\n get headers() {\n const headers = [];\n if (this.children !== undefined) {\n for (const child of this.children.toArray()) {\n if (child.isHeader) {\n headers.push(child);\n }\n }\n }\n return headers;\n }\n /**\n * Get dropdown html element\n *\n * ```typescript\n * let myDropDownElement = this.dropdown.element;\n * ```\n */\n get element() {\n return this.elementRef.nativeElement;\n }\n /**\n * @hidden @internal\n * Get dropdown's html element of its scroll container\n */\n get scrollContainer() {\n return this.element;\n }\n constructor(elementRef, cdr, _displayDensityOptions) {\n super(_displayDensityOptions);\n this.elementRef = elementRef;\n this.cdr = cdr;\n this._displayDensityOptions = _displayDensityOptions;\n /**\n * Emitted when item selection is changing, before the selection completes\n *\n * ```html\n * \n * ```\n */\n this.selectionChanging = new EventEmitter();\n /**\n * Gets/Sets the drop down's container max height.\n *\n * ```typescript\n * // get\n * let maxHeight = this.dropdown.maxHeight;\n * ```\n * ```html\n * \n * \n * ```\n */\n this.maxHeight = null;\n /**\n * @hidden @internal\n */\n this.cssClass = true;\n this._focusedItem = null;\n this._id = `igx-drop-down-${NEXT_ID$t++}`;\n }\n /** Keydown Handler */\n onItemActionKey(key, event) {\n switch (key) {\n case DropDownActionKey.ENTER:\n case DropDownActionKey.SPACE:\n this.selectItem(this.focusedItem, event);\n break;\n case DropDownActionKey.ESCAPE:\n }\n }\n /**\n * Emits selectionChanging with the target item & event\n *\n * @hidden @internal\n * @param newSelection the item selected\n * @param event the event that triggered the call\n */\n selectItem(newSelection, event) {\n this.selectionChanging.emit({\n newSelection,\n oldSelection: null,\n cancel: false\n });\n }\n /**\n * @hidden @internal\n */\n get focusedItem() {\n return this._focusedItem;\n }\n /**\n * @hidden @internal\n */\n set focusedItem(item) {\n this._focusedItem = item;\n }\n /**\n * Navigates to the item on the specified index\n *\n * @param newIndex number - the index of the item in the `items` collection\n */\n navigateItem(newIndex) {\n if (newIndex !== -1) {\n const oldItem = this._focusedItem;\n const newItem = this.items[newIndex];\n if (oldItem) {\n oldItem.focused = false;\n }\n this.focusedItem = newItem;\n this.scrollToHiddenItem(newItem);\n this.focusedItem.focused = true;\n }\n }\n /**\n * @hidden @internal\n */\n navigateFirst() {\n this.navigate(Navigate.Down, -1);\n }\n /**\n * @hidden @internal\n */\n navigateLast() {\n this.navigate(Navigate.Up, this.items.length);\n }\n /**\n * @hidden @internal\n */\n navigateNext() {\n this.navigate(Navigate.Down);\n }\n /**\n * @hidden @internal\n */\n navigatePrev() {\n this.navigate(Navigate.Up);\n }\n scrollToHiddenItem(newItem) {\n const elementRect = newItem.element.nativeElement.getBoundingClientRect();\n const parentRect = this.scrollContainer.getBoundingClientRect();\n if (parentRect.top > elementRect.top) {\n this.scrollContainer.scrollTop -= (parentRect.top - elementRect.top);\n }\n if (parentRect.bottom < elementRect.bottom) {\n this.scrollContainer.scrollTop += (elementRect.bottom - parentRect.bottom);\n }\n }\n navigate(direction, currentIndex) {\n let index = -1;\n if (this._focusedItem) {\n index = currentIndex ? currentIndex : this.focusedItem.itemIndex;\n }\n const newIndex = this.getNearestSiblingFocusableItemIndex(index, direction);\n this.navigateItem(newIndex);\n }\n getNearestSiblingFocusableItemIndex(startIndex, direction) {\n let index = startIndex;\n const items = this.items;\n while (items[index + direction] && items[index + direction].disabled) {\n index += direction;\n }\n index += direction;\n if (index >= 0 && index < items.length) {\n return index;\n }\n else {\n return -1;\n }\n }\n}\nIgxDropDownBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownBaseDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nIgxDropDownBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDropDownBaseDirective, inputs: { width: \"width\", height: \"height\", id: \"id\", maxHeight: \"maxHeight\" }, outputs: { selectionChanging: \"selectionChanging\" }, host: { properties: { \"style.maxHeight\": \"this.maxHeight\", \"class.igx-drop-down\": \"this.cssClass\" } }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownBaseDirective, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }];\n }, propDecorators: { selectionChanging: [{\n type: Output\n }], width: [{\n type: Input\n }], height: [{\n type: Input\n }], id: [{\n type: Input\n }], maxHeight: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['style.maxHeight']\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-drop-down']\n }] } });\n\n/**\n * @hidden\n */\nclass IgxScrollInertiaDirective {\n constructor(element, _zone) {\n this.element = element;\n this._zone = _zone;\n this.wheelStep = 50;\n this.inertiaStep = 1.5;\n this.smoothingStep = 1.5;\n this.smoothingDuration = 0.5;\n this.swipeToleranceX = 20;\n this.inertiaDeltaY = 3;\n this.inertiaDeltaX = 2;\n this.inertiaDuration = 0.5;\n this._savedSpeedsX = [];\n this.baseDeltaMultiplier = 1 / 120;\n this.firefoxDeltaMultiplier = 1 / 30;\n }\n ngOnInit() {\n this._zone.runOutsideAngular(() => {\n this.parentElement = this.element.nativeElement.parentElement || this.element.nativeElement.parentNode;\n if (!this.parentElement) {\n return;\n }\n const targetElem = this.parentElement;\n targetElem.addEventListener('wheel', this.onWheel.bind(this));\n targetElem.addEventListener('touchstart', this.onTouchStart.bind(this));\n targetElem.addEventListener('touchmove', this.onTouchMove.bind(this));\n targetElem.addEventListener('touchend', this.onTouchEnd.bind(this));\n });\n }\n ngOnDestroy() {\n this._zone.runOutsideAngular(() => {\n const targetElem = this.parentElement;\n if (!targetElem) {\n return;\n }\n targetElem.removeEventListener('wheel', this.onWheel);\n targetElem.removeEventListener('touchstart', this.onTouchStart);\n targetElem.removeEventListener('touchmove', this.onTouchMove);\n targetElem.removeEventListener('touchend', this.onTouchEnd);\n });\n }\n /**\n * @hidden\n * Function that is called when scrolling with the mouse wheel or using touchpad\n */\n onWheel(evt) {\n // if no scrollbar return\n if (!this.IgxScrollInertiaScrollContainer) {\n return;\n }\n // if ctrl key is pressed and the user want to zoom in/out the page\n if (evt.ctrlKey) {\n return;\n }\n let scrollDeltaX;\n let scrollDeltaY;\n const scrollStep = this.wheelStep;\n const minWheelStep = 1 / this.wheelStep;\n const smoothing = this.smoothingDuration !== 0;\n this._startX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n this._startY = this.IgxScrollInertiaScrollContainer.scrollTop;\n if (evt.wheelDeltaX) {\n /* Option supported on Chrome, Safari, Opera.\n /* 120 is default for mousewheel on these browsers. Other values are for trackpads */\n scrollDeltaX = -evt.wheelDeltaX * this.baseDeltaMultiplier;\n if (-minWheelStep < scrollDeltaX && scrollDeltaX < minWheelStep) {\n scrollDeltaX = Math.sign(scrollDeltaX) * minWheelStep;\n }\n }\n else if (evt.deltaX) {\n /* For other browsers that don't provide wheelDelta, use the deltaY to determine direction and pass default values. */\n const deltaScaledX = evt.deltaX * (evt.deltaMode === 0 ? this.firefoxDeltaMultiplier : 1);\n scrollDeltaX = this.calcAxisCoords(deltaScaledX, -1, 1);\n }\n /** Get delta for the Y axis */\n if (evt.wheelDeltaY) {\n /* Option supported on Chrome, Safari, Opera.\n /* 120 is default for mousewheel on these browsers. Other values are for trackpads */\n scrollDeltaY = -evt.wheelDeltaY * this.baseDeltaMultiplier;\n if (-minWheelStep < scrollDeltaY && scrollDeltaY < minWheelStep) {\n scrollDeltaY = Math.sign(scrollDeltaY) * minWheelStep;\n }\n }\n else if (evt.deltaY) {\n /* For other browsers that don't provide wheelDelta, use the deltaY to determine direction and pass default values. */\n const deltaScaledY = evt.deltaY * (evt.deltaMode === 0 ? this.firefoxDeltaMultiplier : 1);\n scrollDeltaY = this.calcAxisCoords(deltaScaledY, -1, 1);\n }\n if (evt.composedPath && this.didChildScroll(evt, scrollDeltaX, scrollDeltaY)) {\n return;\n }\n if (scrollDeltaX && this.IgxScrollInertiaDirection === 'horizontal') {\n const nextLeft = this._startX + scrollDeltaX * scrollStep;\n if (!smoothing) {\n this._scrollToX(nextLeft);\n }\n else {\n this._smoothWheelScroll(scrollDeltaX);\n }\n const maxScrollLeft = parseInt(this.IgxScrollInertiaScrollContainer.children[0].style.width, 10);\n if (0 < nextLeft && nextLeft < maxScrollLeft) {\n // Prevent navigating through pages when scrolling on Mac\n evt.preventDefault();\n }\n }\n else if (evt.shiftKey && scrollDeltaY && this.IgxScrollInertiaDirection === 'horizontal') {\n if (!smoothing) {\n const step = this._startX + scrollDeltaY * scrollStep;\n this._scrollToX(step);\n }\n else {\n this._smoothWheelScroll(scrollDeltaY);\n }\n }\n else if (!evt.shiftKey && scrollDeltaY && this.IgxScrollInertiaDirection === 'vertical') {\n const nextTop = this._startY + scrollDeltaY * scrollStep;\n if (!smoothing) {\n this._scrollToY(nextTop);\n }\n else {\n this._smoothWheelScroll(scrollDeltaY);\n }\n this.preventParentScroll(evt, true, nextTop);\n }\n }\n /**\n * @hidden\n * When there is still room to scroll up/down prevent the parent elements from scrolling too.\n */\n preventParentScroll(evt, preventDefault, nextTop = 0) {\n const curScrollTop = nextTop === 0 ? this.IgxScrollInertiaScrollContainer.scrollTop : nextTop;\n const maxScrollTop = this.IgxScrollInertiaScrollContainer.children[0].scrollHeight -\n this.IgxScrollInertiaScrollContainer.offsetHeight;\n if (0 < curScrollTop && curScrollTop < maxScrollTop) {\n if (preventDefault) {\n evt.preventDefault();\n }\n if (evt.stopPropagation) {\n evt.stopPropagation();\n }\n }\n }\n /**\n * @hidden\n * Checks if the wheel event would have scrolled an element under the display container\n * in DOM tree so that it can correctly be ignored until that element can no longer be scrolled.\n */\n didChildScroll(evt, scrollDeltaX, scrollDeltaY) {\n const path = evt.composedPath();\n let i = 0;\n while (i < path.length && path[i].localName !== 'igx-display-container') {\n const e = path[i++];\n if (e.scrollHeight > e.clientHeight) {\n const overflowY = window.getComputedStyle(e)['overflow-y'];\n if (overflowY === 'auto' || overflowY === 'scroll') {\n if (scrollDeltaY > 0 && e.scrollHeight - Math.abs(Math.round(e.scrollTop)) !== e.clientHeight) {\n return true;\n }\n if (scrollDeltaY < 0 && e.scrollTop !== 0) {\n return true;\n }\n }\n }\n if (e.scrollWidth > e.clientWidth) {\n const overflowX = window.getComputedStyle(e)['overflow-x'];\n if (overflowX === 'auto' || overflowX === 'scroll') {\n if (scrollDeltaX > 0 && e.scrollWidth - Math.abs(Math.round(e.scrollLeft)) !== e.clientWidth) {\n return true;\n }\n if (scrollDeltaX < 0 && e.scrollLeft !== 0) {\n return true;\n }\n }\n }\n }\n return false;\n }\n /**\n * @hidden\n * Function that is called the first moment we start interacting with the content on a touch device\n */\n onTouchStart(event) {\n if (!this.IgxScrollInertiaScrollContainer) {\n return false;\n }\n // stops any current ongoing inertia\n cancelAnimationFrame(this._touchInertiaAnimID);\n const touch = event.touches[0];\n this._startX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n this._startY = this.IgxScrollInertiaScrollContainer.scrollTop;\n this._touchStartX = touch.pageX;\n this._touchStartY = touch.pageY;\n this._lastTouchEnd = new Date().getTime();\n this._lastTouchX = touch.pageX;\n this._lastTouchY = touch.pageY;\n this._savedSpeedsX = [];\n this._savedSpeedsY = [];\n // Vars regarding swipe offset\n this._totalMovedX = 0;\n this._offsetRecorded = false;\n this._offsetDirection = 0;\n if (this.IgxScrollInertiaDirection === 'vertical') {\n this.preventParentScroll(event, false);\n }\n }\n /**\n * @hidden\n * Function that is called when we need to scroll the content based on touch interactions\n */\n onTouchMove(event) {\n if (!this.IgxScrollInertiaScrollContainer) {\n return;\n }\n const touch = event.touches[0];\n const destX = this._startX + (this._touchStartX - touch.pageX) * Math.sign(this.inertiaStep);\n const destY = this._startY + (this._touchStartY - touch.pageY) * Math.sign(this.inertiaStep);\n /* Handle complex touchmoves when swipe stops but the toch doesn't end and then a swipe is initiated again */\n /* **********************************************************/\n const timeFromLastTouch = (new Date().getTime()) - this._lastTouchEnd;\n if (timeFromLastTouch !== 0 && timeFromLastTouch < 100) {\n const speedX = (this._lastTouchX - touch.pageX) / timeFromLastTouch;\n const speedY = (this._lastTouchY - touch.pageY) / timeFromLastTouch;\n // Save the last 5 speeds between two touchmoves on X axis\n if (this._savedSpeedsX.length < 5) {\n this._savedSpeedsX.push(speedX);\n }\n else {\n this._savedSpeedsX.shift();\n this._savedSpeedsX.push(speedX);\n }\n // Save the last 5 speeds between two touchmoves on Y axis\n if (this._savedSpeedsY.length < 5) {\n this._savedSpeedsY.push(speedY);\n }\n else {\n this._savedSpeedsY.shift();\n this._savedSpeedsY.push(speedY);\n }\n }\n this._lastTouchEnd = new Date().getTime();\n this._lastMovedX = this._lastTouchX - touch.pageX;\n this._lastMovedY = this._lastTouchY - touch.pageY;\n this._lastTouchX = touch.pageX;\n this._lastTouchY = touch.pageY;\n this._totalMovedX += this._lastMovedX;\n /*\tDo not scroll using touch untill out of the swipeToleranceX bounds */\n if (Math.abs(this._totalMovedX) < this.swipeToleranceX && !this._offsetRecorded) {\n this._scrollTo(this._startX, destY);\n }\n else {\n /*\tRecord the direction the first time we are out of the swipeToleranceX bounds.\n *\tThat way we know which direction we apply the offset so it doesn't hickup when moving out of the swipeToleranceX bounds */\n if (!this._offsetRecorded) {\n this._offsetDirection = Math.sign(destX - this._startX);\n this._offsetRecorded = true;\n }\n /*\tScroll with offset ammout of swipeToleranceX in the direction we have exited the bounds and\n don't change it after that ever until touchend and again touchstart */\n this._scrollTo(destX - this._offsetDirection * this.swipeToleranceX, destY);\n }\n // On Safari preventing the touchmove would prevent default page scroll behaviour even if there is the element doesn't have overflow\n if (this.IgxScrollInertiaDirection === 'vertical') {\n this.preventParentScroll(event, true);\n }\n }\n onTouchEnd(event) {\n let speedX = 0;\n let speedY = 0;\n // savedSpeedsX and savedSpeedsY have same length\n for (let i = 0; i < this._savedSpeedsX.length; i++) {\n speedX += this._savedSpeedsX[i];\n speedY += this._savedSpeedsY[i];\n }\n speedX = this._savedSpeedsX.length ? speedX / this._savedSpeedsX.length : 0;\n speedY = this._savedSpeedsX.length ? speedY / this._savedSpeedsY.length : 0;\n // Use the lastMovedX and lastMovedY to determine if the swipe stops without lifting the finger so we don't start inertia\n if ((Math.abs(speedX) > 0.1 || Math.abs(speedY) > 0.1) &&\n (Math.abs(this._lastMovedX) > 2 || Math.abs(this._lastMovedY) > 2)) {\n this._inertiaInit(speedX, speedY);\n }\n if (this.IgxScrollInertiaDirection === 'vertical') {\n this.preventParentScroll(event, false);\n }\n }\n _smoothWheelScroll(delta) {\n this._nextY = this.IgxScrollInertiaScrollContainer.scrollTop;\n this._nextX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n let x = -1;\n let wheelInertialAnimation = null;\n const inertiaWheelStep = () => {\n if (x > 1) {\n cancelAnimationFrame(wheelInertialAnimation);\n return;\n }\n const nextScroll = ((-3 * x * x + 3) * delta * 2) * this.smoothingStep;\n if (this.IgxScrollInertiaDirection === 'vertical') {\n this._nextY += nextScroll;\n this._scrollToY(this._nextY);\n }\n else {\n this._nextX += nextScroll;\n this._scrollToX(this._nextX);\n }\n //continue the inertia\n x += 0.08 * (1 / this.smoothingDuration);\n wheelInertialAnimation = requestAnimationFrame(inertiaWheelStep);\n };\n wheelInertialAnimation = requestAnimationFrame(inertiaWheelStep);\n }\n _inertiaInit(speedX, speedY) {\n const stepModifer = this.inertiaStep;\n const inertiaDuration = this.inertiaDuration;\n let x = 0;\n this._nextX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n this._nextY = this.IgxScrollInertiaScrollContainer.scrollTop;\n // Sets timeout until executing next movement iteration of the inertia\n const inertiaStep = () => {\n if (x > 6) {\n cancelAnimationFrame(this._touchInertiaAnimID);\n return;\n }\n if (Math.abs(speedX) > Math.abs(speedY)) {\n x += 0.05 / (1 * inertiaDuration);\n }\n else {\n x += 0.05 / (1 * inertiaDuration);\n }\n if (x <= 1) {\n // We use constant quation to determine the offset without speed falloff befor x reaches 1\n if (Math.abs(speedY) <= Math.abs(speedX) * this.inertiaDeltaY) {\n this._nextX += 1 * speedX * 15 * stepModifer;\n }\n if (Math.abs(speedY) >= Math.abs(speedX) * this.inertiaDeltaX) {\n this._nextY += 1 * speedY * 15 * stepModifer;\n }\n }\n else {\n // We use the quation \"y = 2 / (x + 0.55) - 0.3\" to determine the offset\n if (Math.abs(speedY) <= Math.abs(speedX) * this.inertiaDeltaY) {\n this._nextX += Math.abs(2 / (x + 0.55) - 0.3) * speedX * 15 * stepModifer;\n }\n if (Math.abs(speedY) >= Math.abs(speedX) * this.inertiaDeltaX) {\n this._nextY += Math.abs(2 / (x + 0.55) - 0.3) * speedY * 15 * stepModifer;\n }\n }\n // If we have mixed environment we use the default behaviour. i.e. touchscreen + mouse\n this._scrollTo(this._nextX, this._nextY);\n this._touchInertiaAnimID = requestAnimationFrame(inertiaStep);\n };\n // Start inertia and continue it recursively\n this._touchInertiaAnimID = requestAnimationFrame(inertiaStep);\n }\n calcAxisCoords(target, min, max) {\n if (target === undefined || target < min) {\n target = min;\n }\n else if (target > max) {\n target = max;\n }\n return target;\n }\n _scrollTo(destX, destY) {\n // TODO Trigger scrolling event?\n const scrolledX = this._scrollToX(destX);\n const scrolledY = this._scrollToY(destY);\n return { x: scrolledX, y: scrolledY };\n }\n _scrollToX(dest) {\n this.IgxScrollInertiaScrollContainer.scrollLeft = dest;\n }\n _scrollToY(dest) {\n this.IgxScrollInertiaScrollContainer.scrollTop = dest;\n }\n}\nIgxScrollInertiaDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxScrollInertiaDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nIgxScrollInertiaDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxScrollInertiaDirective, selector: \"[igxScrollInertia]\", inputs: { IgxScrollInertiaDirection: \"IgxScrollInertiaDirection\", IgxScrollInertiaScrollContainer: \"IgxScrollInertiaScrollContainer\", wheelStep: \"wheelStep\", inertiaStep: \"inertiaStep\", smoothingStep: \"smoothingStep\", smoothingDuration: \"smoothingDuration\", swipeToleranceX: \"swipeToleranceX\", inertiaDeltaY: \"inertiaDeltaY\", inertiaDeltaX: \"inertiaDeltaX\", inertiaDuration: \"inertiaDuration\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxScrollInertiaDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxScrollInertia]' }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { IgxScrollInertiaDirection: [{\n type: Input\n }], IgxScrollInertiaScrollContainer: [{\n type: Input\n }], wheelStep: [{\n type: Input\n }], inertiaStep: [{\n type: Input\n }], smoothingStep: [{\n type: Input\n }], smoothingDuration: [{\n type: Input\n }], swipeToleranceX: [{\n type: Input\n }], inertiaDeltaY: [{\n type: Input\n }], inertiaDeltaX: [{\n type: Input\n }], inertiaDuration: [{\n type: Input\n }] } });\n/**\n * @hidden\n */\nclass IgxScrollInertiaModule {\n}\nIgxScrollInertiaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxScrollInertiaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxScrollInertiaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxScrollInertiaModule, declarations: [IgxScrollInertiaDirective], imports: [CommonModule], exports: [IgxScrollInertiaDirective] });\nIgxScrollInertiaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxScrollInertiaModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxScrollInertiaModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxScrollInertiaDirective],\n exports: [IgxScrollInertiaDirective],\n imports: [CommonModule]\n }]\n }] });\n\nclass DisplayContainerComponent {\n constructor(cdr, _viewContainer) {\n this.cdr = cdr;\n this._viewContainer = _viewContainer;\n this.cssClass = 'igx-display-container';\n this.notVirtual = true;\n }\n}\nDisplayContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: DisplayContainerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });\nDisplayContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: DisplayContainerComponent, selector: \"igx-display-container\", host: { properties: { \"class\": \"this.cssClass\", \"class.igx-display-container--inactive\": \"this.notVirtual\" } }, viewQueries: [{ propertyName: \"_vcr\", first: true, predicate: [\"display_container\"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: \"_scrollInertia\", first: true, predicate: [\"display_container\"], descendants: true, read: IgxScrollInertiaDirective, static: true }], ngImport: i0, template: `\n \n \n `, isInline: true, dependencies: [{ kind: \"directive\", type: IgxScrollInertiaDirective, selector: \"[igxScrollInertia]\", inputs: [\"IgxScrollInertiaDirection\", \"IgxScrollInertiaScrollContainer\", \"wheelStep\", \"inertiaStep\", \"smoothingStep\", \"smoothingDuration\", \"swipeToleranceX\", \"inertiaDeltaY\", \"inertiaDeltaX\", \"inertiaDuration\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: DisplayContainerComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'igx-display-container',\n template: `\n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { _vcr: [{\n type: ViewChild,\n args: ['display_container', { read: ViewContainerRef, static: true }]\n }], _scrollInertia: [{\n type: ViewChild,\n args: ['display_container', { read: IgxScrollInertiaDirective, static: true }]\n }], cssClass: [{\n type: HostBinding,\n args: ['class']\n }], notVirtual: [{\n type: HostBinding,\n args: ['class.igx-display-container--inactive']\n }] } });\n\nclass VirtualHelperBaseDirective {\n constructor(elementRef, cdr, _zone, document, platformUtil) {\n this.elementRef = elementRef;\n this.cdr = cdr;\n this._zone = _zone;\n this.document = document;\n this.platformUtil = platformUtil;\n this.scrollAmount = 0;\n this._size = 0;\n this.destroy$ = new Subject();\n this._afterViewInit = false;\n this._detached = false;\n this._scrollNativeSize = this.calculateScrollNativeSize();\n }\n onScroll(event) {\n this.scrollAmount = event.target.scrollTop || event.target.scrollLeft;\n }\n ngAfterViewInit() {\n this._afterViewInit = true;\n if (!this.platformUtil.isBrowser) {\n return;\n }\n const delayTime = 0;\n this._zone.runOutsideAngular(() => {\n resizeObservable(this.nativeElement).pipe(throttleTime(delayTime), takeUntil(this.destroy$)).subscribe((event) => this.handleMutations(event));\n });\n }\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n ngOnDestroy() {\n this.destroyed = true;\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n calculateScrollNativeSize() {\n const div = this.document.createElement('div');\n const style = div.style;\n style.width = '100px';\n style.height = '100px';\n style.position = 'absolute';\n style.top = '-10000px';\n style.top = '-10000px';\n style.overflow = 'scroll';\n this.document.body.appendChild(div);\n const scrollWidth = div.offsetWidth - div.clientWidth;\n this.document.body.removeChild(div);\n return scrollWidth ? scrollWidth + 1 : 1;\n }\n set size(value) {\n if (this.destroyed) {\n return;\n }\n this._size = value;\n if (this._afterViewInit) {\n this.cdr.detectChanges();\n }\n }\n get size() {\n return this._size;\n }\n get scrollNativeSize() {\n return this._scrollNativeSize;\n }\n get isAttachedToDom() {\n return this.document.body.contains(this.nativeElement);\n }\n handleMutations(event) {\n const hasSize = !(event[0].contentRect.height === 0 && event[0].contentRect.width === 0);\n if (!hasSize && !this.isAttachedToDom) {\n // scroll bar detached from DOM\n this._detached = true;\n }\n else if (this._detached && hasSize && this.isAttachedToDom) {\n // attached back now.\n this.restoreScroll();\n }\n }\n restoreScroll() { }\n}\nVirtualHelperBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: VirtualHelperBaseDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: DOCUMENT }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive });\nVirtualHelperBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: VirtualHelperBaseDirective, selector: \"[igxVirtualHelperBase]\", host: { listeners: { \"scroll\": \"onScroll($event)\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: VirtualHelperBaseDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxVirtualHelperBase]'\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: PlatformUtil }];\n }, propDecorators: { onScroll: [{\n type: HostListener,\n args: ['scroll', ['$event']]\n }] } });\n\n/**\n * @hidden\n */\nclass HVirtualHelperComponent extends VirtualHelperBaseDirective {\n constructor(elementRef, cdr, zone, document, platformUtil) {\n super(elementRef, cdr, zone, document, platformUtil);\n this.cssClasses = 'igx-vhelper--horizontal';\n }\n restoreScroll() {\n this.nativeElement.scrollLeft = this.scrollAmount;\n }\n}\nHVirtualHelperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: HVirtualHelperComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: DOCUMENT }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nHVirtualHelperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: HVirtualHelperComponent, selector: \"igx-horizontal-virtual-helper\", inputs: { width: \"width\" }, host: { properties: { \"class\": \"this.cssClasses\" } }, viewQueries: [{ propertyName: \"_vcr\", first: true, predicate: [\"horizontal_container\"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: '
    ', isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: HVirtualHelperComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'igx-horizontal-virtual-helper',\n template: '
    '\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: PlatformUtil }];\n }, propDecorators: { _vcr: [{\n type: ViewChild,\n args: ['horizontal_container', { read: ViewContainerRef, static: true }]\n }], width: [{\n type: Input\n }], cssClasses: [{\n type: HostBinding,\n args: ['class']\n }] } });\n\nclass VirtualHelperComponent extends VirtualHelperBaseDirective {\n constructor(elementRef, cdr, zone, document, platformUtil) {\n super(elementRef, cdr, zone, document, platformUtil);\n this.cssClasses = 'igx-vhelper--vertical';\n }\n ngOnInit() {\n this.scrollWidth = this.scrollNativeSize;\n }\n restoreScroll() {\n this.nativeElement.scrollTop = this.scrollAmount;\n }\n}\nVirtualHelperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: VirtualHelperComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: DOCUMENT }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nVirtualHelperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: VirtualHelperComponent, selector: \"igx-virtual-helper\", inputs: { itemsLength: \"itemsLength\" }, host: { properties: { \"scrollTop\": \"this.scrollTop\", \"style.width.px\": \"this.scrollWidth\", \"class\": \"this.cssClasses\" } }, viewQueries: [{ propertyName: \"_vcr\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: '
    ', isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: VirtualHelperComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'igx-virtual-helper',\n template: '
    '\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: PlatformUtil }];\n }, propDecorators: { scrollTop: [{\n type: HostBinding,\n args: ['scrollTop']\n }], scrollWidth: [{\n type: HostBinding,\n args: ['style.width.px']\n }], _vcr: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], itemsLength: [{\n type: Input\n }], cssClasses: [{\n type: HostBinding,\n args: ['class']\n }] } });\n\nclass IgxForOfSyncService {\n constructor() {\n this._master = new Map();\n }\n /**\n * @hidden\n */\n isMaster(directive) {\n return this._master.get(directive.igxForScrollOrientation) === directive;\n }\n /**\n * @hidden\n */\n setMaster(directive, forced = false) {\n const orientation = directive.igxForScrollOrientation;\n if (orientation && (forced || !this._master.has(orientation))) {\n this._master.set(orientation, directive);\n }\n }\n /**\n * @hidden\n */\n resetMaster() {\n this._master.clear();\n }\n /**\n * @hidden\n */\n sizesCache(dir) {\n return this._master.get(dir).sizesCache;\n }\n /**\n * @hidden\n */\n chunkSize(dir) {\n return this._master.get(dir).state.chunkSize;\n }\n}\nIgxForOfSyncService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxForOfSyncService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIgxForOfSyncService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxForOfSyncService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxForOfSyncService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\nclass IgxForOfScrollSyncService {\n constructor() {\n this._masterScroll = new Map();\n }\n setScrollMaster(dir, scroll) {\n this._masterScroll.set(dir, scroll);\n }\n getScrollMaster(dir) {\n return this._masterScroll.get(dir);\n }\n}\nIgxForOfScrollSyncService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxForOfScrollSyncService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIgxForOfScrollSyncService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxForOfScrollSyncService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxForOfScrollSyncService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n\n/* eslint-disable @angular-eslint/no-conflicting-lifecycle */\nconst MAX_PERF_SCROLL_DIFF = 4;\n/**\n * @publicApi\n */\nclass IgxForOfContext {\n constructor($implicit, index, count) {\n this.$implicit = $implicit;\n this.index = index;\n this.count = count;\n }\n /**\n * A function that returns whether the element is the first or not\n */\n get first() {\n return this.index === 0;\n }\n /**\n * A function that returns whether the element is the last or not\n */\n get last() {\n return this.index === this.count - 1;\n }\n /**\n * A function that returns whether the element is even or not\n */\n get even() {\n return this.index % 2 === 0;\n }\n /**\n * A function that returns whether the element is odd or not\n */\n get odd() {\n return !this.even;\n }\n}\n// eslint-disable @angular-eslint/no-conflicting-lifecycle\nclass IgxForOfDirective {\n /**\n * The total count of the virtual data items, when using remote service.\n * Similar to the property totalItemCount, but this will allow setting the data count into the template.\n * ```html\n * \n * ```\n */\n get igxForTotalItemCount() {\n return this.totalItemCount;\n }\n set igxForTotalItemCount(value) {\n this.totalItemCount = value;\n }\n /**\n * The total count of the virtual data items, when using remote service.\n * ```typescript\n * this.parentVirtDir.totalItemCount = data.Count;\n * ```\n */\n get totalItemCount() {\n return this._totalItemCount;\n }\n set totalItemCount(val) {\n if (this._totalItemCount !== val) {\n this._totalItemCount = val;\n // update sizes in case total count changes.\n const newSize = this.initSizesCache(this.igxForOf);\n const sizeDiff = this.scrollComponent.size - newSize;\n this.scrollComponent.size = newSize;\n const lastChunkExceeded = this.state.startIndex + this.state.chunkSize > val;\n if (lastChunkExceeded) {\n this.state.startIndex = val - this.state.chunkSize;\n }\n this._adjustScrollPositionAfterSizeChange(sizeDiff);\n }\n }\n get displayContainer() {\n var _a, _b, _c, _d;\n return (_d = (_c = (_b = (_a = this.dc) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b._viewContainer) === null || _c === void 0 ? void 0 : _c.element) === null || _d === void 0 ? void 0 : _d.nativeElement;\n }\n get virtualHelper() {\n return this.scrollComponent.nativeElement;\n }\n /**\n * @hidden\n */\n get isRemote() {\n return this.totalItemCount !== null;\n }\n /**\n *\n * Gets/Sets the scroll position.\n * ```typescript\n * const position = directive.scrollPosition;\n * directive.scrollPosition = value;\n * ```\n */\n get scrollPosition() {\n return this.scrollComponent.scrollAmount;\n }\n set scrollPosition(val) {\n if (val === this.scrollComponent.scrollAmount) {\n return;\n }\n if (this.igxForScrollOrientation === 'horizontal' && this.scrollComponent) {\n this.scrollComponent.nativeElement.scrollLeft = val;\n }\n else if (this.scrollComponent) {\n this.scrollComponent.nativeElement.scrollTop = val;\n }\n }\n /**\n * @hidden\n */\n get isRTL() {\n const dir = window.getComputedStyle(this.dc.instance._viewContainer.element.nativeElement).getPropertyValue('direction');\n return dir === 'rtl';\n }\n get sizesCache() {\n return this._sizesCache;\n }\n set sizesCache(value) {\n this._sizesCache = value;\n }\n get _isScrolledToBottom() {\n if (!this.getScroll()) {\n return true;\n }\n const scrollHeight = this.getScroll().scrollHeight;\n // Use === and not >= because `scrollTop + container size` can't be bigger than `scrollHeight`, unless something isn't updated.\n // Also use Math.round because Chrome has some inconsistencies and `scrollTop + container` can be float when zooming the page.\n return Math.round(this.getScroll().scrollTop + this.igxForContainerSize) === scrollHeight;\n }\n get _isAtBottomIndex() {\n return this.igxForOf && this.state.startIndex + this.state.chunkSize > this.igxForOf.length;\n }\n constructor(_viewContainer, _template, _differs, cdr, _zone, syncScrollService, platformUtil, document) {\n this._viewContainer = _viewContainer;\n this._template = _template;\n this._differs = _differs;\n this.cdr = cdr;\n this._zone = _zone;\n this.syncScrollService = syncScrollService;\n this.platformUtil = platformUtil;\n this.document = document;\n /**\n * An @Input property that specifies the scroll orientation.\n * Scroll orientation can be \"vertical\" or \"horizontal\".\n * ```html\n * \n * ```\n */\n this.igxForScrollOrientation = 'vertical';\n /**\n * An event that is emitted after a new chunk has been loaded.\n * ```html\n * \n * ```\n * ```typescript\n * loadChunk(e){\n * alert(\"chunk loaded!\");\n * }\n * ```\n */\n this.chunkLoad = new EventEmitter();\n /**\n * @hidden @internal\n * An event that is emitted when scrollbar visibility has changed.\n */\n this.scrollbarVisibilityChanged = new EventEmitter();\n /**\n * An event that is emitted after the rendered content size of the igxForOf has been changed.\n */\n this.contentSizeChange = new EventEmitter();\n /**\n * An event that is emitted after data has been changed.\n * ```html\n * \n * ```\n * ```typescript\n * dataChanged(e){\n * alert(\"data changed!\");\n * }\n * ```\n */\n this.dataChanged = new EventEmitter();\n this.beforeViewDestroyed = new EventEmitter();\n /**\n * An event that is emitted on chunk loading to emit the current state information - startIndex, endIndex, totalCount.\n * Can be used for implementing remote load on demand for the igxFor data.\n * ```html\n * \n * ```\n * ```typescript\n * chunkPreload(e){\n * alert(\"chunk is loading!\");\n * }\n * ```\n */\n this.chunkPreload = new EventEmitter();\n /**\n * The current state of the directive. It contains `startIndex` and `chunkSize`.\n * state.startIndex - The index of the item at which the current visible chunk begins.\n * state.chunkSize - The number of items the current visible chunk holds.\n * These options can be used when implementing remote virtualization as they provide the necessary state information.\n * ```typescript\n * const gridState = this.parentVirtDir.state;\n * ```\n */\n this.state = {\n startIndex: 0,\n chunkSize: 0\n };\n this._sizesCache = [];\n this._differ = null;\n this.heightCache = [];\n /** Internal track for scroll top that is being virtualized */\n this._virtScrollTop = 0;\n /** If the next onScroll event is triggered due to internal setting of scrollTop */\n this._bScrollInternal = false;\n // End properties related to virtual height handling\n this._embeddedViews = [];\n this.contentResizeNotify = new Subject();\n /** Height that is being virtualized. */\n this._virtHeight = 0;\n /**\n * @hidden\n */\n this.destroy$ = new Subject();\n this._totalItemCount = null;\n /**\n * Ratio for height that's being virtualizaed and the one visible\n * If _virtHeightRatio = 1, the visible height and the virtualized are the same, also _maxHeight > _virtHeight.\n */\n this._virtHeightRatio = 1;\n }\n verticalScrollHandler(event) {\n this.onScroll(event);\n }\n isScrollable() {\n return this.scrollComponent.size > parseInt(this.igxForContainerSize, 10);\n }\n /**\n * @hidden\n */\n ngOnInit() {\n let totalSize = 0;\n const vc = this.igxForScrollContainer ? this.igxForScrollContainer._viewContainer : this._viewContainer;\n this.igxForSizePropName = this.igxForSizePropName || 'width';\n this.dc = this._viewContainer.createComponent(DisplayContainerComponent, { index: 0 });\n this.dc.instance.scrollDirection = this.igxForScrollOrientation;\n if (this.igxForOf && this.igxForOf.length) {\n totalSize = this.initSizesCache(this.igxForOf);\n this.scrollComponent = this.syncScrollService.getScrollMaster(this.igxForScrollOrientation);\n this.state.chunkSize = this._calculateChunkSize();\n this.dc.instance.notVirtual = !(this.igxForContainerSize && this.state.chunkSize < this.igxForOf.length);\n if (this.scrollComponent && !this.scrollComponent.destroyed) {\n this.state.startIndex = Math.min(this.getIndexAt(this.scrollPosition, this.sizesCache), this.igxForOf.length - this.state.chunkSize);\n }\n for (let i = this.state.startIndex; i < this.state.startIndex + this.state.chunkSize &&\n this.igxForOf[i] !== undefined; i++) {\n const input = this.igxForOf[i];\n const embeddedView = this.dc.instance._vcr.createEmbeddedView(this._template, new IgxForOfContext(input, this.getContextIndex(input), this.igxForOf.length));\n this._embeddedViews.push(embeddedView);\n }\n }\n if (this.igxForScrollOrientation === 'vertical') {\n this.dc.instance._viewContainer.element.nativeElement.style.top = '0px';\n this.scrollComponent = this.syncScrollService.getScrollMaster(this.igxForScrollOrientation);\n if (!this.scrollComponent || this.scrollComponent.destroyed) {\n this.scrollComponent = vc.createComponent(VirtualHelperComponent).instance;\n }\n this._maxHeight = this._calcMaxBrowserHeight();\n this.scrollComponent.size = this.igxForOf ? this._calcHeight() : 0;\n this.syncScrollService.setScrollMaster(this.igxForScrollOrientation, this.scrollComponent);\n this._zone.runOutsideAngular(() => {\n this.verticalScrollHandler = this.verticalScrollHandler.bind(this);\n this.scrollComponent.nativeElement.addEventListener('scroll', this.verticalScrollHandler);\n this.dc.instance.scrollContainer = this.scrollComponent.nativeElement;\n });\n const destructor = takeUntil(this.destroy$);\n this.contentResizeNotify.pipe(filter(() => this.igxForContainerSize && this.igxForOf && this.igxForOf.length > 0), throttleTime(40, undefined, { leading: true, trailing: true }), destructor).subscribe(() => this._zone.runTask(() => this.updateSizes()));\n }\n if (this.igxForScrollOrientation === 'horizontal') {\n this.func = (evt) => this.onHScroll(evt);\n this.scrollComponent = this.syncScrollService.getScrollMaster(this.igxForScrollOrientation);\n if (!this.scrollComponent) {\n this.scrollComponent = vc.createComponent(HVirtualHelperComponent).instance;\n this.scrollComponent.size = totalSize;\n this.syncScrollService.setScrollMaster(this.igxForScrollOrientation, this.scrollComponent);\n this._zone.runOutsideAngular(() => {\n this.scrollComponent.nativeElement.addEventListener('scroll', this.func);\n this.dc.instance.scrollContainer = this.scrollComponent.nativeElement;\n });\n }\n else {\n this._zone.runOutsideAngular(() => {\n this.scrollComponent.nativeElement.addEventListener('scroll', this.func);\n this.dc.instance.scrollContainer = this.scrollComponent.nativeElement;\n });\n }\n this._updateHScrollOffset();\n }\n }\n ngAfterViewInit() {\n if (this.igxForScrollOrientation === 'vertical') {\n this._zone.runOutsideAngular(() => {\n this.contentObserver = new (getResizeObserver())(() => this.contentResizeNotify.next());\n this.contentObserver.observe(this.dc.instance._viewContainer.element.nativeElement);\n });\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.removeScrollEventListeners();\n this.destroy$.next(true);\n this.destroy$.complete();\n if (this.contentObserver) {\n this.contentObserver.disconnect();\n }\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n const forOf = 'igxForOf';\n if (forOf in changes) {\n const value = changes[forOf].currentValue;\n if (!this._differ && value) {\n try {\n this._differ = this._differs.find(value).create(this.igxForTrackBy);\n }\n catch (e) {\n throw new Error(`Cannot find a differ supporting object \"${value}\" of type \"${getTypeNameForDebugging(value)}\".\n NgFor only supports binding to Iterables such as Arrays.`);\n }\n }\n }\n const defaultItemSize = 'igxForItemSize';\n if (defaultItemSize in changes && !changes[defaultItemSize].firstChange &&\n this.igxForScrollOrientation === 'vertical' && this.igxForOf) {\n // handle default item size changed.\n this.initSizesCache(this.igxForOf);\n this._applyChanges();\n }\n const containerSize = 'igxForContainerSize';\n if (containerSize in changes && !changes[containerSize].firstChange && this.igxForOf) {\n this._recalcOnContainerChange();\n }\n }\n /**\n * @hidden\n */\n ngDoCheck() {\n if (this._differ) {\n const changes = this._differ.diff(this.igxForOf);\n if (changes) {\n // re-init cache.\n if (!this.igxForOf) {\n this.igxForOf = [];\n }\n this._updateSizeCache();\n this._zone.run(() => {\n this._applyChanges();\n this.cdr.markForCheck();\n this._updateScrollOffset();\n this.dataChanged.emit();\n });\n }\n }\n }\n /**\n * Shifts the scroll thumb position.\n * ```typescript\n * this.parentVirtDir.addScrollTop(5);\n * ```\n *\n * @param addTop negative value to scroll up and positive to scroll down;\n */\n addScrollTop(addTop) {\n if (addTop === 0 && this.igxForScrollOrientation === 'horizontal') {\n return false;\n }\n const originalVirtScrollTop = this._virtScrollTop;\n const containerSize = parseInt(this.igxForContainerSize, 10);\n const maxVirtScrollTop = this._virtHeight - containerSize;\n this._bScrollInternal = true;\n this._virtScrollTop += addTop;\n this._virtScrollTop = this._virtScrollTop > 0 ?\n (this._virtScrollTop < maxVirtScrollTop ? this._virtScrollTop : maxVirtScrollTop) :\n 0;\n this.scrollPosition += addTop / this._virtHeightRatio;\n if (Math.abs(addTop / this._virtHeightRatio) < 1) {\n // Actual scroll delta that was added is smaller than 1 and onScroll handler doesn't trigger when scrolling < 1px\n const scrollOffset = this.fixedUpdateAllElements(this._virtScrollTop);\n // scrollOffset = scrollOffset !== parseInt(this.igxForItemSize, 10) ? scrollOffset : 0;\n this.dc.instance._viewContainer.element.nativeElement.style.top = -(scrollOffset) + 'px';\n }\n const maxRealScrollTop = this.scrollComponent.nativeElement.scrollHeight - containerSize;\n if ((this._virtScrollTop > 0 && this.scrollPosition === 0) ||\n (this._virtScrollTop < maxVirtScrollTop && this.scrollPosition === maxRealScrollTop)) {\n // Actual scroll position is at the top or bottom, but virtual one is not at the top or bottom (there's more to scroll)\n // Recalculate actual scroll position based on the virtual scroll.\n this.scrollPosition = this._virtScrollTop / this._virtHeightRatio;\n }\n else if (this._virtScrollTop === 0 && this.scrollPosition > 0) {\n // Actual scroll position is not at the top, but virtual scroll is. Just update the actual scroll\n this.scrollPosition = 0;\n }\n else if (this._virtScrollTop === maxVirtScrollTop && this.scrollPosition < maxRealScrollTop) {\n // Actual scroll position is not at the bottom, but virtual scroll is. Just update the acual scroll\n this.scrollPosition = maxRealScrollTop;\n }\n return this._virtScrollTop !== originalVirtScrollTop;\n }\n /**\n * Scrolls to the specified index.\n * ```typescript\n * this.parentVirtDir.scrollTo(5);\n * ```\n *\n * @param index\n */\n scrollTo(index) {\n if (index < 0 || index > (this.isRemote ? this.totalItemCount : this.igxForOf.length) - 1) {\n return;\n }\n const containerSize = parseInt(this.igxForContainerSize, 10);\n const isPrevItem = index < this.state.startIndex || this.scrollPosition > this.sizesCache[index];\n let nextScroll = isPrevItem ? this.sizesCache[index] : this.sizesCache[index + 1] - containerSize;\n if (nextScroll < 0) {\n return;\n }\n if (this.igxForScrollOrientation === 'horizontal') {\n this.scrollPosition = this.isRTL ? -nextScroll : nextScroll;\n }\n else {\n const maxVirtScrollTop = this._virtHeight - containerSize;\n if (nextScroll > maxVirtScrollTop) {\n nextScroll = maxVirtScrollTop;\n }\n this._bScrollInternal = true;\n this._virtScrollTop = nextScroll;\n this.scrollPosition = this._virtScrollTop / this._virtHeightRatio;\n this._adjustToIndex = !isPrevItem ? index : null;\n }\n }\n /**\n * Scrolls by one item into the appropriate next direction.\n * For \"horizontal\" orientation that will be the right column and for \"vertical\" that is the lower row.\n * ```typescript\n * this.parentVirtDir.scrollNext();\n * ```\n */\n scrollNext() {\n const scr = Math.abs(Math.ceil(this.scrollPosition));\n const endIndex = this.getIndexAt(scr + parseInt(this.igxForContainerSize, 10), this.sizesCache);\n this.scrollTo(endIndex);\n }\n /**\n * Scrolls by one item into the appropriate previous direction.\n * For \"horizontal\" orientation that will be the left column and for \"vertical\" that is the upper row.\n * ```typescript\n * this.parentVirtDir.scrollPrev();\n * ```\n */\n scrollPrev() {\n this.scrollTo(this.state.startIndex - 1);\n }\n /**\n * Scrolls by one page into the appropriate next direction.\n * For \"horizontal\" orientation that will be one view to the right and for \"vertical\" that is one view to the bottom.\n * ```typescript\n * this.parentVirtDir.scrollNextPage();\n * ```\n */\n scrollNextPage() {\n if (this.igxForScrollOrientation === 'horizontal') {\n this.scrollPosition += this.isRTL ? -parseInt(this.igxForContainerSize, 10) : parseInt(this.igxForContainerSize, 10);\n }\n else {\n this.addScrollTop(parseInt(this.igxForContainerSize, 10));\n }\n }\n /**\n * Scrolls by one page into the appropriate previous direction.\n * For \"horizontal\" orientation that will be one view to the left and for \"vertical\" that is one view to the top.\n * ```typescript\n * this.parentVirtDir.scrollPrevPage();\n * ```\n */\n scrollPrevPage() {\n if (this.igxForScrollOrientation === 'horizontal') {\n this.scrollPosition -= this.isRTL ? -parseInt(this.igxForContainerSize, 10) : parseInt(this.igxForContainerSize, 10);\n }\n else {\n const containerSize = (parseInt(this.igxForContainerSize, 10));\n this.addScrollTop(-containerSize);\n }\n }\n /**\n * @hidden\n */\n getColumnScrollLeft(colIndex) {\n return this.sizesCache[colIndex];\n }\n /**\n * Returns the total number of items that are fully visible.\n * ```typescript\n * this.parentVirtDir.getItemCountInView();\n * ```\n */\n getItemCountInView() {\n let startIndex = this.getIndexAt(this.scrollPosition, this.sizesCache);\n if (this.scrollPosition - this.sizesCache[startIndex] > 0) {\n // fisrt item is not fully in view\n startIndex++;\n }\n const endIndex = this.getIndexAt(this.scrollPosition + parseInt(this.igxForContainerSize, 10), this.sizesCache);\n return endIndex - startIndex;\n }\n /**\n * Returns a reference to the scrollbar DOM element.\n * This is either a vertical or horizontal scrollbar depending on the specified igxForScrollOrientation.\n * ```typescript\n * dir.getScroll();\n * ```\n */\n getScroll() {\n var _a;\n return (_a = this.scrollComponent) === null || _a === void 0 ? void 0 : _a.nativeElement;\n }\n /**\n * Returns the size of the element at the specified index.\n * ```typescript\n * this.parentVirtDir.getSizeAt(1);\n * ```\n */\n getSizeAt(index) {\n return this.sizesCache[index + 1] - this.sizesCache[index];\n }\n /**\n * @hidden\n * Function that is called to get the native scrollbar size that the browsers renders.\n */\n getScrollNativeSize() {\n return this.scrollComponent ? this.scrollComponent.scrollNativeSize : 0;\n }\n /**\n * Returns the scroll offset of the element at the specified index.\n * ```typescript\n * this.parentVirtDir.getScrollForIndex(1);\n * ```\n */\n getScrollForIndex(index, bottom) {\n const containerSize = parseInt(this.igxForContainerSize, 10);\n const scroll = bottom ? Math.max(0, this.sizesCache[index + 1] - containerSize) : this.sizesCache[index];\n return scroll;\n }\n /**\n * Returns the index of the element at the specified offset.\n * ```typescript\n * this.parentVirtDir.getIndexAtScroll(100);\n * ```\n */\n getIndexAtScroll(scrollOffset) {\n return this.getIndexAt(scrollOffset, this.sizesCache);\n }\n /**\n * Returns whether the target index is outside the view.\n * ```typescript\n * this.parentVirtDir.isIndexOutsideView(10);\n * ```\n */\n isIndexOutsideView(index) {\n const targetNode = index >= this.state.startIndex && index <= this.state.startIndex + this.state.chunkSize ?\n this._embeddedViews.map(view => view.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE) || view.rootNodes[0].nextElementSibling)[index - this.state.startIndex] : null;\n const rowHeight = this.getSizeAt(index);\n const containerSize = parseInt(this.igxForContainerSize, 10);\n const containerOffset = -(this.scrollPosition - this.sizesCache[this.state.startIndex]);\n const endTopOffset = targetNode ? targetNode.offsetTop + rowHeight + containerOffset : containerSize + rowHeight;\n return !targetNode || targetNode.offsetTop < Math.abs(containerOffset)\n || containerSize && endTopOffset - containerSize > 5;\n }\n /**\n * @hidden\n * Function that recalculates and updates cache sizes.\n */\n recalcUpdateSizes() {\n const dimension = this.igxForScrollOrientation === 'horizontal' ?\n this.igxForSizePropName : 'height';\n const diffs = [];\n let totalDiff = 0;\n const l = this._embeddedViews.length;\n const rNodes = this._embeddedViews.map(view => view.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE) || view.rootNodes[0].nextElementSibling);\n for (let i = 0; i < l; i++) {\n const rNode = rNodes[i];\n if (rNode) {\n const height = window.getComputedStyle(rNode).getPropertyValue('height');\n const h = parseFloat(height) || parseInt(this.igxForItemSize, 10);\n const index = this.state.startIndex + i;\n if (!this.isRemote && !this.igxForOf[index]) {\n continue;\n }\n const margin = this.getMargin(rNode, dimension);\n const oldVal = dimension === 'height' ? this.heightCache[index] : this.igxForOf[index][dimension];\n const newVal = (dimension === 'height' ? h : rNode.clientWidth) + margin;\n if (dimension === 'height') {\n this.heightCache[index] = newVal;\n }\n else {\n this.igxForOf[index][dimension] = newVal;\n }\n const currDiff = newVal - oldVal;\n diffs.push(currDiff);\n totalDiff += currDiff;\n this.sizesCache[index + 1] += totalDiff;\n }\n }\n // update cache\n if (Math.abs(totalDiff) > 0) {\n for (let j = this.state.startIndex + this.state.chunkSize + 1; j < this.sizesCache.length; j++) {\n this.sizesCache[j] += totalDiff;\n }\n // update scrBar heights/widths\n if (this.igxForScrollOrientation === 'horizontal') {\n const firstScrollChild = this.scrollComponent.nativeElement.children.item(0);\n const totalWidth = parseInt(firstScrollChild.style.width, 10) + totalDiff;\n firstScrollChild.style.width = `${totalWidth}px`;\n }\n const reducer = (acc, val) => acc + val;\n if (this.igxForScrollOrientation === 'vertical') {\n const scrToBottom = this._isScrolledToBottom && !this.dc.instance.notVirtual;\n const hSum = this.heightCache.reduce(reducer);\n if (hSum > this._maxHeight) {\n this._virtHeightRatio = hSum / this._maxHeight;\n }\n this.scrollComponent.size = Math.min(this.scrollComponent.size + totalDiff, this._maxHeight);\n this._virtHeight = hSum;\n if (!this.scrollComponent.destroyed) {\n this.scrollComponent.cdr.detectChanges();\n }\n if (scrToBottom && !this._isAtBottomIndex) {\n const containerSize = parseInt(this.igxForContainerSize, 10);\n const maxVirtScrollTop = this._virtHeight - containerSize;\n this._bScrollInternal = true;\n this._virtScrollTop = maxVirtScrollTop;\n this.scrollPosition = maxVirtScrollTop;\n return;\n }\n if (this._adjustToIndex) {\n // in case scrolled to specific index where after scroll heights are changed\n // need to adjust the offsets so that item is last in view.\n const updatesToIndex = this._adjustToIndex - this.state.startIndex + 1;\n const sumDiffs = diffs.slice(0, updatesToIndex).reduce(reducer);\n if (sumDiffs !== 0) {\n this.addScrollTop(sumDiffs);\n }\n this._adjustToIndex = null;\n }\n }\n }\n }\n /**\n * @hidden\n * Reset scroll position.\n * Needed in case scrollbar is hidden/detached but we still need to reset it.\n */\n resetScrollPosition() {\n this.scrollPosition = 0;\n this.scrollComponent.scrollAmount = 0;\n this.state.startIndex = 0;\n }\n /**\n * @hidden\n */\n removeScrollEventListeners() {\n if (this.igxForScrollOrientation === 'horizontal') {\n this._zone.runOutsideAngular(() => { var _a, _b; return (_b = (_a = this.scrollComponent) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.removeEventListener('scroll', this.func); });\n }\n else {\n this._zone.runOutsideAngular(() => { var _a, _b; return (_b = (_a = this.scrollComponent) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.removeEventListener('scroll', this.verticalScrollHandler); });\n }\n }\n /**\n * @hidden\n * Function that is called when scrolling vertically\n */\n onScroll(event) {\n /* in certain situations this may be called when no scrollbar is visible */\n if (!parseInt(this.scrollComponent.nativeElement.style.height, 10)) {\n return;\n }\n if (!this._bScrollInternal) {\n this._calcVirtualScrollTop(event.target.scrollTop);\n }\n else {\n this._bScrollInternal = false;\n }\n const prevStartIndex = this.state.startIndex;\n const scrollOffset = this.fixedUpdateAllElements(this._virtScrollTop);\n this.dc.instance._viewContainer.element.nativeElement.style.top = -(scrollOffset) + 'px';\n this._zone.onStable.pipe(first$1()).subscribe(this.recalcUpdateSizes.bind(this));\n this.dc.changeDetectorRef.detectChanges();\n if (prevStartIndex !== this.state.startIndex) {\n this.chunkLoad.emit(this.state);\n }\n }\n updateSizes() {\n if (!this.scrollComponent.nativeElement.isConnected)\n return;\n const scrollable = this.isScrollable();\n this.recalcUpdateSizes();\n this._applyChanges();\n this._updateScrollOffset();\n if (scrollable !== this.isScrollable()) {\n this.scrollbarVisibilityChanged.emit();\n }\n else {\n this.contentSizeChange.emit();\n }\n }\n /**\n * @hidden\n */\n fixedUpdateAllElements(inScrollTop) {\n const count = this.isRemote ? this.totalItemCount : this.igxForOf.length;\n let newStart = this.getIndexAt(inScrollTop, this.sizesCache);\n if (newStart + this.state.chunkSize > count) {\n newStart = count - this.state.chunkSize;\n }\n const prevStart = this.state.startIndex;\n const diff = newStart - this.state.startIndex;\n this.state.startIndex = newStart;\n if (diff) {\n this.chunkPreload.emit(this.state);\n if (!this.isRemote) {\n // recalculate and apply page size.\n if (diff && Math.abs(diff) <= MAX_PERF_SCROLL_DIFF) {\n if (diff > 0) {\n this.moveApplyScrollNext(prevStart);\n }\n else {\n this.moveApplyScrollPrev(prevStart);\n }\n }\n else {\n this.fixedApplyScroll();\n }\n }\n }\n return inScrollTop - this.sizesCache[this.state.startIndex];\n }\n /**\n * @hidden\n * The function applies an optimized state change for scrolling down/right employing context change with view rearrangement\n */\n moveApplyScrollNext(prevIndex) {\n const start = prevIndex + this.state.chunkSize;\n const end = start + this.state.startIndex - prevIndex;\n const container = this.dc.instance._vcr;\n for (let i = start; i < end && this.igxForOf[i] !== undefined; i++) {\n const embView = this._embeddedViews.shift();\n if (!embView.destroyed) {\n this.scrollFocus(embView.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE)\n || embView.rootNodes[0].nextElementSibling);\n const view = container.detach(0);\n this.updateTemplateContext(embView.context, i);\n container.insert(view);\n this._embeddedViews.push(embView);\n }\n }\n }\n /**\n * @hidden\n * The function applies an optimized state change for scrolling up/left employing context change with view rearrangement\n */\n moveApplyScrollPrev(prevIndex) {\n const container = this.dc.instance._vcr;\n for (let i = prevIndex - 1; i >= this.state.startIndex && this.igxForOf[i] !== undefined; i--) {\n const embView = this._embeddedViews.pop();\n if (!embView.destroyed) {\n this.scrollFocus(embView.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE)\n || embView.rootNodes[0].nextElementSibling);\n const view = container.detach(container.length - 1);\n this.updateTemplateContext(embView.context, i);\n container.insert(view, 0);\n this._embeddedViews.unshift(embView);\n }\n }\n }\n /**\n * @hidden\n */\n getContextIndex(input) {\n return this.isRemote ? this.state.startIndex + this.igxForOf.indexOf(input) : this.igxForOf.indexOf(input);\n }\n /**\n * @hidden\n * Function which updates the passed context of an embedded view with the provided index\n * from the view container.\n * Often, called while handling a scroll event.\n */\n updateTemplateContext(context, index = 0) {\n context.$implicit = this.igxForOf[index];\n context.index = this.getContextIndex(this.igxForOf[index]);\n context.count = this.igxForOf.length;\n }\n /**\n * @hidden\n * The function applies an optimized state change through context change for each view\n */\n fixedApplyScroll() {\n let j = 0;\n const endIndex = this.state.startIndex + this.state.chunkSize;\n for (let i = this.state.startIndex; i < endIndex && this.igxForOf[i] !== undefined; i++) {\n const embView = this._embeddedViews[j++];\n this.updateTemplateContext(embView.context, i);\n }\n }\n /**\n * @hidden\n * @internal\n *\n * Clears focus inside the virtualized container on small scroll swaps.\n */\n scrollFocus(node) {\n const activeElement = this.document.activeElement;\n // Remove focus in case the the active element is inside the view container.\n // Otherwise we hit an exception while doing the 'small' scrolls swapping.\n // For more information:\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild\n // https://bugs.chromium.org/p/chromium/issues/detail?id=432392\n if (node && node.contains(this.document.activeElement)) {\n activeElement.blur();\n }\n }\n /**\n * @hidden\n * Function that is called when scrolling horizontally\n */\n onHScroll(event) {\n /* in certain situations this may be called when no scrollbar is visible */\n const firstScrollChild = this.scrollComponent.nativeElement.children.item(0);\n if (!parseInt(firstScrollChild.style.width, 10)) {\n return;\n }\n const prevStartIndex = this.state.startIndex;\n const scrLeft = event.target.scrollLeft;\n // Updating horizontal chunks\n const scrollOffset = this.fixedUpdateAllElements(Math.abs(event.target.scrollLeft));\n if (scrLeft < 0) {\n // RTL\n this.dc.instance._viewContainer.element.nativeElement.style.left = scrollOffset + 'px';\n }\n else {\n this.dc.instance._viewContainer.element.nativeElement.style.left = -scrollOffset + 'px';\n }\n this.dc.changeDetectorRef.detectChanges();\n if (prevStartIndex !== this.state.startIndex) {\n this.chunkLoad.emit(this.state);\n }\n }\n /**\n * Gets the function used to track changes in the items collection.\n * By default the object references are compared. However this can be optimized if you have unique identifier\n * value that can be used for the comparison instead of the object ref or if you have some other property values\n * in the item object that should be tracked for changes.\n * This option is similar to ngForTrackBy.\n * ```typescript\n * const trackFunc = this.parentVirtDir.igxForTrackBy;\n * ```\n */\n get igxForTrackBy() {\n return this._trackByFn;\n }\n /**\n * Sets the function used to track changes in the items collection.\n * This function can be set in scenarios where you want to optimize or\n * customize the tracking of changes for the items in the collection.\n * The igxForTrackBy function takes the index and the current item as arguments and needs to return the unique identifier for this item.\n * ```typescript\n * this.parentVirtDir.igxForTrackBy = (index, item) => {\n * return item.id + item.width;\n * };\n * ```\n */\n set igxForTrackBy(fn) {\n this._trackByFn = fn;\n }\n /**\n * @hidden\n */\n _applyChanges() {\n const prevChunkSize = this.state.chunkSize;\n this.applyChunkSizeChange();\n this._recalcScrollBarSize();\n if (this.igxForOf && this.igxForOf.length && this.dc) {\n const embeddedViewCopy = Object.assign([], this._embeddedViews);\n let startIndex = this.state.startIndex;\n let endIndex = this.state.chunkSize + this.state.startIndex;\n if (this.isRemote) {\n startIndex = 0;\n endIndex = this.igxForOf.length;\n }\n for (let i = startIndex; i < endIndex && this.igxForOf[i] !== undefined; i++) {\n const embView = embeddedViewCopy.shift();\n this.updateTemplateContext(embView.context, i);\n }\n if (prevChunkSize !== this.state.chunkSize) {\n this.chunkLoad.emit(this.state);\n }\n }\n }\n /**\n * @hidden\n */\n _calcMaxBrowserHeight() {\n if (!this.platformUtil.isBrowser) {\n return 0;\n }\n const div = this.document.createElement('div');\n const style = div.style;\n style.position = 'absolute';\n style.top = '9999999999999999px';\n this.document.body.appendChild(div);\n const size = Math.abs(div.getBoundingClientRect()['top']);\n this.document.body.removeChild(div);\n return size;\n }\n /**\n * @hidden\n * Recalculates the chunkSize based on current startIndex and returns the new size.\n * This should be called after this.state.startIndex is updated, not before.\n */\n _calculateChunkSize() {\n let chunkSize = 0;\n if (this.igxForContainerSize !== null && this.igxForContainerSize !== undefined) {\n if (!this.sizesCache) {\n this.initSizesCache(this.igxForOf);\n }\n chunkSize = this._calcMaxChunkSize();\n if (this.igxForOf && chunkSize > this.igxForOf.length) {\n chunkSize = this.igxForOf.length;\n }\n }\n else {\n if (this.igxForOf) {\n chunkSize = this.igxForOf.length;\n }\n }\n return chunkSize;\n }\n /**\n * @hidden\n */\n getElement(viewref, nodeName) {\n const elem = viewref.element.nativeElement.parentNode.getElementsByTagName(nodeName);\n return elem.length > 0 ? elem[0] : null;\n }\n /**\n * @hidden\n */\n initSizesCache(items) {\n let totalSize = 0;\n let size = 0;\n const dimension = this.igxForSizePropName || 'height';\n let i = 0;\n this.sizesCache = [];\n this.heightCache = [];\n this.sizesCache.push(0);\n const count = this.isRemote ? this.totalItemCount : items.length;\n for (i; i < count; i++) {\n size = this._getItemSize(items[i], dimension);\n if (this.igxForScrollOrientation === 'vertical') {\n this.heightCache.push(size);\n }\n totalSize += size;\n this.sizesCache.push(totalSize);\n }\n return totalSize;\n }\n _updateSizeCache() {\n if (this.igxForScrollOrientation === 'horizontal') {\n this.initSizesCache(this.igxForOf);\n return;\n }\n const oldHeight = this.heightCache.length > 0 ? this.heightCache.reduce((acc, val) => acc + val) : 0;\n const newHeight = this.initSizesCache(this.igxForOf);\n const diff = oldHeight - newHeight;\n this._adjustScrollPositionAfterSizeChange(diff);\n }\n /**\n * @hidden\n */\n _calcMaxChunkSize() {\n let i = 0;\n let length = 0;\n let maxLength = 0;\n const arr = [];\n let sum = 0;\n const availableSize = parseInt(this.igxForContainerSize, 10);\n if (!availableSize) {\n return 0;\n }\n const dimension = this.igxForScrollOrientation === 'horizontal' ?\n this.igxForSizePropName : 'height';\n const reducer = (accumulator, currentItem) => accumulator + this._getItemSize(currentItem, dimension);\n for (i; i < this.igxForOf.length; i++) {\n let item = this.igxForOf[i];\n if (dimension === 'height') {\n item = { value: this.igxForOf[i], height: this.heightCache[i] };\n }\n const size = dimension === 'height' ?\n this.heightCache[i] :\n this._getItemSize(item, dimension);\n sum = arr.reduce(reducer, size);\n if (sum < availableSize) {\n arr.push(item);\n length = arr.length;\n if (i === this.igxForOf.length - 1) {\n // reached end without exceeding\n // include prev items until size is filled or first item is reached.\n let curItem = dimension === 'height' ? arr[0].value : arr[0];\n let prevIndex = this.igxForOf.indexOf(curItem) - 1;\n while (prevIndex >= 0 && sum <= availableSize) {\n curItem = dimension === 'height' ? arr[0].value : arr[0];\n prevIndex = this.igxForOf.indexOf(curItem) - 1;\n const prevItem = this.igxForOf[prevIndex];\n const prevSize = dimension === 'height' ?\n this.heightCache[prevIndex] :\n parseInt(prevItem[dimension], 10);\n sum = arr.reduce(reducer, prevSize);\n arr.unshift(prevItem);\n length = arr.length;\n }\n }\n }\n else {\n arr.push(item);\n length = arr.length + 1;\n arr.shift();\n }\n if (length > maxLength) {\n maxLength = length;\n }\n }\n return maxLength;\n }\n /**\n * @hidden\n */\n getIndexAt(left, set) {\n let start = 0;\n let end = set.length - 1;\n if (left === 0) {\n return 0;\n }\n while (start <= end) {\n const midIdx = Math.floor((start + end) / 2);\n const midLeft = set[midIdx];\n const cmp = left - midLeft;\n if (cmp > 0) {\n start = midIdx + 1;\n }\n else if (cmp < 0) {\n end = midIdx - 1;\n }\n else {\n return midIdx;\n }\n }\n return end;\n }\n _recalcScrollBarSize() {\n const count = this.isRemote ? this.totalItemCount : (this.igxForOf ? this.igxForOf.length : 0);\n this.dc.instance.notVirtual = !(this.igxForContainerSize && this.dc && this.state.chunkSize < count);\n const scrollable = this.isScrollable();\n if (this.igxForScrollOrientation === 'horizontal') {\n const totalWidth = parseInt(this.igxForContainerSize, 10) > 0 ? this.initSizesCache(this.igxForOf) : 0;\n this.scrollComponent.nativeElement.style.width = this.igxForContainerSize + 'px';\n this.scrollComponent.size = totalWidth;\n if (totalWidth <= parseInt(this.igxForContainerSize, 10)) {\n this.resetScrollPosition();\n }\n }\n if (this.igxForScrollOrientation === 'vertical') {\n this.scrollComponent.nativeElement.style.height = parseInt(this.igxForContainerSize, 10) + 'px';\n this.scrollComponent.size = this._calcHeight();\n if (this.scrollComponent.size <= parseInt(this.igxForContainerSize, 10)) {\n this.resetScrollPosition();\n }\n }\n if (scrollable !== this.isScrollable()) {\n // scrollbar visibility has changed\n this.scrollbarVisibilityChanged.emit();\n }\n }\n _calcHeight() {\n let height;\n if (this.heightCache) {\n height = this.heightCache.reduce((acc, val) => acc + val, 0);\n }\n else {\n height = this.initSizesCache(this.igxForOf);\n }\n this._virtHeight = height;\n if (height > this._maxHeight) {\n this._virtHeightRatio = height / this._maxHeight;\n height = this._maxHeight;\n }\n return height;\n }\n _recalcOnContainerChange() {\n const prevChunkSize = this.state.chunkSize;\n this.applyChunkSizeChange();\n this._recalcScrollBarSize();\n if (prevChunkSize !== this.state.chunkSize) {\n this.chunkLoad.emit(this.state);\n }\n if (this.sizesCache && this.igxForScrollOrientation === 'horizontal') {\n // Updating horizontal chunks and offsets based on the new scrollLeft\n const scrollOffset = this.fixedUpdateAllElements(this.scrollPosition);\n this.dc.instance._viewContainer.element.nativeElement.style.left = -scrollOffset + 'px';\n }\n }\n /**\n * @hidden\n * Removes an element from the embedded views and updates chunkSize.\n */\n removeLastElem() {\n const oldElem = this._embeddedViews.pop();\n this.beforeViewDestroyed.emit(oldElem);\n // also detach from ViewContainerRef to make absolutely sure this is removed from the view container.\n this.dc.instance._vcr.detach(this.dc.instance._vcr.length - 1);\n oldElem.destroy();\n this.state.chunkSize--;\n }\n /**\n * @hidden\n * If there exists an element that we can create embedded view for creates it, appends it and updates chunkSize\n */\n addLastElem() {\n let elemIndex = this.state.startIndex + this.state.chunkSize;\n if (!this.isRemote && !this.igxForOf) {\n return;\n }\n if (elemIndex >= this.igxForOf.length) {\n elemIndex = this.igxForOf.length - this.state.chunkSize;\n }\n const input = this.igxForOf[elemIndex];\n const embeddedView = this.dc.instance._vcr.createEmbeddedView(this._template, new IgxForOfContext(input, this.getContextIndex(input), this.igxForOf.length));\n this._embeddedViews.push(embeddedView);\n this.state.chunkSize++;\n this._zone.run(() => this.cdr.markForCheck());\n }\n /**\n * Recalculates chunkSize and adds/removes elements if need due to the change.\n * this.state.chunkSize is updated in @addLastElem() or @removeLastElem()\n */\n applyChunkSizeChange() {\n const chunkSize = this.isRemote ? (this.igxForOf ? this.igxForOf.length : 0) : this._calculateChunkSize();\n if (chunkSize > this.state.chunkSize) {\n const diff = chunkSize - this.state.chunkSize;\n for (let i = 0; i < diff; i++) {\n this.addLastElem();\n }\n }\n else if (chunkSize < this.state.chunkSize) {\n const diff = this.state.chunkSize - chunkSize;\n for (let i = 0; i < diff; i++) {\n this.removeLastElem();\n }\n }\n }\n _updateScrollOffset() {\n if (this.igxForScrollOrientation === 'horizontal') {\n this._updateHScrollOffset();\n }\n else {\n this._updateVScrollOffset();\n }\n }\n _calcVirtualScrollTop(scrollTop) {\n const containerSize = parseInt(this.igxForContainerSize, 10);\n const maxRealScrollTop = this.scrollComponent.size - containerSize;\n const realPercentScrolled = maxRealScrollTop !== 0 ? scrollTop / maxRealScrollTop : 0;\n const maxVirtScrollTop = this._virtHeight - containerSize;\n this._virtScrollTop = realPercentScrolled * maxVirtScrollTop;\n }\n _getItemSize(item, dimension) {\n const dim = item ? item[dimension] : null;\n return typeof dim === 'number' ? dim : parseInt(this.igxForItemSize, 10) || 0;\n }\n _updateVScrollOffset() {\n let scrollOffset = 0;\n let currentScrollTop = this.scrollPosition;\n if (this._virtHeightRatio !== 1) {\n this._calcVirtualScrollTop(this.scrollPosition);\n currentScrollTop = this._virtScrollTop;\n }\n const vScroll = this.scrollComponent.nativeElement;\n scrollOffset = vScroll && this.scrollComponent.size ?\n currentScrollTop - this.sizesCache[this.state.startIndex] : 0;\n this.dc.instance._viewContainer.element.nativeElement.style.top = -(scrollOffset) + 'px';\n }\n _updateHScrollOffset() {\n let scrollOffset = 0;\n scrollOffset = this.scrollComponent.nativeElement &&\n this.scrollComponent.size ?\n this.scrollPosition - this.sizesCache[this.state.startIndex] : 0;\n this.dc.instance._viewContainer.element.nativeElement.style.left = -scrollOffset + 'px';\n }\n _adjustScrollPositionAfterSizeChange(sizeDiff) {\n // if data has been changed while container is scrolled\n // should update scroll top/left according to change so that same startIndex is in view\n if (Math.abs(sizeDiff) > 0 && this.scrollPosition > 0) {\n this.recalcUpdateSizes();\n const offset = this.igxForScrollOrientation === 'horizontal' ?\n parseInt(this.dc.instance._viewContainer.element.nativeElement.style.left, 10) :\n parseInt(this.dc.instance._viewContainer.element.nativeElement.style.top, 10);\n const newSize = this.sizesCache[this.state.startIndex] - offset;\n this.scrollPosition = newSize;\n if (this.scrollPosition !== newSize) {\n this.scrollComponent.scrollAmount = newSize;\n }\n }\n }\n getMargin(node, dimension) {\n const styles = window.getComputedStyle(node);\n if (dimension === 'height') {\n return parseFloat(styles['marginTop']) +\n parseFloat(styles['marginBottom']) || 0;\n }\n return parseFloat(styles['marginLeft']) +\n parseFloat(styles['marginRight']) || 0;\n }\n}\nIgxForOfDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxForOfDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: IgxForOfScrollSyncService }, { token: PlatformUtil }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });\nIgxForOfDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxForOfDirective, selector: \"[igxFor][igxForOf]\", inputs: { igxForOf: \"igxForOf\", igxForSizePropName: \"igxForSizePropName\", igxForScrollOrientation: \"igxForScrollOrientation\", igxForScrollContainer: \"igxForScrollContainer\", igxForContainerSize: \"igxForContainerSize\", igxForItemSize: \"igxForItemSize\", igxForTotalItemCount: \"igxForTotalItemCount\", igxForTrackBy: \"igxForTrackBy\" }, outputs: { chunkLoad: \"chunkLoad\", scrollbarVisibilityChanged: \"scrollbarVisibilityChanged\", contentSizeChange: \"contentSizeChange\", dataChanged: \"dataChanged\", beforeViewDestroyed: \"beforeViewDestroyed\", chunkPreload: \"chunkPreload\" }, providers: [IgxForOfScrollSyncService], usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxForOfDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxFor][igxForOf]',\n providers: [IgxForOfScrollSyncService]\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: IgxForOfScrollSyncService }, { type: PlatformUtil }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }];\n }, propDecorators: { igxForOf: [{\n type: Input\n }], igxForSizePropName: [{\n type: Input\n }], igxForScrollOrientation: [{\n type: Input\n }], igxForScrollContainer: [{\n type: Input\n }], igxForContainerSize: [{\n type: Input\n }], igxForItemSize: [{\n type: Input\n }], chunkLoad: [{\n type: Output\n }], scrollbarVisibilityChanged: [{\n type: Output\n }], contentSizeChange: [{\n type: Output\n }], dataChanged: [{\n type: Output\n }], beforeViewDestroyed: [{\n type: Output\n }], chunkPreload: [{\n type: Output\n }], igxForTotalItemCount: [{\n type: Input\n }], igxForTrackBy: [{\n type: Input\n }] } });\nconst getTypeNameForDebugging = (type) => type.name || typeof type;\nclass IgxGridForOfDirective extends IgxForOfDirective {\n set igxGridForOf(value) {\n this.igxForOf = value;\n }\n get igxGridForOf() {\n return this.igxForOf;\n }\n /**\n * @hidden\n * @internal\n */\n get sizesCache() {\n if (this.igxForScrollOrientation === 'horizontal') {\n if (this.igxGridForOfUniqueSizeCache || this.syncService.isMaster(this)) {\n return this._sizesCache;\n }\n return this.syncService.sizesCache(this.igxForScrollOrientation);\n }\n else {\n return this._sizesCache;\n }\n }\n /**\n * @hidden\n * @internal\n */\n set sizesCache(value) {\n this._sizesCache = value;\n }\n get itemsDimension() {\n return this.igxForSizePropName || 'height';\n }\n recalcUpdateSizes() {\n if (this.igxGridForOfVariableSizes && this.igxForScrollOrientation === 'vertical') {\n super.recalcUpdateSizes();\n }\n }\n constructor(_viewContainer, _template, _differs, cdr, _zone, _platformUtil, _document, syncScrollService, syncService) {\n super(_viewContainer, _template, _differs, cdr, _zone, syncScrollService, _platformUtil, _document);\n this.syncService = syncService;\n this.igxGridForOfUniqueSizeCache = false;\n this.igxGridForOfVariableSizes = true;\n /**\n * @hidden @internal\n * An event that is emitted after data has been changed but before the view is refreshed\n */\n this.dataChanging = new EventEmitter();\n }\n ngOnInit() {\n this.syncService.setMaster(this);\n super.ngOnInit();\n this.removeScrollEventListeners();\n }\n ngOnChanges(changes) {\n const forOf = 'igxGridForOf';\n this.syncService.setMaster(this);\n if (forOf in changes) {\n const value = changes[forOf].currentValue;\n if (!this._differ && value) {\n try {\n this._differ = this._differs.find(value).create(this.igxForTrackBy);\n }\n catch (e) {\n throw new Error(`Cannot find a differ supporting object \"${value}\" of type \"${getTypeNameForDebugging(value)}\".\n NgFor only supports binding to Iterables such as Arrays.`);\n }\n }\n if (this.igxForScrollOrientation === 'horizontal') {\n // in case collection has changes, reset sync service\n this.syncService.setMaster(this, true);\n }\n }\n const defaultItemSize = 'igxForItemSize';\n if (defaultItemSize in changes && !changes[defaultItemSize].firstChange &&\n this.igxForScrollOrientation === 'vertical' && this.igxForOf) {\n // handle default item size changed.\n this.initSizesCache(this.igxForOf);\n }\n const containerSize = 'igxForContainerSize';\n if (containerSize in changes && !changes[containerSize].firstChange && this.igxForOf) {\n this._recalcOnContainerChange();\n }\n }\n /**\n * @hidden\n * @internal\n */\n assumeMaster() {\n this._sizesCache = this.syncService.sizesCache(this.igxForScrollOrientation);\n this.syncService.setMaster(this, true);\n }\n ngDoCheck() {\n if (this._differ) {\n const changes = this._differ.diff(this.igxForOf);\n if (changes) {\n const args = {\n containerSize: this.igxForContainerSize\n };\n this.dataChanging.emit(args);\n // re-init cache.\n if (!this.igxForOf) {\n this.igxForOf = [];\n }\n /* we need to reset the master dir if all rows are removed\n (e.g. because of filtering); if all columns are hidden, rows are\n still rendered empty, so we should not reset master */\n if (!this.igxForOf.length &&\n this.igxForScrollOrientation === 'vertical') {\n this.syncService.resetMaster();\n }\n this.syncService.setMaster(this);\n this.igxForContainerSize = args.containerSize;\n const sizeDiff = this._updateSizeCache(changes);\n this._applyChanges();\n if (sizeDiff && this.igxForScrollOrientation === 'vertical') {\n this._adjustScrollPositionAfterSizeChange(sizeDiff);\n }\n this._updateScrollOffset();\n this.dataChanged.emit();\n }\n }\n }\n onScroll(event) {\n if (!parseInt(this.scrollComponent.nativeElement.style.height, 10)) {\n return;\n }\n if (!this._bScrollInternal) {\n this._calcVirtualScrollTop(event.target.scrollTop);\n }\n else {\n this._bScrollInternal = false;\n }\n const scrollOffset = this.fixedUpdateAllElements(this._virtScrollTop);\n this.dc.instance._viewContainer.element.nativeElement.style.top = -(scrollOffset) + 'px';\n this._zone.onStable.pipe(first$1()).subscribe(this.recalcUpdateSizes.bind(this));\n this.cdr.markForCheck();\n }\n onHScroll(scrollAmount) {\n /* in certain situations this may be called when no scrollbar is visible */\n const firstScrollChild = this.scrollComponent.nativeElement.children.item(0);\n if (!this.scrollComponent || !parseInt(firstScrollChild.style.width, 10)) {\n return;\n }\n // Updating horizontal chunks\n const scrollOffset = this.fixedUpdateAllElements(Math.abs(scrollAmount));\n if (scrollAmount < 0) {\n // RTL\n this.dc.instance._viewContainer.element.nativeElement.style.left = scrollOffset + 'px';\n }\n else {\n // LTR\n this.dc.instance._viewContainer.element.nativeElement.style.left = -scrollOffset + 'px';\n }\n }\n getItemSize(item) {\n let size = 0;\n const dimension = this.igxForSizePropName || 'height';\n if (this.igxForScrollOrientation === 'vertical') {\n size = this._getItemSize(item, dimension);\n if (item && item.summaries) {\n size = item.max;\n }\n else if (item && item.groups && item.height) {\n size = item.height;\n }\n }\n else {\n size = parseInt(item[dimension], 10) || 0;\n }\n return size;\n }\n initSizesCache(items) {\n if (!this.syncService.isMaster(this) && this.igxForScrollOrientation === 'horizontal') {\n const masterSizesCache = this.syncService.sizesCache(this.igxForScrollOrientation);\n return masterSizesCache[masterSizesCache.length - 1];\n }\n let totalSize = 0;\n let size = 0;\n let i = 0;\n this.sizesCache = [];\n this.heightCache = [];\n this.sizesCache.push(0);\n const count = this.isRemote ? this.totalItemCount : items.length;\n for (i; i < count; i++) {\n size = this.getItemSize(items[i]);\n if (this.igxForScrollOrientation === 'vertical') {\n this.heightCache.push(size);\n }\n totalSize += size;\n this.sizesCache.push(totalSize);\n }\n return totalSize;\n }\n _updateSizeCache(changes = null) {\n if (this.igxForScrollOrientation === 'horizontal') {\n const oldSize = this.sizesCache[this.sizesCache.length - 1];\n const newSize = this.initSizesCache(this.igxForOf);\n const diff = oldSize - newSize;\n return diff;\n }\n const oldHeight = this.heightCache.length > 0 ? this.heightCache.reduce((acc, val) => acc + val) : 0;\n let newHeight = oldHeight;\n if (changes && !this.isRemote) {\n newHeight = this.handleCacheChanges(changes);\n }\n else {\n return;\n }\n const diff = oldHeight - newHeight;\n // if data has been changed while container is scrolled\n // should update scroll top/left according to change so that same startIndex is in view\n if (Math.abs(diff) > 0 && this.platformUtil.isBrowser) {\n // TODO: This code can be removed. However tests need to be rewritten in a way that they wait for ResizeObserved to complete.\n // So leaving as is for the moment.\n requestAnimationFrame(() => {\n this.recalcUpdateSizes();\n const offset = parseInt(this.dc.instance._viewContainer.element.nativeElement.style.top, 10);\n if (this.scrollPosition !== 0) {\n this.scrollPosition = this.sizesCache[this.state.startIndex] - offset;\n }\n else {\n this._updateScrollOffset();\n }\n });\n }\n return diff;\n }\n handleCacheChanges(changes) {\n const identityChanges = [];\n const newHeightCache = [];\n const newSizesCache = [];\n newSizesCache.push(0);\n let newHeight = 0;\n // When there are more than one removed items the changes are not reliable so those with identity change should be default size.\n let numRemovedItems = 0;\n changes.forEachRemovedItem(() => numRemovedItems++);\n // Get the identity changes to determine later if those that have changed their indexes should be assigned default item size.\n changes.forEachIdentityChange((item) => {\n if (item.currentIndex !== item.previousIndex) {\n // Filter out ones that have not changed their index.\n identityChanges[item.currentIndex] = item;\n }\n });\n // Processing each item that is passed to the igxForOf so far seem to be most reliable. We parse the updated list of items.\n changes.forEachItem((item) => {\n if (item.previousIndex !== null &&\n (numRemovedItems < 2 || !identityChanges.length || identityChanges[item.currentIndex])) {\n // Reuse cache on those who have previousIndex.\n // When there are more than one removed items currently the changes are not readable so ones with identity change\n // should be racalculated.\n newHeightCache[item.currentIndex] = this.heightCache[item.previousIndex];\n }\n else {\n // Assign default item size.\n newHeightCache[item.currentIndex] = this.getItemSize(item.item);\n }\n newSizesCache[item.currentIndex + 1] = newSizesCache[item.currentIndex] + newHeightCache[item.currentIndex];\n newHeight += newHeightCache[item.currentIndex];\n });\n this.heightCache = newHeightCache;\n this.sizesCache = newSizesCache;\n return newHeight;\n }\n addLastElem() {\n let elemIndex = this.state.startIndex + this.state.chunkSize;\n if (!this.isRemote && !this.igxForOf) {\n return;\n }\n if (elemIndex >= this.igxForOf.length) {\n elemIndex = this.igxForOf.length - this.state.chunkSize;\n }\n const input = this.igxForOf[elemIndex];\n const embeddedView = this.dc.instance._vcr.createEmbeddedView(this._template, new IgxForOfContext(input, this.getContextIndex(input), this.igxForOf.length));\n this._embeddedViews.push(embeddedView);\n this.state.chunkSize++;\n }\n _updateViews(prevChunkSize) {\n if (this.igxForOf && this.igxForOf.length && this.dc) {\n const embeddedViewCopy = Object.assign([], this._embeddedViews);\n let startIndex;\n let endIndex;\n if (this.isRemote) {\n startIndex = 0;\n endIndex = this.igxForOf.length;\n }\n else {\n startIndex = this.getIndexAt(this.scrollPosition, this.sizesCache);\n if (startIndex + this.state.chunkSize > this.igxForOf.length) {\n startIndex = this.igxForOf.length - this.state.chunkSize;\n }\n this.state.startIndex = startIndex;\n endIndex = this.state.chunkSize + this.state.startIndex;\n }\n for (let i = startIndex; i < endIndex && this.igxForOf[i] !== undefined; i++) {\n const embView = embeddedViewCopy.shift();\n this.updateTemplateContext(embView.context, i);\n }\n if (prevChunkSize !== this.state.chunkSize) {\n this.chunkLoad.emit(this.state);\n }\n }\n }\n _applyChanges() {\n const prevChunkSize = this.state.chunkSize;\n this.applyChunkSizeChange();\n this._recalcScrollBarSize();\n this._updateViews(prevChunkSize);\n }\n /**\n * @hidden\n */\n _calcMaxChunkSize() {\n if (this.igxForScrollOrientation === 'horizontal') {\n if (this.syncService.isMaster(this)) {\n return super._calcMaxChunkSize();\n }\n return this.syncService.chunkSize(this.igxForScrollOrientation);\n }\n else {\n return super._calcMaxChunkSize();\n }\n }\n}\nIgxGridForOfDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridForOfDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: PlatformUtil }, { token: DOCUMENT }, { token: IgxForOfScrollSyncService }, { token: IgxForOfSyncService }], target: i0.ɵɵFactoryTarget.Directive });\nIgxGridForOfDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridForOfDirective, selector: \"[igxGridFor][igxGridForOf]\", inputs: { igxGridForOf: \"igxGridForOf\", igxGridForOfUniqueSizeCache: \"igxGridForOfUniqueSizeCache\", igxGridForOfVariableSizes: \"igxGridForOfVariableSizes\" }, outputs: { dataChanging: \"dataChanging\" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridForOfDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxGridFor][igxGridForOf]'\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: PlatformUtil }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: IgxForOfScrollSyncService }, { type: IgxForOfSyncService }];\n }, propDecorators: { igxGridForOf: [{\n type: Input\n }], igxGridForOfUniqueSizeCache: [{\n type: Input\n }], igxGridForOfVariableSizes: [{\n type: Input\n }], dataChanging: [{\n type: Output\n }] } });\n/**\n * @hidden\n */\nclass IgxForOfModule {\n}\nIgxForOfModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxForOfModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxForOfModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxForOfModule, declarations: [IgxForOfDirective, IgxGridForOfDirective, DisplayContainerComponent,\n VirtualHelperComponent,\n HVirtualHelperComponent,\n VirtualHelperBaseDirective], imports: [IgxScrollInertiaModule, CommonModule], exports: [IgxForOfDirective, IgxGridForOfDirective] });\nIgxForOfModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxForOfModule, imports: [IgxScrollInertiaModule, CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxForOfModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxForOfDirective,\n IgxGridForOfDirective,\n DisplayContainerComponent,\n VirtualHelperComponent,\n HVirtualHelperComponent,\n VirtualHelperBaseDirective\n ],\n exports: [IgxForOfDirective, IgxGridForOfDirective],\n imports: [IgxScrollInertiaModule, CommonModule]\n }]\n }] });\n\n/**\n * **Ignite UI for Angular DropDown** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/drop-down)\n *\n * The Ignite UI for Angular Drop Down displays a scrollable list of items which may be visually grouped and\n * supports selection of a single item. Clicking or tapping an item selects it and closes the Drop Down\n *\n * Example:\n * ```html\n * \n * \n * {{ item.value }}\n * \n * \n * ```\n */\nclass IgxDropDownComponent extends IgxDropDownBaseDirective {\n /**\n * @hidden @internal\n */\n get focusedItem() {\n if (this.virtDir) {\n return this._focusedItem && this._focusedItem.index !== -1 ?\n (this.children.find(e => e.index === this._focusedItem.index) || null) :\n null;\n }\n return this._focusedItem;\n }\n set focusedItem(value) {\n if (!value) {\n this.selection.clear(`${this.id}-active`);\n this._focusedItem = null;\n return;\n }\n this._focusedItem = value;\n if (this.virtDir) {\n this._focusedItem = {\n value: value.value,\n index: value.index\n };\n }\n this.selection.set(`${this.id}-active`, new Set([this._focusedItem]));\n }\n get id() {\n return this._id;\n }\n set id(value) {\n this.selection.set(value, this.selection.get(this.id));\n this.selection.clear(this.id);\n this.selection.set(value, this.selection.get(`${this.id}-active`));\n this.selection.clear(`${this.id}-active`);\n this._id = value;\n }\n /** Id of the internal listbox of the drop down */\n get listId() {\n return this.id + '-list';\n }\n /**\n * Get currently selected item\n *\n * ```typescript\n * let currentItem = this.dropdown.selectedItem;\n * ```\n */\n get selectedItem() {\n const selectedItem = this.selection.first_item(this.id);\n if (selectedItem) {\n return selectedItem;\n }\n return null;\n }\n /**\n * Gets if the dropdown is collapsed\n *\n * ```typescript\n * let isCollapsed = this.dropdown.collapsed;\n * ```\n */\n get collapsed() {\n return this.toggleDirective.collapsed;\n }\n /** @hidden @internal */\n get scrollContainer() {\n return this.scrollContainerRef.nativeElement;\n }\n get collectionLength() {\n if (this.virtDir) {\n return this.virtDir.totalItemCount || this.virtDir.igxForOf.length;\n }\n }\n constructor(elementRef, cdr, selection, _displayDensityOptions) {\n super(elementRef, cdr, _displayDensityOptions);\n this.selection = selection;\n /**\n * Emitted before the dropdown is opened\n *\n * ```html\n * \n * ```\n */\n this.opening = new EventEmitter();\n /**\n * Emitted after the dropdown is opened\n *\n * ```html\n * \n * ```\n */\n this.opened = new EventEmitter();\n /**\n * Emitted before the dropdown is closed\n *\n * ```html\n * \n * ```\n */\n this.closing = new EventEmitter();\n /**\n * Emitted after the dropdown is closed\n *\n * ```html\n * \n * ```\n */\n this.closed = new EventEmitter();\n /**\n * Gets/sets whether items take focus. Disabled by default.\n * When enabled, drop down items gain tab index and are focused when active -\n * this includes activating the selected item when opening the drop down and moving with keyboard navigation.\n *\n * Note: Keep that focus shift in mind when using the igxDropDownItemNavigation directive\n * and ensure it's placed either on each focusable item or a common ancestor to allow it to handle keyboard events.\n *\n * ```typescript\n * // get\n * let dropDownAllowsItemFocus = this.dropdown.allowItemsFocus;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.allowItemsFocus = false;\n this.destroy$ = new Subject();\n }\n /**\n * Opens the dropdown\n *\n * ```typescript\n * this.dropdown.open();\n * ```\n */\n open(overlaySettings) {\n this.toggleDirective.open(overlaySettings);\n this.updateScrollPosition();\n }\n /**\n * Closes the dropdown\n *\n * ```typescript\n * this.dropdown.close();\n * ```\n */\n close(event) {\n this.toggleDirective.close(event);\n }\n /**\n * Toggles the dropdown\n *\n * ```typescript\n * this.dropdown.toggle();\n * ```\n */\n toggle(overlaySettings) {\n if (this.collapsed || this.toggleDirective.isClosing) {\n this.open(overlaySettings);\n }\n else {\n this.close();\n }\n }\n /**\n * Select an item by index\n *\n * @param index of the item to select; If the drop down uses *igxFor, pass the index in data\n */\n setSelectedItem(index) {\n if (index < 0 || index >= this.items.length) {\n return;\n }\n let newSelection;\n if (this.virtDir) {\n newSelection = {\n value: this.virtDir.igxForOf[index],\n index\n };\n }\n else {\n newSelection = this.items[index];\n }\n this.selectItem(newSelection);\n }\n /**\n * Navigates to the item on the specified index\n * If the data in the drop-down is virtualized, pass the index of the item in the virtualized data.\n *\n * @param newIndex number\n */\n navigateItem(index) {\n if (this.virtDir) {\n if (index === -1 || index >= this.collectionLength) {\n return;\n }\n const direction = index > (this.focusedItem ? this.focusedItem.index : -1) ? Navigate.Down : Navigate.Up;\n const subRequired = this.isIndexOutOfBounds(index, direction);\n this.focusedItem = {\n value: this.virtDir.igxForOf[index],\n index\n };\n if (subRequired) {\n this.virtDir.scrollTo(index);\n }\n if (subRequired) {\n this.virtDir.chunkLoad.pipe(take(1)).subscribe(() => {\n this.skipHeader(direction);\n });\n }\n else {\n this.skipHeader(direction);\n }\n }\n else {\n super.navigateItem(index);\n }\n if (this.allowItemsFocus && this.focusedItem) {\n this.focusedItem.element.nativeElement.focus();\n this.cdr.markForCheck();\n }\n }\n /**\n * @hidden @internal\n */\n updateScrollPosition() {\n if (!this.virtDir) {\n return;\n }\n if (!this.selectedItem) {\n this.virtDir.scrollTo(0);\n return;\n }\n let targetScroll = this.virtDir.getScrollForIndex(this.selectedItem.index);\n const itemsInView = this.virtDir.igxForContainerSize / this.virtDir.igxForItemSize;\n targetScroll -= (itemsInView / 2 - 1) * this.virtDir.igxForItemSize;\n this.virtDir.getScroll().scrollTop = targetScroll;\n }\n /**\n * @hidden @internal\n */\n onToggleOpening(e) {\n const args = { owner: this, event: e.event, cancel: false };\n this.opening.emit(args);\n e.cancel = args.cancel;\n if (e.cancel) {\n return;\n }\n if (this.virtDir) {\n this.virtDir.scrollPosition = this._scrollPosition;\n }\n }\n /**\n * @hidden @internal\n */\n onToggleContentAppended(_event) {\n if (!this.virtDir && this.selectedItem) {\n this.scrollToItem(this.selectedItem);\n }\n }\n /**\n * @hidden @internal\n */\n onToggleOpened() {\n this.updateItemFocus();\n this.opened.emit({ owner: this });\n }\n /**\n * @hidden @internal\n */\n onToggleClosing(e) {\n const args = { owner: this, event: e.event, cancel: false };\n this.closing.emit(args);\n e.cancel = args.cancel;\n if (e.cancel) {\n return;\n }\n if (this.virtDir) {\n this._scrollPosition = this.virtDir.scrollPosition;\n }\n }\n /**\n * @hidden @internal\n */\n onToggleClosed() {\n this.focusItem(false);\n this.closed.emit({ owner: this });\n }\n /**\n * @hidden @internal\n */\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n this.selection.clear(this.id);\n this.selection.clear(`${this.id}-active`);\n }\n /** @hidden @internal */\n calculateScrollPosition(item) {\n if (!item) {\n return 0;\n }\n const elementRect = item.element.nativeElement.getBoundingClientRect();\n const parentRect = this.scrollContainer.getBoundingClientRect();\n const scrollDelta = parentRect.top - elementRect.top;\n let scrollPosition = this.scrollContainer.scrollTop - scrollDelta;\n const dropDownHeight = this.scrollContainer.clientHeight;\n scrollPosition -= dropDownHeight / 2;\n scrollPosition += item.elementHeight / 2;\n return Math.floor(scrollPosition);\n }\n /**\n * @hidden @internal\n */\n ngOnChanges(changes) {\n if (changes.id) {\n // temp workaround until fix --> https://github.com/angular/angular/issues/34992\n this.toggleDirective.id = changes.id.currentValue;\n }\n }\n ngAfterViewInit() {\n if (this.virtDir) {\n this.virtDir.igxForItemSize = 28;\n }\n }\n /** Keydown Handler */\n onItemActionKey(key, event) {\n super.onItemActionKey(key, event);\n this.close(event);\n }\n /**\n * Virtual scroll implementation\n *\n * @hidden @internal\n */\n navigateFirst() {\n if (this.virtDir) {\n this.navigateItem(0);\n }\n else {\n super.navigateFirst();\n }\n }\n /**\n * @hidden @internal\n */\n navigateLast() {\n if (this.virtDir) {\n this.navigateItem(this.virtDir.totalItemCount ? this.virtDir.totalItemCount - 1 : this.virtDir.igxForOf.length - 1);\n }\n else {\n super.navigateLast();\n }\n }\n /**\n * @hidden @internal\n */\n navigateNext() {\n if (this.virtDir) {\n this.navigateItem(this._focusedItem ? this._focusedItem.index + 1 : 0);\n }\n else {\n super.navigateNext();\n }\n }\n /**\n * @hidden @internal\n */\n navigatePrev() {\n if (this.virtDir) {\n this.navigateItem(this._focusedItem ? this._focusedItem.index - 1 : 0);\n }\n else {\n super.navigatePrev();\n }\n }\n /**\n * Handles the `selectionChanging` emit and the drop down toggle when selection changes\n *\n * @hidden\n * @internal\n * @param newSelection\n * @param event\n */\n selectItem(newSelection, event) {\n const oldSelection = this.selectedItem;\n if (!newSelection) {\n newSelection = this.focusedItem;\n }\n if (newSelection === null) {\n return;\n }\n if (newSelection instanceof IgxDropDownItemBaseDirective && newSelection.isHeader) {\n return;\n }\n if (this.virtDir) {\n newSelection = {\n value: newSelection.value,\n index: newSelection.index\n };\n }\n const args = { oldSelection, newSelection, cancel: false, owner: this };\n this.selectionChanging.emit(args);\n if (!args.cancel) {\n if (this.isSelectionValid(args.newSelection)) {\n this.selection.set(this.id, new Set([args.newSelection]));\n if (!this.virtDir) {\n if (oldSelection) {\n oldSelection.selected = false;\n }\n if (args.newSelection) {\n args.newSelection.selected = true;\n }\n }\n if (event) {\n this.toggleDirective.close(event);\n }\n }\n else {\n throw new Error('Please provide a valid drop-down item for the selection!');\n }\n }\n }\n /**\n * Clears the selection of the dropdown\n * ```typescript\n * this.dropdown.clearSelection();\n * ```\n */\n clearSelection() {\n const oldSelection = this.selectedItem;\n const newSelection = null;\n const args = { oldSelection, newSelection, cancel: false, owner: this };\n this.selectionChanging.emit(args);\n if (this.selectedItem && !args.cancel) {\n this.selectedItem.selected = false;\n this.selection.clear(this.id);\n }\n }\n /**\n * Checks whether the selection is valid\n * `null` - the selection should be emptied\n * Virtual? - the selection should at least have and `index` and `value` property\n * Non-virtual? - the selection should be a valid drop-down item and **not** be a header\n */\n isSelectionValid(selection) {\n return selection === null\n || (this.virtDir && selection.hasOwnProperty('value') && selection.hasOwnProperty('index'))\n || (selection instanceof IgxDropDownItemComponent && !selection.isHeader);\n }\n scrollToItem(item) {\n this.scrollContainer.scrollTop = this.calculateScrollPosition(item);\n }\n focusItem(value) {\n if (value || this._focusedItem) {\n this._focusedItem.focused = value;\n }\n }\n updateItemFocus() {\n if (this.selectedItem) {\n this.focusedItem = this.selectedItem;\n this.focusItem(true);\n }\n else if (this.allowItemsFocus) {\n this.navigateFirst();\n }\n }\n skipHeader(direction) {\n if (!this.focusedItem) {\n return;\n }\n if (this.focusedItem.isHeader || this.focusedItem.disabled) {\n if (direction === Navigate.Up) {\n this.navigatePrev();\n }\n else {\n this.navigateNext();\n }\n }\n }\n isIndexOutOfBounds(index, direction) {\n const virtState = this.virtDir.state;\n const currentPosition = this.virtDir.getScroll().scrollTop;\n const itemPosition = this.virtDir.getScrollForIndex(index, direction === Navigate.Down);\n const indexOutOfChunk = index < virtState.startIndex || index > virtState.chunkSize + virtState.startIndex;\n const scrollNeeded = direction === Navigate.Down ? currentPosition < itemPosition : currentPosition > itemPosition;\n const subRequired = indexOutOfChunk || scrollNeeded;\n return subRequired;\n }\n}\nIgxDropDownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxSelectionAPIService }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxDropDownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDropDownComponent, selector: \"igx-drop-down\", inputs: { allowItemsFocus: \"allowItemsFocus\", labelledBy: \"labelledBy\" }, outputs: { opening: \"opening\", opened: \"opened\", closing: \"closing\", closed: \"closed\" }, providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxDropDownComponent }], queries: [{ propertyName: \"virtDir\", first: true, predicate: IgxForOfDirective, descendants: true, read: IgxForOfDirective }, { propertyName: \"children\", predicate: i0.forwardRef(function () { return IgxDropDownItemComponent; }), descendants: true }], viewQueries: [{ propertyName: \"toggleDirective\", first: true, predicate: IgxToggleDirective, descendants: true, static: true }, { propertyName: \"scrollContainerRef\", first: true, predicate: [\"scrollContainer\"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"
    \\n
    \\n \\n \\n \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxToggleDirective, selector: \"[igxToggle]\", inputs: [\"id\"], outputs: [\"opened\", \"opening\", \"closed\", \"closing\", \"appended\"], exportAs: [\"toggle\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-drop-down', providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxDropDownComponent }], template: \"
    \\n
    \\n \\n \\n \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }];\n }, propDecorators: { children: [{\n type: ContentChildren,\n args: [forwardRef(() => IgxDropDownItemComponent), { descendants: true }]\n }], opening: [{\n type: Output\n }], opened: [{\n type: Output\n }], closing: [{\n type: Output\n }], closed: [{\n type: Output\n }], allowItemsFocus: [{\n type: Input\n }], labelledBy: [{\n type: Input\n }], virtDir: [{\n type: ContentChild,\n args: [IgxForOfDirective, { read: IgxForOfDirective }]\n }], toggleDirective: [{\n type: ViewChild,\n args: [IgxToggleDirective, { static: true }]\n }], scrollContainerRef: [{\n type: ViewChild,\n args: ['scrollContainer', { static: true }]\n }] } });\n\n/**\n * Navigation Directive that handles keyboard events on its host and controls a targeted IgxDropDownBaseDirective component\n */\nclass IgxDropDownItemNavigationDirective {\n constructor(dropdown) {\n this.dropdown = dropdown;\n this._target = null;\n }\n /**\n * Gets the target of the navigation directive;\n *\n * ```typescript\n * // Get\n * export class MyComponent {\n * ...\n * @ContentChild(IgxDropDownNavigationDirective)\n * navDirective: IgxDropDownNavigationDirective = null\n * ...\n * const navTarget: IgxDropDownBaseDirective = navDirective.navTarget\n * }\n * ```\n */\n get target() {\n return this._target;\n }\n /**\n * Sets the target of the navigation directive;\n * If no valid target is passed, it falls back to the drop down context\n *\n * ```html\n * \n * \n * ...\n * \n * ...\n * \n * ```\n */\n set target(target) {\n this._target = target ? target : this.dropdown;\n }\n /**\n * Captures keydown events and calls the appropriate handlers on the target component\n */\n handleKeyDown(event) {\n if (event) {\n const key = event.key.toLowerCase();\n if (!this.target.collapsed) { // If dropdown is opened\n const navKeys = ['esc', 'escape', 'enter', 'space', 'spacebar', ' ',\n 'arrowup', 'up', 'arrowdown', 'down', 'home', 'end'];\n if (navKeys.indexOf(key) === -1) { // If key has appropriate function in DD\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n }\n else { // If dropdown is closed, do nothing\n return;\n }\n switch (key) {\n case 'esc':\n case 'escape':\n this.target.onItemActionKey(DropDownActionKey.ESCAPE, event);\n break;\n case 'enter':\n this.target.onItemActionKey(DropDownActionKey.ENTER, event);\n break;\n case 'space':\n case 'spacebar':\n case ' ':\n this.target.onItemActionKey(DropDownActionKey.SPACE, event);\n break;\n case 'arrowup':\n case 'up':\n this.onArrowUpKeyDown();\n break;\n case 'arrowdown':\n case 'down':\n this.onArrowDownKeyDown();\n break;\n case 'home':\n this.onHomeKeyDown();\n break;\n case 'end':\n this.onEndKeyDown();\n break;\n default:\n return;\n }\n }\n }\n /**\n * Navigates to previous item\n */\n onArrowDownKeyDown() {\n this.target.navigateNext();\n }\n /**\n * Navigates to previous item\n */\n onArrowUpKeyDown() {\n this.target.navigatePrev();\n }\n /**\n * Navigates to target's last item\n */\n onEndKeyDown() {\n this.target.navigateLast();\n }\n /**\n * Navigates to target's first item\n */\n onHomeKeyDown() {\n this.target.navigateFirst();\n }\n}\nIgxDropDownItemNavigationDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownItemNavigationDirective, deps: [{ token: IGX_DROPDOWN_BASE, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });\nIgxDropDownItemNavigationDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDropDownItemNavigationDirective, selector: \"[igxDropDownItemNavigation]\", inputs: { target: [\"igxDropDownItemNavigation\", \"target\"] }, host: { listeners: { \"keydown\": \"handleKeyDown($event)\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownItemNavigationDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxDropDownItemNavigation]'\n }]\n }], ctorParameters: function () {\n return [{ type: IgxDropDownBaseDirective, decorators: [{\n type: Self\n }, {\n type: Optional\n }, {\n type: Inject,\n args: [IGX_DROPDOWN_BASE]\n }] }];\n }, propDecorators: { target: [{\n type: Input,\n args: ['igxDropDownItemNavigation']\n }], handleKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n\n/**\n * @hidden\n */\nclass IgxDropDownModule {\n}\nIgxDropDownModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxDropDownModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownModule, declarations: [IgxDropDownComponent,\n IgxDropDownItemBaseDirective,\n IgxDropDownItemComponent,\n IgxDropDownGroupComponent,\n IgxDropDownItemNavigationDirective], imports: [CommonModule,\n IgxToggleModule], exports: [IgxDropDownComponent,\n IgxDropDownItemComponent,\n IgxDropDownGroupComponent,\n IgxDropDownItemNavigationDirective] });\nIgxDropDownModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownModule, imports: [CommonModule,\n IgxToggleModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDownModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxDropDownComponent,\n IgxDropDownItemBaseDirective,\n IgxDropDownItemComponent,\n IgxDropDownGroupComponent,\n IgxDropDownItemNavigationDirective\n ],\n exports: [\n IgxDropDownComponent,\n IgxDropDownItemComponent,\n IgxDropDownGroupComponent,\n IgxDropDownItemNavigationDirective\n ],\n imports: [\n CommonModule,\n IgxToggleModule\n ]\n }]\n }] });\n\nconst DatePickerResourceStringsEN = {\n igx_date_picker_change_date: 'Change Date',\n igx_date_picker_choose_date: 'Choose Date'\n};\n\nconst DateRangePickerResourceStringsEN = {\n igx_date_range_picker_date_separator: 'to',\n igx_date_range_picker_done_button: 'Done'\n};\n\nconst GridResourceStringsEN = {\n igx_grid_groupByArea_message: 'Drag a column header and drop it here to group by that column.',\n igx_grid_groupByArea_select_message: 'Select all rows in the group with field name {0} and value {1}.',\n igx_grid_groupByArea_deselect_message: 'Deselect all rows in the group with field name {0} and value {1}.',\n igx_grid_emptyFilteredGrid_message: 'No records found.',\n igx_grid_emptyGrid_message: 'Grid has no data.',\n igx_grid_filter: 'Filter',\n igx_grid_filter_row_close: 'Close',\n igx_grid_filter_row_reset: 'Reset',\n igx_grid_filter_row_placeholder: 'Add filter value',\n igx_grid_filter_row_boolean_placeholder: 'All',\n igx_grid_filter_row_date_placeholder: 'Pick up date',\n igx_grid_filter_row_time_placeholder: 'Pick up time',\n igx_grid_filter_operator_and: 'And',\n igx_grid_filter_operator_or: 'Or',\n igx_grid_complex_filter: 'Complex Filter',\n igx_grid_filter_contains: 'Contains',\n igx_grid_filter_doesNotContain: 'Does Not Contain',\n igx_grid_filter_startsWith: 'Starts With',\n igx_grid_filter_endsWith: 'Ends With',\n igx_grid_filter_equals: 'Equals',\n igx_grid_filter_doesNotEqual: 'Does Not Equal',\n igx_grid_filter_empty: 'Empty',\n igx_grid_filter_notEmpty: 'Not Empty',\n igx_grid_filter_null: 'Null',\n igx_grid_filter_notNull: 'Not Null',\n igx_grid_filter_before: 'Before',\n igx_grid_filter_after: 'After',\n igx_grid_filter_at: 'At',\n igx_grid_filter_not_at: 'Not At',\n igx_grid_filter_at_before: 'At or Before',\n igx_grid_filter_at_after: 'At or After',\n igx_grid_filter_today: 'Today',\n igx_grid_filter_yesterday: 'Yesterday',\n igx_grid_filter_thisMonth: 'This Month',\n igx_grid_filter_lastMonth: 'Last Month',\n igx_grid_filter_nextMonth: 'Next Month',\n igx_grid_filter_thisYear: 'This Year',\n igx_grid_filter_lastYear: 'Last Year',\n igx_grid_filter_nextYear: 'Next Year',\n igx_grid_filter_greaterThan: 'Greater Than',\n igx_grid_filter_lessThan: 'Less Than',\n igx_grid_filter_greaterThanOrEqualTo: 'Greater Than Or Equal To',\n igx_grid_filter_lessThanOrEqualTo: 'Less Than Or Equal To',\n igx_grid_filter_true: 'True',\n igx_grid_filter_false: 'False',\n igx_grid_filter_all: 'All',\n igx_grid_filter_condition_placeholder: 'Select filter',\n igx_grid_summary_count: 'Count',\n igx_grid_summary_min: 'Min',\n igx_grid_summary_max: 'Max',\n igx_grid_summary_sum: 'Sum',\n igx_grid_summary_average: 'Avg',\n igx_grid_summary_earliest: 'Earliest',\n igx_grid_summary_latest: 'Latest',\n igx_grid_excel_filter_moving_left: 'move left',\n igx_grid_excel_filter_moving_left_short: 'left',\n igx_grid_excel_filter_moving_right: 'move right',\n igx_grid_excel_filter_moving_right_short: 'right',\n igx_grid_excel_filter_moving_header: 'move',\n igx_grid_excel_filter_sorting_asc: 'ascending',\n igx_grid_excel_filter_sorting_asc_short: 'asc',\n igx_grid_excel_filter_sorting_desc: 'descending',\n igx_grid_excel_filter_sorting_desc_short: 'desc',\n igx_grid_excel_filter_sorting_header: 'sort',\n igx_grid_excel_filter_clear: 'Clear column filters',\n igx_grid_excel_custom_dialog_add: 'add filter',\n igx_grid_excel_custom_dialog_clear: 'Clear filter',\n igx_grid_excel_custom_dialog_header: 'Custom auto-filter on column: ',\n igx_grid_excel_cancel: 'cancel',\n igx_grid_excel_apply: 'apply',\n igx_grid_excel_search_placeholder: 'Search',\n igx_grid_excel_select_all: 'Select All',\n igx_grid_excel_select_all_search_results: 'Select all search results',\n igx_grid_excel_add_to_filter: 'Add current selection to filter',\n igx_grid_excel_blanks: '(Blanks)',\n igx_grid_excel_hide: 'Hide column',\n igx_grid_excel_show: 'Show column',\n igx_grid_excel_pin: 'Pin column',\n igx_grid_excel_unpin: 'Unpin column',\n igx_grid_excel_select: 'Select column',\n igx_grid_excel_deselect: 'Deselect column',\n igx_grid_excel_text_filter: 'Text filter',\n igx_grid_excel_number_filter: 'Number filter',\n igx_grid_excel_date_filter: 'Date filter',\n igx_grid_excel_boolean_filter: 'Boolean filter',\n igx_grid_excel_currency_filter: 'Currency filter',\n igx_grid_excel_custom_filter: 'Custom filter...',\n igx_grid_excel_no_matches: 'No matches',\n igx_grid_advanced_filter_title: 'Advanced Filtering',\n igx_grid_advanced_filter_and_group: '\"And\" Group',\n igx_grid_advanced_filter_or_group: '\"Or\" Group',\n igx_grid_advanced_filter_end_group: 'End Group',\n igx_grid_advanced_filter_create_and_group: 'Create \"And\" Group',\n igx_grid_advanced_filter_create_or_group: 'Create \"Or\" Group',\n igx_grid_advanced_filter_and_label: 'and',\n igx_grid_advanced_filter_or_label: 'or',\n igx_grid_advanced_filter_add_condition: 'Condition',\n igx_grid_advanced_filter_ungroup: 'Ungroup',\n igx_grid_advanced_filter_delete: 'Delete',\n igx_grid_advanced_filter_delete_filters: 'Delete filters',\n igx_grid_advanced_filter_initial_text: 'Start with creating a group of conditions linked with \"And\" or \"Or\"',\n igx_grid_advanced_filter_column_placeholder: 'Select column',\n igx_grid_advanced_filter_value_placeholder: 'Value',\n igx_grid_pinned_row_indicator: 'Pinned',\n igx_grid_hiding_check_all_label: 'Show All',\n igx_grid_hiding_uncheck_all_label: 'Hide All',\n igx_grid_pinning_check_all_label: 'Pin All',\n igx_grid_pinning_uncheck_all_label: 'Unpin All',\n igx_grid_row_edit_btn_done: 'Done',\n igx_grid_row_edit_btn_cancel: 'Cancel',\n igx_grid_toolbar_actions_filter_prompt: 'Filter columns list ...',\n igx_grid_toolbar_pinning_button_tooltip: 'Open column pinning dropdown',\n igx_grid_toolbar_hiding_button_tooltip: 'Open column hiding dropdown',\n igx_grid_toolbar_pinning_title: 'Pinned columns',\n igx_grid_toolbar_hiding_title: 'Visible columns',\n igx_grid_toolbar_advanced_filtering_button_tooltip: 'Open advanced filtering dialog',\n igx_grid_toolbar_advanced_filtering_button_label: 'Advanced filtering',\n igx_grid_toolbar_exporter_button_tooltip: 'Open exporter dropdown',\n igx_grid_toolbar_exporter_button_label: 'Export',\n igx_grid_toolbar_exporter_excel_entry_text: 'Export to Excel',\n igx_grid_toolbar_exporter_csv_entry_text: 'Export to CSV',\n igx_grid_snackbar_addrow_label: 'Row added',\n igx_grid_snackbar_addrow_actiontext: 'SHOW',\n igx_grid_actions_edit_label: 'Edit',\n igx_grid_actions_add_label: 'Add',\n igx_grid_add_row_label: 'ADD ROW',\n igx_grid_actions_add_child_label: 'Add Child',\n igx_grid_actions_delete_label: 'Delete',\n igx_grid_actions_pin_label: 'Pin',\n igx_grid_actions_unpin_label: 'Unpin',\n igx_grid_actions_jumpUp_label: 'Jump up',\n igx_grid_actions_jumpDown_label: 'Jump down',\n igx_grid_pivot_date_dimension_total: 'All Periods',\n igx_grid_pivot_aggregate_count: 'Count',\n igx_grid_pivot_aggregate_min: 'Minimum',\n igx_grid_pivot_aggregate_max: 'Maximum',\n igx_grid_pivot_aggregate_sum: 'Sum',\n igx_grid_pivot_aggregate_avg: 'Average',\n igx_grid_pivot_aggregate_date_latest: 'Latest Date',\n igx_grid_pivot_aggregate_date_earliest: 'Earliest Date',\n igx_grid_pivot_aggregate_time_latest: 'Latest Time',\n igx_grid_pivot_aggregate_time_earliest: 'Earliest Time',\n igx_grid_pivot_empty_row_drop_area: 'Drop Row Fields here.',\n igx_grid_pivot_empty_column_drop_area: 'Drop Column Fields here.',\n igx_grid_pivot_empty_filter_drop_area: 'Drop Filter Fields here.',\n igx_grid_pivot_empty_value_drop_area: 'Drop Value Fields here.',\n igx_grid_pivot_row_drop_chip: 'Drop here to use as row',\n igx_grid_pivot_column_drop_chip: 'Drop here to use as column',\n igx_grid_pivot_filter_drop_chip: 'Drop here to use as filter',\n igx_grid_pivot_value_drop_chip: 'Drop here to use as value',\n igx_grid_pivot_empty_message: 'Pivot grid has no dimensions and values.',\n igx_grid_pivot_selector_filters: 'Filters',\n igx_grid_pivot_selector_rows: 'Rows',\n igx_grid_pivot_selector_columns: 'Columns',\n igx_grid_pivot_selector_values: 'Values',\n igx_grid_pivot_selector_panel_empty: 'Drop Items Here',\n igx_grid_required_validation_error: 'This field is required',\n igx_grid_min_validation_error: 'A value of at least {0} should be entered',\n igx_grid_max_validation_error: 'A value no more than {0} should be entered',\n igx_grid_min_length_validation_error: 'Entry should be at least {0} character(s) long',\n igx_grid_max_length_validation_error: 'Entry should be no more than {0} character(s) long',\n igx_grid_email_validation_error: 'A valid email address should be entered',\n igx_grid_pattern_validation_error: 'Entry does not match the required pattern',\n igx_grid_pivot_no_aggregator: 'No valid aggregator found for {0}. Please set either a valid aggregatorName or aggregator.'\n};\n\nconst TimePickerResourceStringsEN = {\n igx_time_picker_ok: 'OK',\n igx_time_picker_cancel: 'Cancel',\n igx_time_picker_change_time: 'Change Time',\n igx_time_picker_choose_time: 'Choose Time'\n};\n\nconst PaginatorResourceStringsEN = {\n igx_paginator_label: 'Items per page',\n igx_paginator_pager_text: 'of',\n igx_paginator_first_page_button_text: 'Go to first page',\n igx_paginator_previous_page_button_text: 'Previous page',\n igx_paginator_last_page_button_text: 'Go to last page',\n igx_paginator_next_page_button_text: 'Next page',\n};\n\nconst CarouselResourceStringsEN = {\n igx_carousel_of: 'of',\n igx_carousel_slide: 'slide',\n igx_carousel_previous_slide: 'previous slide',\n igx_carousel_next_slide: 'next slide'\n};\n\nconst ChipResourceStringsEN = {\n igx_chip_remove: 'remove chip',\n igx_chip_select: 'select chip'\n};\n\nconst ListResourceStringsEN = {\n igx_list_no_items: 'There are no items in the list.',\n igx_list_loading: 'Loading data from the server...'\n};\n\nconst CalendarResourceStringsEN = {\n igx_calendar_previous_month: 'Previous Month',\n igx_calendar_next_month: 'Next Month',\n igx_calendar_select_month: 'Select Month',\n igx_calendar_select_year: 'Select Year',\n igx_calendar_range_start: 'Range start',\n igx_calendar_range_end: 'Range end',\n igx_calendar_selected_month_is: 'Selected month is ',\n igx_calendar_first_picker_of: 'First picker of {0} starts from',\n igx_calendar_multi_selection: 'Multi selection calendar with {0} date pickers',\n igx_calendar_range_selection: 'Range selection calendar with {0} date pickers',\n igx_calendar_single_selection: 'Calendar with {0} date pickers',\n igx_calendar_singular_multi_selection: 'Multi selection calendar',\n igx_calendar_singular_range_selection: 'Range selection calendar',\n igx_calendar_singular_single_selection: 'Calendar',\n};\n\nconst InputResourceStringsEN = {\n igx_input_upload_button: 'Upload File',\n igx_input_file_placeholder: 'No file chosen',\n};\n\nconst TreeResourceStringsEN = {\n igx_expand: 'Expand',\n igx_collapse: 'Collapse',\n};\n\nconst ActionStripResourceStringsEN = {\n igx_action_strip_button_more_title: 'More'\n};\n\nconst QueryBuilderResourceStringsEN = {\n igx_query_builder_date_placeholder: 'Pick up date',\n igx_query_builder_time_placeholder: 'Pick up time',\n igx_query_builder_filter_operator_and: 'And',\n igx_query_builder_filter_operator_or: 'Or',\n igx_query_builder_filter_contains: 'Contains',\n igx_query_builder_filter_doesNotContain: 'Does Not Contain',\n igx_query_builder_filter_startsWith: 'Starts With',\n igx_query_builder_filter_endsWith: 'Ends With',\n igx_query_builder_filter_equals: 'Equals',\n igx_query_builder_filter_doesNotEqual: 'Does Not Equal',\n igx_query_builder_filter_empty: 'Empty',\n igx_query_builder_filter_notEmpty: 'Not Empty',\n igx_query_builder_filter_null: 'Null',\n igx_query_builder_filter_notNull: 'Not Null',\n igx_query_builder_filter_before: 'Before',\n igx_query_builder_filter_after: 'After',\n igx_query_builder_filter_at: 'At',\n igx_query_builder_filter_not_at: 'Not At',\n igx_query_builder_filter_at_before: 'At or Before',\n igx_query_builder_filter_at_after: 'At or After',\n igx_query_builder_filter_today: 'Today',\n igx_query_builder_filter_yesterday: 'Yesterday',\n igx_query_builder_filter_thisMonth: 'This Month',\n igx_query_builder_filter_lastMonth: 'Last Month',\n igx_query_builder_filter_nextMonth: 'Next Month',\n igx_query_builder_filter_thisYear: 'This Year',\n igx_query_builder_filter_lastYear: 'Last Year',\n igx_query_builder_filter_nextYear: 'Next Year',\n igx_query_builder_filter_greaterThan: 'Greater Than',\n igx_query_builder_filter_lessThan: 'Less Than',\n igx_query_builder_filter_greaterThanOrEqualTo: 'Greater Than Or Equal To',\n igx_query_builder_filter_lessThanOrEqualTo: 'Less Than Or Equal To',\n igx_query_builder_filter_true: 'True',\n igx_query_builder_filter_false: 'False',\n igx_query_builder_filter_all: 'All',\n igx_query_builder_title: 'Query Builder',\n igx_query_builder_and_group: '\"And\" Group',\n igx_query_builder_or_group: '\"Or\" Group',\n igx_query_builder_end_group: 'End Group',\n igx_query_builder_and_label: 'and',\n igx_query_builder_or_label: 'or',\n igx_query_builder_add_condition: 'Condition',\n igx_query_builder_create_and_group: 'Create \"And\" Group',\n igx_query_builder_create_or_group: 'Create \"Or\" Group',\n igx_query_builder_ungroup: 'Ungroup',\n igx_query_builder_delete: 'Delete',\n igx_query_builder_delete_filters: 'Delete filters',\n igx_query_builder_initial_text: 'Start with creating a group of conditions linked with \"And\" or \"Or\"',\n igx_query_builder_column_placeholder: 'Select column',\n igx_query_builder_condition_placeholder: 'Select filter',\n igx_query_builder_value_placeholder: 'Value',\n};\n\nconst ComboResourceStringsEN = {\n igx_combo_empty_message: 'The list is empty'\n};\n\nconst BannerResourceStringsEN = {\n igx_banner_button_dismiss: 'Dismiss'\n};\n\n/**\n * @hidden\n * IF YOU EDIT THIS OBJECT, DO NOT FORGET TO UPDATE\n * projects/igniteui-angular-i18n as well (create the appropriately named files,\n * containing the new/updated component string keys and EN strings for values + create a separate issue + pending-localization label)\n *\n * TODO Add automation tests:\n * 1) each of the folders/languages under \\projects\\igniteui-angular-i18n\\src\\ contain resources.ts file with matching components count.\n * \\projects\\igniteui-angular-i18n\\src\\BG\\resources.ts contains IgxResourceStringsBG.count matching this.CurrentResourceStrings.count\n * 2) \\igniteui-angular\\projects\\igniteui-angular\\src\\public_api.ts --> Check if the new interface is added\n * to IInputResourceStrings (just a proxy as it is later on imported in the angular-i18n package)\n */\nconst CurrentResourceStrings = {\n GridResStrings: cloneValue(GridResourceStringsEN),\n PaginatorResStrings: cloneValue(PaginatorResourceStringsEN),\n TimePickerResStrings: cloneValue(TimePickerResourceStringsEN),\n CalendarResStrings: cloneValue(CalendarResourceStringsEN),\n ChipResStrings: cloneValue(ChipResourceStringsEN),\n ComboResStrings: cloneValue(ComboResourceStringsEN),\n DatePickerResourceStrings: cloneValue(DatePickerResourceStringsEN),\n DateRangePickerResStrings: cloneValue(DateRangePickerResourceStringsEN),\n CarouselResStrings: cloneValue(CarouselResourceStringsEN),\n ListResStrings: cloneValue(ListResourceStringsEN),\n InputResStrings: cloneValue(InputResourceStringsEN),\n TreeResStrings: cloneValue(TreeResourceStringsEN),\n ActionStripResourceStrings: cloneValue(ActionStripResourceStringsEN),\n QueryBuilderResStrings: cloneValue(QueryBuilderResourceStringsEN),\n BannerResourceStrings: cloneValue(BannerResourceStringsEN)\n};\nconst updateResourceStrings = (currentStrings, newStrings) => {\n for (const key of Object.keys(newStrings)) {\n if (key in currentStrings) {\n currentStrings[key] = newStrings[key];\n }\n }\n};\n/**\n * Changes the resource strings for all components in the application\n * ```\n * @param resourceStrings to be applied\n */\nconst changei18n = (resourceStrings) => {\n for (const key of Object.keys(CurrentResourceStrings)) {\n updateResourceStrings(CurrentResourceStrings[key], resourceStrings);\n }\n};\n/**\n * Returns current resource strings for all components\n */\nconst getCurrentResourceStrings = () => (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, CurrentResourceStrings.CalendarResStrings), CurrentResourceStrings.CarouselResStrings), CurrentResourceStrings.ChipResStrings), CurrentResourceStrings.ComboResStrings), CurrentResourceStrings.DatePickerResourceStrings), CurrentResourceStrings.DateRangePickerResStrings), CurrentResourceStrings.GridResStrings), CurrentResourceStrings.InputResStrings), CurrentResourceStrings.ListResStrings), CurrentResourceStrings.PaginatorResStrings), CurrentResourceStrings.TimePickerResStrings), CurrentResourceStrings.TreeResStrings), CurrentResourceStrings.ActionStripResourceStrings), CurrentResourceStrings.QueryBuilderResStrings), CurrentResourceStrings.BannerResourceStrings));\n\nconst IgxButtonType = mkenum({\n Flat: 'flat',\n Raised: 'raised',\n Outlined: 'outlined',\n Icon: 'icon',\n FAB: 'fab'\n});\n/**\n * The Button directive provides the Ignite UI Button functionality to every component that's intended to be used as a button.\n *\n * @igxModule IgxButtonModule\n *\n * @igxParent Data Entry & Display\n *\n * @igxTheme igx-button-theme\n *\n * @igxKeywords button, span, div, click\n *\n * @remarks\n * The Ignite UI Button directive is intended to be used by any button, span or div and turn it into a fully functional button.\n *\n * @example\n * ```html\n * \n * ```\n */\nclass IgxButtonDirective extends DisplayDensityBase {\n /**\n * Gets or sets whether the button is selected.\n * Mainly used in the IgxButtonGroup component and it will have no effect if set separately.\n *\n * @example\n * ```html\n * \n * ```\n */\n set selected(value) {\n if (this._selected !== value) {\n if (!this._selected) {\n this.buttonSelected.emit({\n button: this\n });\n }\n this._selected = value;\n }\n }\n get selected() {\n return this._selected;\n }\n constructor(element, _renderer, _displayDensityOptions) {\n super(_displayDensityOptions);\n this.element = element;\n this._renderer = _renderer;\n this._displayDensityOptions = _displayDensityOptions;\n /**\n * Called when the button is clicked.\n */\n this.buttonClick = new EventEmitter();\n /**\n * Called when the button is selected.\n */\n this.buttonSelected = new EventEmitter();\n /**\n * Sets/gets the `role` attribute.\n *\n * @example\n * ```typescript\n * this.button.role = 'navbutton';\n * let buttonRole = this.button.role;\n * ```\n */\n this.role = 'button';\n /**\n * @hidden\n * @internal\n */\n this._cssClass = 'igx-button';\n /**\n * @hidden\n * @internal\n */\n this._disabled = false;\n /**\n * @hidden\n * @internal\n */\n this._selected = false;\n }\n /**\n * @hidden\n * @internal\n */\n onClick(ev) {\n this.buttonClick.emit(ev);\n }\n /**\n * Returns the underlying DOM element.\n */\n get nativeElement() {\n return this.element.nativeElement;\n }\n /**\n * Sets the type of the button.\n *\n * @example\n * ```html\n * \n * ```\n */\n set type(type) {\n const t = type ? type : IgxButtonType.Flat;\n if (this._type !== t) {\n this._type = t;\n }\n }\n /**\n * Sets the button text color.\n *\n * @example\n * ```html\n * \n * ```\n */\n set color(value) {\n this._color = value || this.nativeElement.style.color;\n this._renderer.setStyle(this.nativeElement, 'color', this._color);\n }\n /**\n * Sets the background color of the button.\n *\n * @example\n * ```html\n * \n * ```\n */\n set background(value) {\n this._backgroundColor = value || this._backgroundColor;\n this._renderer.setStyle(this.nativeElement, 'background', this._backgroundColor);\n }\n /**\n * Sets the `aria-label` attribute.\n *\n * @example\n * ```html\n * \n * ```\n */\n set label(value) {\n this._label = value || this._label;\n this._renderer.setAttribute(this.nativeElement, 'aria-label', this._label);\n }\n /**\n * Get the disabled state of the button;\n *\n * @example\n * ```typescript\n * const disabled = this.button.disabled;\n * ```\n */\n get disabled() {\n return this._disabled;\n }\n /**\n * Enables/disables the button.\n *\n * @example\n * ```html\n * \n * ```\n */\n set disabled(val) {\n this._disabled = (val === '') || val;\n }\n /**\n * @hidden\n * @internal\n */\n get flat() {\n return this._type === IgxButtonType.Flat;\n }\n /**\n * @hidden\n * @internal\n */\n get raised() {\n return this._type === IgxButtonType.Raised;\n }\n /**\n * @hidden\n * @internal\n */\n get outlined() {\n return this._type === IgxButtonType.Outlined;\n }\n /**\n * @hidden\n * @internal\n */\n get icon() {\n return this._type === IgxButtonType.Icon;\n }\n /**\n * @hidden\n * @internal\n */\n get fab() {\n return this._type === IgxButtonType.FAB;\n }\n /**\n * @hidden\n * @internal\n */\n get cosy() {\n return this.displayDensity === DisplayDensity.cosy;\n }\n /**\n * @hidden\n * @internal\n */\n get compact() {\n return this.displayDensity === DisplayDensity.compact;\n }\n /**\n * @hidden\n * @internal\n */\n get disabledAttribute() {\n return this._disabled ? this._disabled : null;\n }\n /**\n * @hidden\n * @internal\n */\n select() {\n this.selected = true;\n }\n /**\n * @hidden\n * @internal\n */\n deselect() {\n this._selected = false;\n }\n}\nIgxButtonDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxButtonDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nIgxButtonDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: { selected: \"selected\", type: [\"igxButton\", \"type\"], color: [\"igxButtonColor\", \"color\"], background: [\"igxButtonBackground\", \"background\"], label: [\"igxLabel\", \"label\"], disabled: \"disabled\" }, outputs: { buttonClick: \"buttonClick\", buttonSelected: \"buttonSelected\" }, host: { listeners: { \"click\": \"onClick($event)\" }, properties: { \"attr.role\": \"this.role\", \"class.igx-button\": \"this._cssClass\", \"class.igx-button--disabled\": \"this.disabled\", \"class.igx-button--flat\": \"this.flat\", \"class.igx-button--raised\": \"this.raised\", \"class.igx-button--outlined\": \"this.outlined\", \"class.igx-button--icon\": \"this.icon\", \"class.igx-button--fab\": \"this.fab\", \"class.igx-button--cosy\": \"this.cosy\", \"class.igx-button--compact\": \"this.compact\", \"attr.disabled\": \"this.disabledAttribute\" } }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxButtonDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxButton]'\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }];\n }, propDecorators: { buttonClick: [{\n type: Output\n }], buttonSelected: [{\n type: Output\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], _cssClass: [{\n type: HostBinding,\n args: ['class.igx-button']\n }], selected: [{\n type: Input\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], type: [{\n type: Input,\n args: ['igxButton']\n }], color: [{\n type: Input,\n args: ['igxButtonColor']\n }], background: [{\n type: Input,\n args: ['igxButtonBackground']\n }], label: [{\n type: Input,\n args: ['igxLabel']\n }], disabled: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.igx-button--disabled']\n }], flat: [{\n type: HostBinding,\n args: ['class.igx-button--flat']\n }], raised: [{\n type: HostBinding,\n args: ['class.igx-button--raised']\n }], outlined: [{\n type: HostBinding,\n args: ['class.igx-button--outlined']\n }], icon: [{\n type: HostBinding,\n args: ['class.igx-button--icon']\n }], fab: [{\n type: HostBinding,\n args: ['class.igx-button--fab']\n }], cosy: [{\n type: HostBinding,\n args: ['class.igx-button--cosy']\n }], compact: [{\n type: HostBinding,\n args: ['class.igx-button--compact']\n }], disabledAttribute: [{\n type: HostBinding,\n args: ['attr.disabled']\n }] } });\n/**\n *\n * @hidden\n */\nclass IgxButtonModule {\n}\nIgxButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxButtonModule, declarations: [IgxButtonDirective], exports: [IgxButtonDirective] });\nIgxButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxButtonModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxButtonModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxButtonDirective],\n exports: [IgxButtonDirective]\n }]\n }] });\n\nvar IgxHintPosition;\n(function (IgxHintPosition) {\n IgxHintPosition[IgxHintPosition[\"START\"] = 0] = \"START\";\n IgxHintPosition[IgxHintPosition[\"END\"] = 1] = \"END\";\n})(IgxHintPosition || (IgxHintPosition = {}));\nclass IgxHintDirective {\n constructor() {\n /**\n * Sets/gets whether the hint position is at the start.\n * Default value is `false`.\n * ```typescript\n * @ViewChild('hint', {read: IgxHintDirective})\n * public igxHint: IgxHintDirective;\n * this.igxHint.isPositionStart = true;\n * ```\n * ```typescript\n * let isHintPositionStart = this.igxHint.isPositionStart;\n * ```\n *\n * @memberof IgxHintDirective\n */\n this.isPositionStart = false;\n /**\n * Sets/gets whether the hint position is at the end.\n * Default value is `false`.\n * ```typescript\n * @ViewChild('hint', {read: IgxHintDirective})\n * public igxHint: IgxHintDirective;\n * this.igxHint.isPositionEnd = true;\n * ```\n * ```typescript\n * let isHintPositionEnd = this.igxHint.isPositionEnd;\n * ```\n *\n * @memberof IgxHintDirective\n */\n this.isPositionEnd = false;\n this._position = IgxHintPosition.START;\n }\n /**\n * Sets the position of the hint.\n * ```html\n * \n * \n * IgxHint displayed at the start\n * \n * ```\n *\n * @memberof IgxHintDirective\n */\n set position(value) {\n const position = IgxHintPosition[value.toUpperCase()];\n if (position !== undefined) {\n this._position = position;\n this._applyPosition(this._position);\n }\n }\n /**\n * Gets the position of the hint.\n * ```typescript\n * @ViewChild('hint', {read: IgxHintDirective})\n * public igxHint: IgxHintDirective;\n * let hintPosition = this.igxHint.position;\n * ```\n *\n * @memberof IgxHintDirective\n */\n get position() {\n return this._position.toString();\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this._applyPosition(this._position);\n }\n _applyPosition(position) {\n this.isPositionStart = this.isPositionEnd = false;\n switch (position) {\n case IgxHintPosition.START:\n this.isPositionStart = true;\n break;\n case IgxHintPosition.END:\n this.isPositionEnd = true;\n break;\n default: break;\n }\n }\n}\nIgxHintDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHintDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxHintDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxHintDirective, selector: \"igx-hint,[igxHint]\", inputs: { position: \"position\" }, host: { properties: { \"class.igx-input-group__hint-item--start\": \"this.isPositionStart\", \"class.igx-input-group__hint-item--end\": \"this.isPositionEnd\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHintDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-hint,[igxHint]'\n }]\n }], propDecorators: { isPositionStart: [{\n type: HostBinding,\n args: ['class.igx-input-group__hint-item--start']\n }], isPositionEnd: [{\n type: HostBinding,\n args: ['class.igx-input-group__hint-item--end']\n }], position: [{\n type: Input,\n args: ['position']\n }] } });\n\n/** @hidden */\nclass IgxInputGroupBase {\n}\n\nconst nativeValidationAttributes = [\n 'required',\n 'pattern',\n 'minlength',\n 'maxlength',\n 'min',\n 'max',\n 'step',\n];\nvar IgxInputState;\n(function (IgxInputState) {\n IgxInputState[IgxInputState[\"INITIAL\"] = 0] = \"INITIAL\";\n IgxInputState[IgxInputState[\"VALID\"] = 1] = \"VALID\";\n IgxInputState[IgxInputState[\"INVALID\"] = 2] = \"INVALID\";\n})(IgxInputState || (IgxInputState = {}));\n/**\n * The `igxInput` directive creates single- or multiline text elements, covering common scenarios when dealing with form inputs.\n *\n * @igxModule IgxInputGroupModule\n *\n * @igxParent Data Entry & Display\n *\n * @igxTheme igx-input-group-theme\n *\n * @igxKeywords input, input group, form, field, validation\n *\n * @igxGroup presentation\n *\n * @example\n * ```html\n * \n * \n * \n * \n * ```\n */\nclass IgxInputDirective {\n constructor(inputGroup, ngModel, formControl, element, cdr, renderer) {\n this.inputGroup = inputGroup;\n this.ngModel = ngModel;\n this.formControl = formControl;\n this.element = element;\n this.cdr = cdr;\n this.renderer = renderer;\n /**\n * Sets/gets whether the `\"igx-input-group__input\"` class is added to the host element.\n * Default value is `false`.\n *\n * @example\n * ```typescript\n * this.igxInput.isInput = true;\n * ```\n *\n * @example\n * ```typescript\n * let isCLassAdded = this.igxInput.isInput;\n * ```\n */\n this.isInput = false;\n /**\n * Sets/gets whether the `\"class.igx-input-group__textarea\"` class is added to the host element.\n * Default value is `false`.\n *\n * @example\n * ```typescript\n * this.igxInput.isTextArea = true;\n * ```\n *\n * @example\n * ```typescript\n * let isCLassAdded = this.igxInput.isTextArea;\n * ```\n */\n this.isTextArea = false;\n this._valid = IgxInputState.INITIAL;\n this._disabled = false;\n }\n get ngControl() {\n return this.ngModel ? this.ngModel : this.formControl;\n }\n /**\n * Sets the `value` property.\n *\n * @example\n * ```html\n * \n * \n * \n * ```\n */\n set value(value) {\n this.nativeElement.value = value !== null && value !== void 0 ? value : '';\n this.updateValidityState();\n }\n /**\n * Gets the `value` property.\n *\n * @example\n * ```typescript\n * @ViewChild('igxInput', {read: IgxInputDirective})\n * public igxInput: IgxInputDirective;\n * let inputValue = this.igxInput.value;\n * ```\n */\n get value() {\n return this.nativeElement.value;\n }\n /**\n * Sets the `disabled` property.\n *\n * @example\n * ```html\n * \n * \n * \n * ```\n */\n set disabled(value) {\n this._disabled = this.inputGroup.disabled = !!((value === '') || value);\n if (this.focused && this._disabled) {\n // Browser focus may not fire in good time and mess with change detection, adjust here in advance:\n this.inputGroup.isFocused = false;\n }\n }\n /**\n * Gets the `disabled` property\n *\n * @example\n * ```typescript\n * @ViewChild('igxInput', {read: IgxInputDirective})\n * public igxInput: IgxInputDirective;\n * let isDisabled = this.igxInput.disabled;\n * ```\n */\n get disabled() {\n return this._disabled;\n }\n /**\n * Sets the `required` property.\n *\n * @example\n * ```html\n * \n * \n * \n * ```\n */\n set required(value) {\n this.nativeElement.required = this.inputGroup.isRequired = (value === '') || value;\n }\n /**\n * Gets whether the igxInput is required.\n *\n * @example\n * ```typescript\n * let isRequired = this.igxInput.required;\n * ```\n */\n get required() {\n let validation;\n if (this.ngControl && (this.ngControl.control.validator || this.ngControl.control.asyncValidator)) {\n validation = this.ngControl.control.validator({});\n }\n return validation && validation.required || this.nativeElement.hasAttribute('required');\n }\n /**\n * @hidden\n * @internal\n */\n onFocus() {\n this.inputGroup.isFocused = true;\n }\n /**\n * @param event The event to invoke the handler\n *\n * @hidden\n * @internal\n */\n onBlur() {\n this.inputGroup.isFocused = false;\n this.updateValidityState();\n }\n /** @hidden @internal */\n onInput() {\n this.checkNativeValidity();\n }\n /** @hidden @internal */\n change(event) {\n if (this.type === 'file') {\n const fileList = event.target\n .files;\n const fileArray = [];\n if (fileList) {\n for (const file of Array.from(fileList)) {\n fileArray.push(file);\n }\n }\n this._fileNames = (fileArray || []).map((f) => f.name).join(', ');\n if (this.required && (fileList === null || fileList === void 0 ? void 0 : fileList.length) > 0) {\n this._valid = IgxInputState.INITIAL;\n }\n }\n }\n /** @hidden @internal */\n get fileNames() {\n return this._fileNames;\n }\n /** @hidden @internal */\n clear() {\n var _a, _b;\n (_b = (_a = this.ngControl) === null || _a === void 0 ? void 0 : _a.control) === null || _b === void 0 ? void 0 : _b.setValue('');\n this.nativeElement.value = null;\n this._fileNames = '';\n }\n /** @hidden @internal */\n ngAfterViewInit() {\n this.inputGroup.hasPlaceholder = this.nativeElement.hasAttribute('placeholder');\n if (this.ngControl && this.ngControl.disabled !== null) {\n this.disabled = this.ngControl.disabled;\n }\n this.inputGroup.disabled =\n this.inputGroup.disabled ||\n this.nativeElement.hasAttribute('disabled');\n this.inputGroup.isRequired = this.nativeElement.hasAttribute('required');\n // Make sure we do not invalidate the input on init\n if (!this.ngControl) {\n this._valid = IgxInputState.INITIAL;\n }\n // Also check the control's validators for required\n if (this.required && !this.inputGroup.isRequired) {\n this.inputGroup.isRequired = this.required;\n }\n this.renderer.setAttribute(this.nativeElement, 'aria-required', this.required.toString());\n const elTag = this.nativeElement.tagName.toLowerCase();\n if (elTag === 'textarea') {\n this.isTextArea = true;\n }\n else {\n this.isInput = true;\n }\n if (this.ngControl) {\n this._statusChanges$ = this.ngControl.statusChanges.subscribe(this.onStatusChanged.bind(this));\n }\n this.cdr.detectChanges();\n }\n /** @hidden @internal */\n ngOnDestroy() {\n if (this._statusChanges$) {\n this._statusChanges$.unsubscribe();\n }\n }\n /**\n * Sets a focus on the igxInput.\n *\n * @example\n * ```typescript\n * this.igxInput.focus();\n * ```\n */\n focus() {\n this.nativeElement.focus();\n }\n /**\n * Gets the `nativeElement` of the igxInput.\n *\n * @example\n * ```typescript\n * let igxInputNativeElement = this.igxInput.nativeElement;\n * ```\n */\n get nativeElement() {\n return this.element.nativeElement;\n }\n /** @hidden @internal */\n onStatusChanged() {\n // Enable/Disable control based on ngControl #7086\n if (this.disabled !== this.ngControl.disabled) {\n this.disabled = this.ngControl.disabled;\n }\n this.updateValidityState();\n }\n /**\n * @hidden\n * @internal\n */\n updateValidityState() {\n if (this.ngControl) {\n if (this.ngControl.control.validator || this.ngControl.control.asyncValidator) {\n // Run the validation with empty object to check if required is enabled.\n const error = this.ngControl.control.validator({});\n this.inputGroup.isRequired = error && error.required;\n if (!this.disabled && (this.ngControl.control.touched || this.ngControl.control.dirty)) {\n // the control is not disabled and is touched or dirty\n this._valid = this.ngControl.invalid ?\n IgxInputState.INVALID : this.focused ? IgxInputState.VALID :\n IgxInputState.INITIAL;\n }\n else {\n // if control is untouched, pristine, or disabled its state is initial. This is when user did not interact\n // with the input or when form/control is reset\n this._valid = IgxInputState.INITIAL;\n }\n }\n else {\n // If validator is dynamically cleared, reset label's required class(asterisk) and IgxInputState #10010\n this._valid = IgxInputState.INITIAL;\n this.inputGroup.isRequired = false;\n }\n this.renderer.setAttribute(this.nativeElement, 'aria-required', this.required.toString());\n const ariaInvalid = this.valid === IgxInputState.INVALID;\n this.renderer.setAttribute(this.nativeElement, 'aria-invalid', ariaInvalid.toString());\n }\n else {\n this.checkNativeValidity();\n }\n }\n /**\n * Gets whether the igxInput has a placeholder.\n *\n * @example\n * ```typescript\n * let hasPlaceholder = this.igxInput.hasPlaceholder;\n * ```\n */\n get hasPlaceholder() {\n return this.nativeElement.hasAttribute('placeholder');\n }\n /**\n * Gets the placeholder element of the igxInput.\n *\n * @example\n * ```typescript\n * let igxInputPlaceholder = this.igxInput.placeholder;\n * ```\n */\n get placeholder() {\n return this.nativeElement.placeholder;\n }\n /**\n * @returns An indicator of whether the input has validator attributes or not\n *\n * @hidden\n * @internal\n */\n _hasValidators() {\n for (const nativeValidationAttribute of nativeValidationAttributes) {\n if (this.nativeElement.hasAttribute(nativeValidationAttribute)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Gets whether the igxInput is focused.\n *\n * @example\n * ```typescript\n * let isFocused = this.igxInput.focused;\n * ```\n */\n get focused() {\n return this.inputGroup.isFocused;\n }\n /**\n * Gets the state of the igxInput.\n *\n * @example\n * ```typescript\n * let igxInputState = this.igxInput.valid;\n * ```\n */\n get valid() {\n return this._valid;\n }\n /**\n * Sets the state of the igxInput.\n *\n * @example\n * ```typescript\n * this.igxInput.valid = IgxInputState.INVALID;\n * ```\n */\n set valid(value) {\n this._valid = value;\n }\n /**\n * Gets whether the igxInput is valid.\n *\n * @example\n * ```typescript\n * let valid = this.igxInput.isValid;\n * ```\n */\n get isValid() {\n return this.valid !== IgxInputState.INVALID;\n }\n /**\n * A function to assign a native validity property of an input.\n * This should be used when there's no ngControl\n *\n * @hidden\n * @internal\n */\n checkNativeValidity() {\n if (!this.disabled && this._hasValidators()) {\n this._valid = this.nativeElement.checkValidity() ?\n this.focused ? IgxInputState.VALID : IgxInputState.INITIAL :\n IgxInputState.INVALID;\n }\n }\n /**\n * Returns the input type.\n *\n * @hidden\n * @internal\n */\n get type() {\n return this.nativeElement.type;\n }\n}\nIgxInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxInputDirective, deps: [{ token: IgxInputGroupBase }, { token: NgModel, optional: true, self: true }, { token: NgControl, optional: true, self: true }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });\nIgxInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxInputDirective, selector: \"[igxInput]\", inputs: { value: \"value\", disabled: \"disabled\", required: \"required\" }, host: { listeners: { \"focus\": \"onFocus()\", \"blur\": \"onBlur()\", \"input\": \"onInput()\", \"change\": \"change($event)\" }, properties: { \"class.igx-input-group__input\": \"this.isInput\", \"class.igx-input-group__textarea\": \"this.isTextArea\", \"disabled\": \"this.disabled\" } }, exportAs: [\"igxInput\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxInputDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxInput]',\n exportAs: 'igxInput',\n }]\n }], ctorParameters: function () {\n return [{ type: IgxInputGroupBase }, { type: i5.NgModel, decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NgModel]\n }] }, { type: i5.NgControl, decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NgControl]\n }] }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }];\n }, propDecorators: { isInput: [{\n type: HostBinding,\n args: ['class.igx-input-group__input']\n }], isTextArea: [{\n type: HostBinding,\n args: ['class.igx-input-group__textarea']\n }], value: [{\n type: Input\n }], disabled: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['disabled']\n }], required: [{\n type: Input\n }], onFocus: [{\n type: HostListener,\n args: ['focus']\n }], onBlur: [{\n type: HostListener,\n args: ['blur']\n }], onInput: [{\n type: HostListener,\n args: ['input']\n }], change: [{\n type: HostListener,\n args: ['change', ['$event']]\n }] } });\n\nlet NEXT_ID$s = 0;\nclass IgxLabelDirective {\n constructor() {\n this.defaultClass = true;\n /**\n * @hidden\n */\n this.id = `igx-label-${NEXT_ID$s++}`;\n }\n}\nIgxLabelDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxLabelDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxLabelDirective, selector: \"[igxLabel]\", inputs: { id: \"id\" }, host: { properties: { \"class.igx-input-group__label\": \"this.defaultClass\", \"attr.id\": \"this.id\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxLabelDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxLabel]'\n }]\n }], propDecorators: { defaultClass: [{\n type: HostBinding,\n args: ['class.igx-input-group__label']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass IgxPrefixDirective {\n}\nIgxPrefixDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPrefixDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxPrefixDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxPrefixDirective, selector: \"igx-prefix,[igxPrefix],[igxStart]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPrefixDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-prefix,[igxPrefix],[igxStart]'\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxPrefixModule {\n}\nIgxPrefixModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPrefixModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxPrefixModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPrefixModule, declarations: [IgxPrefixDirective], exports: [IgxPrefixDirective] });\nIgxPrefixModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPrefixModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPrefixModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxPrefixDirective],\n exports: [IgxPrefixDirective]\n }]\n }] });\n\n/**\n * @hidden\n */\nclass IgxSuffixDirective {\n}\nIgxSuffixDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSuffixDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxSuffixDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSuffixDirective, selector: \"igx-suffix,[igxSuffix],[igxEnd]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSuffixDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-suffix,[igxSuffix],[igxEnd]'\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxSuffixModule {\n}\nIgxSuffixModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSuffixModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxSuffixModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSuffixModule, declarations: [IgxSuffixDirective], exports: [IgxSuffixDirective] });\nIgxSuffixModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSuffixModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSuffixModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxSuffixDirective],\n exports: [IgxSuffixDirective]\n }]\n }] });\n\n/**\n * **Ignite UI for Angular Icon Service** -\n *\n * The Ignite UI Icon Service makes it easy for developers to include custom SVG images and use them with IgxIconComponent.\n * In addition it could be used to associate a custom class to be applied on IgxIconComponent according to given font-family.\n *\n * Example:\n * ```typescript\n * this.iconService.registerFamilyAlias('material', 'material-icons');\n * this.iconService.addSvgIcon('aruba', '/assets/svg/country_flags/aruba.svg', 'svg-flags');\n * ```\n */\nclass IgxIconService {\n constructor(_sanitizer, _httpClient, _platformUtil, _document) {\n var _a;\n this._sanitizer = _sanitizer;\n this._httpClient = _httpClient;\n this._platformUtil = _platformUtil;\n this._document = _document;\n this._family = 'material-icons';\n this._familyAliases = new Map();\n this._cachedSvgIcons = new Map();\n this._iconLoaded = new Subject();\n this.iconLoaded = this._iconLoaded.asObservable();\n if ((_a = this._platformUtil) === null || _a === void 0 ? void 0 : _a.isBrowser) {\n this._domParser = new DOMParser();\n }\n }\n /**\n * Returns the default font-family.\n * ```typescript\n * const defaultFamily = this.iconService.defaultFamily;\n * ```\n */\n get defaultFamily() {\n return this._family;\n }\n /**\n * Sets the default font-family.\n * ```typescript\n * this.iconService.defaultFamily = 'svg-flags';\n * ```\n */\n set defaultFamily(className) {\n this._family = className;\n }\n /**\n * Registers a custom class to be applied to IgxIconComponent for a given font-family.\n * ```typescript\n * this.iconService.registerFamilyAlias('material', 'material-icons');\n * ```\n */\n registerFamilyAlias(alias, className = alias) {\n this._familyAliases.set(alias, className);\n return this;\n }\n /**\n * Returns the custom class, if any, associated to a given font-family.\n * ```typescript\n * const familyClass = this.iconService.familyClassName('material');\n * ```\n */\n familyClassName(alias) {\n return this._familyAliases.get(alias) || alias;\n }\n /**\n * Adds an SVG image to the cache. SVG source is an url.\n * ```typescript\n * this.iconService.addSvgIcon('aruba', '/assets/svg/country_flags/aruba.svg', 'svg-flags');\n * ```\n */\n addSvgIcon(name, url, family = this._family, stripMeta = false) {\n if (name && url) {\n const safeUrl = this._sanitizer.bypassSecurityTrustResourceUrl(url);\n if (!safeUrl) {\n throw new Error(`The provided URL could not be processed as trusted resource URL by Angular's DomSanitizer: \"${url}\".`);\n }\n const sanitizedUrl = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n if (!sanitizedUrl) {\n throw new Error(`The URL provided was not trusted as a resource URL: \"${url}\".`);\n }\n if (!this.isSvgIconCached(name, family)) {\n this.fetchSvg(url).subscribe((res) => {\n this.cacheSvgIcon(name, res, family, stripMeta);\n this._iconLoaded.next({ name, value: res, family });\n });\n }\n }\n else {\n throw new Error('You should provide at least `name` and `url` to register an svg icon.');\n }\n }\n /**\n * Adds an SVG image to the cache. SVG source is its text.\n * ```typescript\n * this.iconService.addSvgIconFromText('simple', '\n * ', 'svg-flags');\n * ```\n */\n addSvgIconFromText(name, iconText, family = '', stripMeta = false) {\n if (name && iconText) {\n if (this.isSvgIconCached(name, family)) {\n return;\n }\n this.cacheSvgIcon(name, iconText, family, stripMeta);\n }\n else {\n throw new Error('You should provide at least `name` and `iconText` to register an svg icon.');\n }\n }\n /**\n * Returns whether a given SVG image is present in the cache.\n * ```typescript\n * const isSvgCached = this.iconService.isSvgIconCached('aruba', 'svg-flags');\n * ```\n */\n isSvgIconCached(name, family = '') {\n const familyClassName = this.familyClassName(family);\n if (this._cachedSvgIcons.has(familyClassName)) {\n const familyRegistry = this._cachedSvgIcons.get(familyClassName);\n return familyRegistry.has(name);\n }\n return false;\n }\n /**\n * Returns the cached SVG image as string.\n * ```typescript\n * const svgIcon = this.iconService.getSvgIcon('aruba', 'svg-flags');\n * ```\n */\n getSvgIcon(name, family = '') {\n var _a;\n const familyClassName = this.familyClassName(family);\n return (_a = this._cachedSvgIcons.get(familyClassName)) === null || _a === void 0 ? void 0 : _a.get(name);\n }\n /**\n * @hidden\n */\n fetchSvg(url) {\n const req = this._httpClient.get(url, { responseType: 'text' });\n return req;\n }\n /**\n * @hidden\n */\n cacheSvgIcon(name, value, family = this._family, stripMeta) {\n var _a;\n family = !!family ? family : this._family;\n if (((_a = this._platformUtil) === null || _a === void 0 ? void 0 : _a.isBrowser) && name && value) {\n const doc = this._domParser.parseFromString(value, 'image/svg+xml');\n const svg = doc.querySelector('svg');\n if (!this._cachedSvgIcons.has(family)) {\n this._cachedSvgIcons.set(family, new Map());\n }\n if (svg) {\n svg.setAttribute('fit', '');\n svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');\n if (stripMeta) {\n const title = svg.querySelector('title');\n const desc = svg.querySelector('desc');\n if (title) {\n svg.removeChild(title);\n }\n if (desc) {\n svg.removeChild(desc);\n }\n }\n const safeSvg = this._sanitizer.bypassSecurityTrustHtml(svg.outerHTML);\n this._cachedSvgIcons.get(family).set(name, safeSvg);\n }\n }\n }\n}\nIgxIconService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxIconService, deps: [{ token: i1$2.DomSanitizer, optional: true }, { token: i2.HttpClient, optional: true }, { token: PlatformUtil, optional: true }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nIgxIconService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxIconService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxIconService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: function () {\n return [{ type: i1$2.DomSanitizer, decorators: [{\n type: Optional\n }] }, { type: i2.HttpClient, decorators: [{\n type: Optional\n }] }, { type: PlatformUtil, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }];\n } });\n\n/**\n * Icon provides a way to include material icons to markup\n *\n * @igxModule IgxIconModule\n *\n * @igxTheme igx-icon-theme\n *\n * @igxKeywords icon, picture\n *\n * @igxGroup Display\n *\n * @remarks\n *\n * The Ignite UI Icon makes it easy for developers to include material design icons directly in their markup. The icons\n * support different icon families and can be marked as active or disabled using the `active` property. This will change the appearance\n * of the icon.\n *\n * @example\n * ```html\n * home\n * ```\n */\nclass IgxIconComponent {\n constructor(el, iconService, ref) {\n this.el = el;\n this.iconService = iconService;\n this.ref = ref;\n /**\n * This allows you to change the value of `class.igx-icon`. By default it's `igx-icon`.\n *\n * @hidden\n * @internal\n */\n this.cssClass = 'igx-icon';\n /**\n * This allows you to disable the `aria-hidden` attribute. By default it's applied.\n *\n * @example\n * ```typescript\n * @ViewChild(\"MyIcon\") public icon: IgxIconComponent;\n * constructor(private cdRef:ChangeDetectorRef) {}\n * ngAfterViewInit() {\n * this.icon.ariaHidden = false;\n * this.cdRef.detectChanges();\n * }\n * ```\n */\n this.ariaHidden = true;\n /**\n * An @Input property that allows you to disable the `active` property. By default it's applied.\n *\n * @example\n * ```html\n * settings\n * ```\n */\n this.active = true;\n this.destroy$ = new Subject();\n this.family = this.iconService.defaultFamily;\n this.iconService.registerFamilyAlias('material', 'material-icons');\n this.iconService.iconLoaded\n .pipe(first$1((e) => e.name === this.name && e.family === this.family), takeUntil(this.destroy$))\n .subscribe(() => this.ref.detectChanges());\n }\n /**\n * @hidden\n * @internal\n */\n ngOnInit() {\n this.updateIconClass();\n }\n /**\n * @hidden\n * @internal\n */\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n /**\n * An accessor that returns the value of the family property.\n *\n * @example\n * ```typescript\n * @ViewChild(\"MyIcon\")\n * public icon: IgxIconComponent;\n * ngAfterViewInit() {\n * let iconFamily = this.icon.getFamily;\n * }\n * ```\n */\n get getFamily() {\n return this.family;\n }\n /**\n * An accessor that returns the value of the active property.\n *\n * @example\n * ```typescript\n * @ViewChild(\"MyIcon\")\n * public icon: IgxIconComponent;\n * ngAfterViewInit() {\n * let iconActive = this.icon.getActive;\n * }\n * ```\n */\n get getActive() {\n return this.active;\n }\n /**\n * An accessor that returns inactive property.\n *\n * @example\n * ```typescript\n * @ViewChild(\"MyIcon\")\n * public icon: IgxIconComponent;\n * ngAfterViewInit() {\n * let iconActive = this.icon.getInactive;\n * }\n * ```\n */\n get getInactive() {\n return !this.active;\n }\n /**\n * An accessor that returns the value of the iconName property.\n *\n * @example\n * ```typescript\n * @ViewChild(\"MyIcon\")\n * public icon: IgxIconComponent;\n * ngAfterViewInit() {\n * let name = this.icon.getName;\n * }\n * ```\n */\n get getName() {\n return this.name;\n }\n /**\n * An accessor that returns the underlying SVG image as SafeHtml.\n *\n * @example\n * ```typescript\n * @ViewChild(\"MyIcon\")\n * public icon: IgxIconComponent;\n * ngAfterViewInit() {\n * let svg: SafeHtml = this.icon.getSvg;\n * }\n * ```\n */\n get getSvg() {\n if (this.iconService.isSvgIconCached(this.name, this.family)) {\n return this.iconService.getSvgIcon(this.name, this.family);\n }\n return null;\n }\n /**\n * An accessor that returns a TemplateRef to explicit, svg or no ligature.\n *\n * @example\n * ```typescript\n * @ViewChild(\"MyIcon\")\n * public icon: IgxIconComponent;\n * ngAfterViewInit() {\n * let iconTemplate = this.icon.template;\n * }\n * ```\n */\n get template() {\n if (this.name) {\n if (this.iconService.isSvgIconCached(this.name, this.family)) {\n return this.svgImage;\n }\n return this.noLigature;\n }\n return this.explicitLigature;\n }\n /**\n * @hidden\n * @internal\n */\n updateIconClass() {\n const className = this.iconService.familyClassName(this.family);\n this.el.nativeElement.classList.add(className);\n if (this.name && !this.iconService.isSvgIconCached(this.name, this.family)) {\n this.el.nativeElement.classList.add(this.name);\n }\n }\n}\nIgxIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxIconComponent, deps: [{ token: i0.ElementRef }, { token: IgxIconService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxIconComponent, selector: \"igx-icon\", inputs: { family: \"family\", active: \"active\", name: \"name\" }, host: { properties: { \"class.igx-icon\": \"this.cssClass\", \"attr.aria-hidden\": \"this.ariaHidden\", \"class.igx-icon--inactive\": \"this.getInactive\" } }, viewQueries: [{ propertyName: \"noLigature\", first: true, predicate: [\"noLigature\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"explicitLigature\", first: true, predicate: [\"explicitLigature\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"svgImage\", first: true, predicate: [\"svgImage\"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: \"\\n\\n\\n \\n\\n\\n\\n
    \\n
    \\n\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxIconComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-icon', template: \"\\n\\n\\n \\n\\n\\n\\n
    \\n
    \\n\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: IgxIconService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-icon']\n }], ariaHidden: [{\n type: HostBinding,\n args: ['attr.aria-hidden']\n }], family: [{\n type: Input,\n args: ['family']\n }], active: [{\n type: Input,\n args: ['active']\n }], name: [{\n type: Input,\n args: ['name']\n }], noLigature: [{\n type: ViewChild,\n args: ['noLigature', { read: TemplateRef, static: true }]\n }], explicitLigature: [{\n type: ViewChild,\n args: ['explicitLigature', { read: TemplateRef, static: true }]\n }], svgImage: [{\n type: ViewChild,\n args: ['svgImage', { read: TemplateRef, static: true }]\n }], getInactive: [{\n type: HostBinding,\n args: ['class.igx-icon--inactive']\n }] } });\n\n/**\n * @hidden\n */\nclass IgxIconModule {\n}\nIgxIconModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxIconModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxIconModule, declarations: [IgxIconComponent], imports: [CommonModule], exports: [IgxIconComponent] });\nIgxIconModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxIconModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxIconModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxIconComponent],\n exports: [IgxIconComponent],\n imports: [CommonModule]\n }]\n }] });\n\nconst IgxInputGroupEnum = mkenum({\n Line: 'line',\n Box: 'box',\n Border: 'border',\n Search: 'search'\n});\n/**\n * Defines the InputGroupType DI token.\n */\n// Should this go trough Interface https://angular.io/api/core/InjectionToken\nconst IGX_INPUT_GROUP_TYPE = new InjectionToken('InputGroupType');\n\nconst IgxInputGroupTheme = mkenum({\n Material: 'material',\n Fluent: 'fluent',\n Bootstrap: 'bootstrap',\n IndigoDesign: 'indigo-design'\n});\nclass IgxInputGroupComponent extends DisplayDensityBase {\n /**\n * Sets the resource strings.\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /**\n * Returns the resource strings.\n */\n get resourceStrings() {\n return this._resourceStrings;\n }\n /** @hidden */\n get validClass() {\n return this.input.valid === IgxInputState.VALID;\n }\n /** @hidden */\n get invalidClass() {\n return this.input.valid === IgxInputState.INVALID;\n }\n /** @hidden */\n get isFilled() {\n return this._filled || (this.input && this.input.value);\n }\n /** @hidden */\n get isDisplayDensityCosy() {\n return this.displayDensity === DisplayDensity.cosy;\n }\n /** @hidden */\n get isDisplayDensityComfortable() {\n return this.displayDensity === DisplayDensity.comfortable;\n }\n /** @hidden */\n get isDisplayDensityCompact() {\n return this.displayDensity === DisplayDensity.compact;\n }\n /** @hidden */\n get textAreaClass() {\n return this.input.isTextArea;\n }\n /**\n * An @Input property that sets how the input will be styled.\n * Allowed values of type IgxInputGroupType.\n * ```html\n * \n * ```\n */\n set type(value) {\n this._type = value;\n }\n /**\n * Returns the type of the `IgxInputGroupComponent`. How the input is styled.\n * The default is `line`.\n * ```typescript\n * @ViewChild(\"MyInputGroup\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit(){\n * let inputType = this.inputGroup.type;\n * }\n * ```\n */\n get type() {\n return this._type || this._inputGroupType || 'line';\n }\n /**\n * Sets the theme of the input.\n * Allowed values of type IgxInputGroupTheme.\n * ```typescript\n * @ViewChild(\"MyInputGroup\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit() {\n * let inputTheme = 'fluent';\n * }\n */\n set theme(value) {\n this._theme = value;\n }\n /**\n * Returns the theme of the input.\n * The returned value is of type IgxInputGroupType.\n * ```typescript\n * @ViewChild(\"MyInputGroup\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit() {\n * let inputTheme = this.inputGroup.theme;\n * }\n */\n get theme() {\n return this._theme;\n }\n constructor(element, _displayDensityOptions, _inputGroupType, document, platform, cdr) {\n super(_displayDensityOptions);\n this.element = element;\n this._inputGroupType = _inputGroupType;\n this.document = document;\n this.platform = platform;\n this.cdr = cdr;\n /**\n * Property that enables/disables the auto-generated class of the `IgxInputGroupComponent`.\n * By default applied the class is applied.\n * ```typescript\n * @ViewChild(\"MyInputGroup\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit(){\n * this.inputGroup.defaultClass = false;\n * ```\n * }\n */\n this.defaultClass = true;\n /** @hidden */\n this.hasPlaceholder = false;\n /** @hidden */\n this.isRequired = false;\n /** @hidden */\n this.isFocused = false;\n /**\n * @hidden @internal\n * When truthy, disables the `IgxInputGroupComponent`.\n * Controlled by the underlying `IgxInputDirective`.\n * ```html\n * \n * ```\n */\n this.disabled = false;\n /**\n * Prevents automatically focusing the input when clicking on other elements in the input group (e.g. prefix or suffix).\n *\n * @remarks Automatic focus causes software keyboard to show on mobile devices.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.suppressInputAutofocus = false;\n /** @hidden */\n this.hasWarning = false;\n this._type = null;\n this._filled = false;\n this._theme$ = new Subject();\n this._resourceStrings = CurrentResourceStrings.InputResStrings;\n this._subscription = this._theme$.asObservable().subscribe(value => {\n this._theme = value;\n this.cdr.detectChanges();\n });\n }\n /** @hidden */\n onClick(event) {\n if (!this.isFocused &&\n event.target !== this.input.nativeElement &&\n !this.suppressInputAutofocus) {\n this.input.focus();\n }\n }\n /** @hidden */\n onPointerDown(event) {\n if (this.isFocused && event.target !== this.input.nativeElement) {\n event.preventDefault();\n }\n }\n /** @hidden @internal */\n hintClickHandler(event) {\n event.stopPropagation();\n }\n /**\n * Returns whether the `IgxInputGroupComponent` has hints.\n * ```typescript\n * @ViewChild(\"MyInputGroup\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit(){\n * let inputHints = this.inputGroup.hasHints;\n * }\n * ```\n */\n get hasHints() {\n return this.hints.length > 0;\n }\n /** @hidden @internal */\n get hasPrefixes() {\n return this._prefixes.length > 0 || this.isFileType;\n }\n /** @hidden @internal */\n set prefixes(items) {\n this._prefixes = items;\n }\n /** @hidden @internal */\n get hasSuffixes() {\n return this._suffixes.length > 0 || this.isFileType && this.isFilled;\n }\n /** @hidden @internal */\n set suffixes(items) {\n this._suffixes = items;\n }\n /**\n * Returns whether the `IgxInputGroupComponent` has border.\n * ```typescript\n * @ViewChild(\"MyInputGroup\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit(){\n * let inputBorder = this.inputGroup.hasBorder;\n * }\n * ```\n */\n get hasBorder() {\n return ((this.type === 'line' || this.type === 'box') &&\n this._theme === 'material');\n }\n /**\n * Returns whether the `IgxInputGroupComponent` type is line.\n * ```typescript\n * @ViewChild(\"MyInputGroup1\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit(){\n * let isTypeLine = this.inputGroup.isTypeLine;\n * }\n * ```\n */\n get isTypeLine() {\n return this.type === 'line' && this._theme === 'material';\n }\n /**\n * Returns whether the `IgxInputGroupComponent` type is box.\n * ```typescript\n * @ViewChild(\"MyInputGroup1\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit(){\n * let isTypeBox = this.inputGroup.isTypeBox;\n * }\n * ```\n */\n get isTypeBox() {\n return this.type === 'box' && this._theme === 'material';\n }\n /** @hidden @internal */\n uploadButtonHandler() {\n this.input.nativeElement.click();\n }\n /** @hidden @internal */\n clearValueHandler() {\n this.input.clear();\n }\n /** @hidden @internal */\n get isFileType() {\n return this.input.type === 'file';\n }\n /** @hidden @internal */\n get fileNames() {\n return this.input.fileNames || this._resourceStrings.igx_input_file_placeholder;\n }\n /**\n * Returns whether the `IgxInputGroupComponent` type is border.\n * ```typescript\n * @ViewChild(\"MyInputGroup1\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit(){\n * let isTypeBorder = this.inputGroup.isTypeBorder;\n * }\n * ```\n */\n get isTypeBorder() {\n return this.type === 'border' && this._theme === 'material';\n }\n /**\n * Returns true if the `IgxInputGroupComponent` theme is Fluent.\n * ```typescript\n * @ViewChild(\"MyInputGroup1\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit(){\n * let isTypeFluent = this.inputGroup.isTypeFluent;\n * }\n * ```\n */\n get isTypeFluent() {\n return this._theme === 'fluent';\n }\n /**\n * Returns true if the `IgxInputGroupComponent` theme is Bootstrap.\n * ```typescript\n * @ViewChild(\"MyInputGroup1\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit(){\n * let isTypeBootstrap = this.inputGroup.isTypeBootstrap;\n * }\n * ```\n */\n get isTypeBootstrap() {\n return this._theme === 'bootstrap';\n }\n /**\n * Returns true if the `IgxInputGroupComponent` theme is Indigo.\n * ```typescript\n * @ViewChild(\"MyInputGroup1\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit(){\n * let isTypeIndigo = this.inputGroup.isTypeIndigo;\n * }\n * ```\n */\n get isTypeIndigo() {\n return this._theme === 'indigo-design';\n }\n /**\n * Returns whether the `IgxInputGroupComponent` type is search.\n * ```typescript\n * @ViewChild(\"MyInputGroup1\")\n * public inputGroup: IgxInputGroupComponent;\n * ngAfterViewInit(){\n * let isTypeSearch = this.inputGroup.isTypeSearch;\n * }\n * ```\n */\n get isTypeSearch() {\n return this.type === 'search';\n }\n /** @hidden */\n get filled() {\n return this._filled;\n }\n /** @hidden */\n set filled(val) {\n this._filled = val;\n }\n /** @hidden @internal */\n ngAfterViewChecked() {\n if (!this._theme) {\n const cssProp = this.document.defaultView\n .getComputedStyle(this.element.nativeElement)\n .getPropertyValue('--theme')\n .trim();\n if (cssProp !== '') {\n Promise.resolve().then(() => {\n this._theme$.next(cssProp);\n this.cdr.markForCheck();\n });\n }\n }\n }\n /** @hidden @internal */\n ngOnDestroy() {\n this._subscription.unsubscribe();\n }\n}\nIgxInputGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxInputGroupComponent, deps: [{ token: i0.ElementRef }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }, { token: DOCUMENT }, { token: PlatformUtil }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxInputGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxInputGroupComponent, selector: \"igx-input-group\", inputs: { resourceStrings: \"resourceStrings\", suppressInputAutofocus: \"suppressInputAutofocus\", type: \"type\", theme: \"theme\" }, host: { listeners: { \"click\": \"onClick($event)\", \"pointerdown\": \"onPointerDown($event)\" }, properties: { \"class.igx-input-group\": \"this.defaultClass\", \"class.igx-input-group--placeholder\": \"this.hasPlaceholder\", \"class.igx-input-group--required\": \"this.isRequired\", \"class.igx-input-group--focused\": \"this.isFocused\", \"class.igx-input-group--disabled\": \"this.disabled\", \"class.igx-input-group--warning\": \"this.hasWarning\", \"class.igx-input-group--valid\": \"this.validClass\", \"class.igx-input-group--invalid\": \"this.invalidClass\", \"class.igx-input-group--filled\": \"this.isFilled\", \"class.igx-input-group--cosy\": \"this.isDisplayDensityCosy\", \"class.igx-input-group--comfortable\": \"this.isDisplayDensityComfortable\", \"class.igx-input-group--compact\": \"this.isDisplayDensityCompact\", \"class.igx-input-group--textarea-group\": \"this.textAreaClass\", \"class.igx-input-group--prefixed\": \"this.hasPrefixes\", \"class.igx-input-group--suffixed\": \"this.hasSuffixes\", \"class.igx-input-group--box\": \"this.isTypeBox\", \"class.igx-input-group--file\": \"this.isFileType\", \"class.igx-input-group--border\": \"this.isTypeBorder\", \"class.igx-input-group--fluent\": \"this.isTypeFluent\", \"class.igx-input-group--bootstrap\": \"this.isTypeBootstrap\", \"class.igx-input-group--indigo\": \"this.isTypeIndigo\", \"class.igx-input-group--search\": \"this.isTypeSearch\" } }, providers: [{ provide: IgxInputGroupBase, useExisting: IgxInputGroupComponent }], queries: [{ propertyName: \"input\", first: true, predicate: IgxInputDirective, descendants: true, read: IgxInputDirective, static: true }, { propertyName: \"hints\", predicate: IgxHintDirective, read: IgxHintDirective }, { propertyName: \"_prefixes\", predicate: IgxPrefixDirective, descendants: true, read: IgxPrefixDirective }, { propertyName: \"_suffixes\", predicate: IgxSuffixDirective, descendants: true, read: IgxSuffixDirective }], 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 {{ resourceStrings.igx_input_upload_button }}\\n \\n \\n\\n\\n\\n \\n {{ fileNames }}\\n \\n\\n\\n\\n \\n clear\\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
    \\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 \\n \\n \\n \\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1$1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1$1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i1$1.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { kind: \"directive\", type: IgxPrefixDirective, selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"directive\", type: IgxSuffixDirective, selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxInputGroupComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-input-group', providers: [{ provide: IgxInputGroupBase, useExisting: IgxInputGroupComponent }], template: \"
    \\n \\n
    \\n\\n
    \\n \\n
    \\n\\n\\n \\n\\n\\n\\n \\n\\n\\n\\n \\n\\n\\n\\n \\n \\n {{ resourceStrings.igx_input_upload_button }}\\n \\n \\n\\n\\n\\n \\n {{ fileNames }}\\n \\n\\n\\n\\n \\n clear\\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
    \\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 \\n \\n \\n \\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IGX_INPUT_GROUP_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: PlatformUtil }, { type: i0.ChangeDetectorRef }];\n }, propDecorators: { resourceStrings: [{\n type: Input\n }], defaultClass: [{\n type: HostBinding,\n args: ['class.igx-input-group']\n }], hasPlaceholder: [{\n type: HostBinding,\n args: ['class.igx-input-group--placeholder']\n }], isRequired: [{\n type: HostBinding,\n args: ['class.igx-input-group--required']\n }], isFocused: [{\n type: HostBinding,\n args: ['class.igx-input-group--focused']\n }], disabled: [{\n type: HostBinding,\n args: ['class.igx-input-group--disabled']\n }], suppressInputAutofocus: [{\n type: Input\n }], hasWarning: [{\n type: HostBinding,\n args: ['class.igx-input-group--warning']\n }], hints: [{\n type: ContentChildren,\n args: [IgxHintDirective, { read: IgxHintDirective }]\n }], _prefixes: [{\n type: ContentChildren,\n args: [IgxPrefixDirective, { read: IgxPrefixDirective, descendants: true }]\n }], _suffixes: [{\n type: ContentChildren,\n args: [IgxSuffixDirective, { read: IgxSuffixDirective, descendants: true }]\n }], input: [{\n type: ContentChild,\n args: [IgxInputDirective, { read: IgxInputDirective, static: true }]\n }], validClass: [{\n type: HostBinding,\n args: ['class.igx-input-group--valid']\n }], invalidClass: [{\n type: HostBinding,\n args: ['class.igx-input-group--invalid']\n }], isFilled: [{\n type: HostBinding,\n args: ['class.igx-input-group--filled']\n }], isDisplayDensityCosy: [{\n type: HostBinding,\n args: ['class.igx-input-group--cosy']\n }], isDisplayDensityComfortable: [{\n type: HostBinding,\n args: ['class.igx-input-group--comfortable']\n }], isDisplayDensityCompact: [{\n type: HostBinding,\n args: ['class.igx-input-group--compact']\n }], textAreaClass: [{\n type: HostBinding,\n args: ['class.igx-input-group--textarea-group']\n }], type: [{\n type: Input,\n args: ['type']\n }], theme: [{\n type: Input\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], onPointerDown: [{\n type: HostListener,\n args: ['pointerdown', ['$event']]\n }], hasPrefixes: [{\n type: HostBinding,\n args: ['class.igx-input-group--prefixed']\n }], hasSuffixes: [{\n type: HostBinding,\n args: ['class.igx-input-group--suffixed']\n }], isTypeBox: [{\n type: HostBinding,\n args: ['class.igx-input-group--box']\n }], isFileType: [{\n type: HostBinding,\n args: ['class.igx-input-group--file']\n }], isTypeBorder: [{\n type: HostBinding,\n args: ['class.igx-input-group--border']\n }], isTypeFluent: [{\n type: HostBinding,\n args: ['class.igx-input-group--fluent']\n }], isTypeBootstrap: [{\n type: HostBinding,\n args: ['class.igx-input-group--bootstrap']\n }], isTypeIndigo: [{\n type: HostBinding,\n args: ['class.igx-input-group--indigo']\n }], isTypeSearch: [{\n type: HostBinding,\n args: ['class.igx-input-group--search']\n }] } });\n/** @hidden */\nclass IgxInputGroupModule {\n}\nIgxInputGroupModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxInputGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxInputGroupModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxInputGroupModule, declarations: [IgxInputGroupComponent, IgxHintDirective,\n IgxInputDirective,\n IgxLabelDirective], imports: [CommonModule, IgxPrefixModule, IgxSuffixModule, IgxButtonModule, IgxIconModule], exports: [IgxInputGroupComponent, IgxHintDirective,\n IgxInputDirective,\n IgxLabelDirective,\n IgxPrefixModule,\n IgxSuffixModule,\n IgxButtonModule,\n IgxIconModule] });\nIgxInputGroupModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxInputGroupModule, imports: [CommonModule, IgxPrefixModule, IgxSuffixModule, IgxButtonModule, IgxIconModule, IgxPrefixModule,\n IgxSuffixModule,\n IgxButtonModule,\n IgxIconModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxInputGroupModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxInputGroupComponent,\n IgxHintDirective,\n IgxInputDirective,\n IgxLabelDirective,\n ],\n exports: [\n IgxInputGroupComponent,\n IgxHintDirective,\n IgxInputDirective,\n IgxLabelDirective,\n IgxPrefixModule,\n IgxSuffixModule,\n IgxButtonModule,\n IgxIconModule\n ],\n imports: [CommonModule, IgxPrefixModule, IgxSuffixModule, IgxButtonModule, IgxIconModule],\n }]\n }] });\n\n/**\n * **Ignite UI for Angular Autocomplete** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/autocomplete.html)\n *\n * The igxAutocomplete directive provides a way to enhance a text input\n * by showing a drop down of suggested options, provided by the developer.\n *\n * Example:\n * ```html\n * \n * \n * \n * {{town}}\n * \n * \n * ```\n */\nclass IgxAutocompleteDirective extends IgxDropDownItemNavigationDirective {\n /**\n * Sets the target of the autocomplete directive\n *\n * ```html\n * \n * \n * ...\n * \n * ...\n * \n * ```\n */\n get target() {\n return this._target;\n }\n set target(v) {\n this._target = v;\n }\n /** @hidden @internal */\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n /** @hidden @internal */\n get parentElement() {\n return this.group ? this.group.element.nativeElement : this.nativeElement;\n }\n get settings() {\n const settings = Object.assign({}, this.defaultSettings, this.autocompleteSettings);\n const target = settings.target || settings.positionStrategy.settings.target;\n if (!target) {\n const positionStrategyClone = settings.positionStrategy.clone();\n settings.target = this.parentElement;\n settings.positionStrategy = positionStrategyClone;\n }\n return settings;\n }\n /** @hidden @internal */\n get ariaExpanded() {\n return !this.collapsed;\n }\n /** @hidden @internal */\n get hasPopUp() {\n return 'listbox';\n }\n /** @hidden @internal */\n get ariaOwns() {\n return this.target.listId;\n }\n /** @hidden @internal */\n get ariaActiveDescendant() {\n return !this.target.collapsed && this.target.focusedItem ? this.target.focusedItem.id : null;\n }\n /** @hidden @internal */\n get ariaAutocomplete() {\n return 'list';\n }\n get model() {\n return this.ngModel || this.formControl;\n }\n constructor(ngModel, formControl, group, elementRef, cdr) {\n super(null);\n this.ngModel = ngModel;\n this.formControl = formControl;\n this.group = group;\n this.elementRef = elementRef;\n this.cdr = cdr;\n /** @hidden @internal */\n this.autofill = 'off';\n /** @hidden @internal */\n this.role = 'combobox';\n /**\n * Enables/disables autocomplete component\n *\n * ```typescript\n * // get\n * let disabled = this.autocomplete.disabled;\n * ```\n * ```html\n * \n * \n * ```\n * ```typescript\n * // set\n * public disabled = true;\n * ```\n */\n this.disabled = false;\n /**\n * Emitted after item from the drop down is selected\n *\n * ```html\n * \n * ```\n */\n this.selectionChanging = new EventEmitter();\n this._shouldBeOpen = false;\n this.destroy$ = new Subject();\n }\n /** @hidden @internal */\n onInput() {\n this.open();\n }\n /** @hidden @internal */\n onCompositionStart() {\n if (!this._composing) {\n this._composing = true;\n }\n }\n /** @hidden @internal */\n onCompositionEnd() {\n this._composing = false;\n }\n /** @hidden @internal */\n onArrowDown(event) {\n event.preventDefault();\n this.open();\n }\n /** @hidden @internal */\n onTab() {\n this.close();\n }\n /** @hidden @internal */\n handleKeyDown(event) {\n if (!this.collapsed && !this._composing) {\n switch (event.key.toLowerCase()) {\n case 'space':\n case 'spacebar':\n case ' ':\n case 'home':\n case 'end':\n return;\n default:\n super.handleKeyDown(event);\n }\n }\n }\n /** @hidden @internal */\n onArrowDownKeyDown() {\n super.onArrowDownKeyDown();\n }\n /** @hidden @internal */\n onArrowUpKeyDown() {\n super.onArrowUpKeyDown();\n }\n /** @hidden @internal */\n onEndKeyDown() {\n super.onEndKeyDown();\n }\n /** @hidden @internal */\n onHomeKeyDown() {\n super.onHomeKeyDown();\n }\n /**\n * Closes autocomplete drop down\n */\n close() {\n this._shouldBeOpen = false;\n if (this.collapsed) {\n return;\n }\n this.target.close();\n }\n /**\n * Opens autocomplete drop down\n */\n open() {\n this._shouldBeOpen = true;\n if (this.disabled || !this.collapsed || this.target.children.length === 0) {\n return;\n }\n // if no drop-down width is set, the drop-down will be as wide as the autocomplete input;\n this.target.width = this.target.width || (this.parentElement.clientWidth + 'px');\n this.target.open(this.settings);\n this.highlightFirstItem();\n }\n /** @hidden @internal */\n ngOnInit() {\n const targetElement = this.parentElement;\n this.defaultSettings = {\n target: targetElement,\n modal: false,\n scrollStrategy: new AbsoluteScrollStrategy(),\n positionStrategy: new AutoPositionStrategy(),\n excludeFromOutsideClick: [targetElement]\n };\n }\n /** @hidden */\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n ngAfterViewInit() {\n this.target.children.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (this.target.children.length) {\n if (!this.collapsed) {\n this.highlightFirstItem();\n }\n else if (this._shouldBeOpen) {\n this.open();\n }\n }\n else {\n // _shouldBeOpen flag should remain unchanged since this state change doesn't come from outside of the component\n // (like in the case of public API or user interaction).\n this.target.close();\n }\n });\n this.target.selectionChanging.pipe(takeUntil(this.destroy$)).subscribe(this.select.bind(this));\n }\n get collapsed() {\n return this.target ? this.target.collapsed : true;\n }\n select(value) {\n if (!value.newSelection) {\n return;\n }\n value.cancel = true; // Disable selection in the drop down, because in autocomplete we do not save selection.\n const newValue = value.newSelection.value;\n const args = { value: newValue, cancel: false };\n this.selectionChanging.emit(args);\n if (args.cancel) {\n return;\n }\n this.close();\n // Update model after the input is re-focused, in order to have proper valid styling.\n // Otherwise when item is selected using mouse (and input is blurred), then valid style will be removed.\n if (this.model) {\n this.model.control.setValue(newValue);\n }\n else {\n this.nativeElement.value = newValue;\n }\n }\n ;\n highlightFirstItem() {\n if (this.target.focusedItem) {\n this.target.focusedItem.focused = false;\n this.target.focusedItem = null;\n }\n this.target.navigateFirst();\n this.cdr.detectChanges();\n }\n ;\n}\nIgxAutocompleteDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAutocompleteDirective, deps: [{ token: NgModel, optional: true, self: true }, { token: FormControlName, optional: true, self: true }, { token: IgxInputGroupComponent, optional: true }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxAutocompleteDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxAutocompleteDirective, selector: \"[igxAutocomplete]\", inputs: { target: [\"igxAutocomplete\", \"target\"], autocompleteSettings: [\"igxAutocompleteSettings\", \"autocompleteSettings\"], disabled: [\"igxAutocompleteDisabled\", \"disabled\"] }, outputs: { selectionChanging: \"selectionChanging\" }, host: { listeners: { \"input\": \"onInput()\", \"compositionstart\": \"onCompositionStart()\", \"compositionend\": \"onCompositionEnd()\", \"keydown.ArrowDown\": \"onArrowDown($event)\", \"keydown.Alt.ArrowDown\": \"onArrowDown($event)\", \"keydown.ArrowUp\": \"onArrowDown($event)\", \"keydown.Alt.ArrowUp\": \"onArrowDown($event)\", \"keydown.Tab\": \"onTab()\", \"keydown.Shift.Tab\": \"onTab()\" }, properties: { \"attr.autocomplete\": \"this.autofill\", \"attr.role\": \"this.role\", \"attr.aria-expanded\": \"this.ariaExpanded\", \"attr.aria-haspopup\": \"this.hasPopUp\", \"attr.aria-owns\": \"this.ariaOwns\", \"attr.aria-activedescendant\": \"this.ariaActiveDescendant\", \"attr.aria-autocomplete\": \"this.ariaAutocomplete\" } }, exportAs: [\"igxAutocomplete\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAutocompleteDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxAutocomplete]',\n exportAs: 'igxAutocomplete'\n }]\n }], ctorParameters: function () {\n return [{ type: i5.NgModel, decorators: [{\n type: Self\n }, {\n type: Optional\n }, {\n type: Inject,\n args: [NgModel]\n }] }, { type: i5.FormControlName, decorators: [{\n type: Self\n }, {\n type: Optional\n }, {\n type: Inject,\n args: [FormControlName]\n }] }, { type: IgxInputGroupComponent, decorators: [{\n type: Optional\n }] }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }];\n }, propDecorators: { target: [{\n type: Input,\n args: ['igxAutocomplete']\n }], autocompleteSettings: [{\n type: Input,\n args: ['igxAutocompleteSettings']\n }], autofill: [{\n type: HostBinding,\n args: ['attr.autocomplete']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], disabled: [{\n type: Input,\n args: ['igxAutocompleteDisabled']\n }], selectionChanging: [{\n type: Output\n }], ariaExpanded: [{\n type: HostBinding,\n args: ['attr.aria-expanded']\n }], hasPopUp: [{\n type: HostBinding,\n args: ['attr.aria-haspopup']\n }], ariaOwns: [{\n type: HostBinding,\n args: ['attr.aria-owns']\n }], ariaActiveDescendant: [{\n type: HostBinding,\n args: ['attr.aria-activedescendant']\n }], ariaAutocomplete: [{\n type: HostBinding,\n args: ['attr.aria-autocomplete']\n }], onInput: [{\n type: HostListener,\n args: ['input']\n }], onCompositionStart: [{\n type: HostListener,\n args: ['compositionstart']\n }], onCompositionEnd: [{\n type: HostListener,\n args: ['compositionend']\n }], onArrowDown: [{\n type: HostListener,\n args: ['keydown.ArrowDown', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.Alt.ArrowDown', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.ArrowUp', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.Alt.ArrowUp', ['$event']]\n }], onTab: [{\n type: HostListener,\n args: ['keydown.Tab']\n }, {\n type: HostListener,\n args: ['keydown.Shift.Tab']\n }] } });\n/** @hidden */\nclass IgxAutocompleteModule {\n}\nIgxAutocompleteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxAutocompleteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAutocompleteModule, declarations: [IgxAutocompleteDirective], imports: [IgxDropDownModule, CommonModule], exports: [IgxAutocompleteDirective] });\nIgxAutocompleteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAutocompleteModule, imports: [IgxDropDownModule, CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAutocompleteModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [IgxDropDownModule, CommonModule],\n declarations: [IgxAutocompleteDirective],\n exports: [IgxAutocompleteDirective]\n }]\n }] });\n\nconst IgxDividerType = mkenum({\n SOLID: 'solid',\n DASHED: 'dashed'\n});\nlet NEXT_ID$r = 0;\nclass IgxDividerDirective {\n constructor() {\n /**\n * Sets/gets the `id` of the divider.\n * If not set, `id` will have value `\"igx-divider-0\"`;\n * ```html\n * \n * ```\n * ```typescript\n * let dividerId = this.divider.id;\n * ```\n */\n this.id = `igx-divider-${NEXT_ID$r++}`;\n /**\n * An @Input property that sets the value of `role` attribute.\n * If not the default value of `separator` will be used.\n */\n this.role = 'separator';\n /**\n * Sets the type of the divider. The default value\n * is `default`. The divider can also be `dashed`;\n * ```html\n * \n * ```\n */\n this.type = IgxDividerType.SOLID;\n /**\n * An @Input that sets the `middle` attribute of the divider.\n * If set to `true` and an `inset` value has been provided,\n * the divider will start shrinking from both ends.\n * ```html\n * \n * ```\n */\n this.middle = false;\n /**\n * An @Input that sets the vertical attribute of the divider.\n * ```html\n * \n * ```\n */\n this.vertical = false;\n /**\n * An @Input property that sets the value of the `inset` attribute.\n * If not provided it will be set to `'0'`.\n * ```html\n * \n * ```\n */\n this._inset = '0';\n }\n get isDashed() {\n return this.type === IgxDividerType.DASHED;\n }\n /**\n * Sets the inset of the divider from the side(s).\n * If the divider attribute `middle` is set to `true`,\n * it will inset the divider on both sides.\n * ```typescript\n * this.divider.inset = '32px';\n * ```\n */\n set inset(value) {\n this._inset = value;\n }\n /**\n * Gets the current divider inset in terms of\n * margin representation as applied to the divider.\n * ```typescript\n * const inset = this.divider.inset;\n * ```\n */\n get inset() {\n const baseMargin = '0';\n if (this.middle) {\n if (this.vertical) {\n return `${this._inset} ${baseMargin}`;\n }\n return `${baseMargin} ${this._inset}`;\n }\n else {\n if (this.vertical) {\n return `${this._inset} ${baseMargin} 0 ${baseMargin}`;\n }\n return `${baseMargin} 0 ${baseMargin} ${this._inset}`;\n }\n }\n /**\n * A getter that returns `true` if the type of the divider is `default`;\n * ```typescript\n * const isDefault = this.divider.isDefault;\n * ```\n */\n get isSolid() {\n return this.type === IgxDividerType.SOLID;\n }\n}\nIgxDividerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDividerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxDividerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDividerDirective, selector: \"igx-divider\", inputs: { id: \"id\", role: \"role\", type: \"type\", middle: \"middle\", vertical: \"vertical\", _inset: [\"inset\", \"_inset\"] }, host: { properties: { \"attr.id\": \"this.id\", \"attr.role\": \"this.role\", \"class.igx-divider\": \"this.type\", \"class.igx-divider--dashed\": \"this.isDashed\", \"class.igx-divider--inset\": \"this.middle\", \"class.igx-divider--vertical\": \"this.vertical\", \"style.margin\": \"this.inset\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDividerDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'igx-divider'\n }]\n }], propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }, {\n type: Input\n }], type: [{\n type: HostBinding,\n args: ['class.igx-divider']\n }, {\n type: Input\n }], isDashed: [{\n type: HostBinding,\n args: ['class.igx-divider--dashed']\n }], middle: [{\n type: HostBinding,\n args: ['class.igx-divider--inset']\n }, {\n type: Input\n }], vertical: [{\n type: HostBinding,\n args: ['class.igx-divider--vertical']\n }, {\n type: Input\n }], inset: [{\n type: HostBinding,\n args: ['style.margin']\n }], _inset: [{\n type: Input,\n args: ['inset']\n }] } });\nclass IgxDividerModule {\n}\nIgxDividerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDividerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxDividerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDividerModule, declarations: [IgxDividerDirective], exports: [IgxDividerDirective] });\nIgxDividerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDividerModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDividerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxDividerDirective],\n exports: [IgxDividerDirective]\n }]\n }] });\n\n// @dynamic\nclass IgxDefaultDropStrategy {\n dropAction(_drag, _drop, _atIndex) { }\n}\n// @dynamic\nclass IgxAppendDropStrategy {\n constructor(_renderer) {\n this._renderer = _renderer;\n }\n dropAction(drag, drop, _atIndex) {\n const dragElement = drag.element.nativeElement;\n const dropAreaElement = drop.element.nativeElement;\n this._renderer.removeChild(dragElement.parentNode, dragElement);\n this._renderer.appendChild(dropAreaElement, dragElement);\n }\n}\n// @dynamic\nclass IgxPrependDropStrategy {\n constructor(_renderer) {\n this._renderer = _renderer;\n }\n dropAction(drag, drop, _atIndex) {\n const dragElement = drag.element.nativeElement;\n const dropAreaElement = drop.element.nativeElement;\n this._renderer.removeChild(dragElement.parentNode, dragElement);\n if (dropAreaElement.children.length) {\n this._renderer.insertBefore(dropAreaElement, dragElement, dropAreaElement.children[0]);\n }\n else {\n this._renderer.appendChild(dropAreaElement, dragElement);\n }\n }\n}\n// @dynamic\nclass IgxInsertDropStrategy {\n constructor(_renderer) {\n this._renderer = _renderer;\n }\n dropAction(drag, drop, atIndex) {\n if (drag.element.nativeElement.parentElement === drop.element.nativeElement && atIndex === -1) {\n return;\n }\n const dragElement = drag.element.nativeElement;\n const dropAreaElement = drop.element.nativeElement;\n this._renderer.removeChild(dragElement.parentNode, dragElement);\n if (atIndex !== -1 && dropAreaElement.children.length > atIndex) {\n this._renderer.insertBefore(dropAreaElement, dragElement, dropAreaElement.children[atIndex]);\n }\n else {\n this._renderer.appendChild(dropAreaElement, dragElement);\n }\n }\n}\n\nvar DragScrollDirection$1;\n(function (DragScrollDirection) {\n DragScrollDirection[DragScrollDirection[\"UP\"] = 0] = \"UP\";\n DragScrollDirection[DragScrollDirection[\"DOWN\"] = 1] = \"DOWN\";\n DragScrollDirection[DragScrollDirection[\"LEFT\"] = 2] = \"LEFT\";\n DragScrollDirection[DragScrollDirection[\"RIGHT\"] = 3] = \"RIGHT\";\n})(DragScrollDirection$1 || (DragScrollDirection$1 = {}));\nvar DragDirection;\n(function (DragDirection) {\n DragDirection[DragDirection[\"VERTICAL\"] = 0] = \"VERTICAL\";\n DragDirection[DragDirection[\"HORIZONTAL\"] = 1] = \"HORIZONTAL\";\n DragDirection[DragDirection[\"BOTH\"] = 2] = \"BOTH\";\n})(DragDirection || (DragDirection = {}));\nclass IgxDragLocation {\n constructor(_pageX, _pageY) {\n this._pageX = _pageX;\n this._pageY = _pageY;\n this.pageX = parseFloat(_pageX);\n this.pageY = parseFloat(_pageY);\n }\n}\nclass IgxDragHandleDirective {\n constructor(element) {\n this.element = element;\n this.baseClass = true;\n }\n}\nIgxDragHandleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDragHandleDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxDragHandleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDragHandleDirective, selector: \"[igxDragHandle]\", host: { properties: { \"class.igx-drag__handle\": \"this.baseClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDragHandleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxDragHandle]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { baseClass: [{\n type: HostBinding,\n args: ['class.igx-drag__handle']\n }] } });\nclass IgxDragIgnoreDirective {\n constructor(element) {\n this.element = element;\n this.baseClass = true;\n }\n}\nIgxDragIgnoreDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDragIgnoreDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxDragIgnoreDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDragIgnoreDirective, selector: \"[igxDragIgnore]\", host: { properties: { \"class.igx-drag__ignore\": \"this.baseClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDragIgnoreDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxDragIgnore]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { baseClass: [{\n type: HostBinding,\n args: ['class.igx-drag__ignore']\n }] } });\nclass IgxDragDirective {\n /**\n * - Save data inside the `igxDrag` directive. This can be set when instancing `igxDrag` on an element.\n * ```html\n *
    \n * ```\n *\n * @memberof IgxDragDirective\n */\n set data(value) {\n this._data = value;\n }\n get data() {\n return this._data;\n }\n /**\n * Gets the current location of the element relative to the page.\n */\n get location() {\n return new IgxDragLocation(this.pageX, this.pageY);\n }\n /**\n * Gets the original location of the element before dragging started.\n */\n get originLocation() {\n return new IgxDragLocation(this.baseOriginLeft, this.baseOriginTop);\n }\n /**\n * @hidden\n */\n get pointerEventsEnabled() {\n return typeof PointerEvent !== 'undefined';\n }\n /**\n * @hidden\n */\n get touchEventsEnabled() {\n return 'ontouchstart' in window;\n }\n /**\n * @hidden\n */\n get pageX() {\n if (this.ghost && this.ghostElement) {\n return this.ghostLeft;\n }\n return this.baseLeft + this.windowScrollLeft;\n }\n /**\n * @hidden\n */\n get pageY() {\n if (this.ghost && this.ghostElement) {\n return this.ghostTop;\n }\n return this.baseTop + this.windowScrollTop;\n }\n get baseLeft() {\n return this.element.nativeElement.getBoundingClientRect().left;\n }\n get baseTop() {\n return this.element.nativeElement.getBoundingClientRect().top;\n }\n get baseOriginLeft() {\n return this.baseLeft - this.getTransformX(this.element.nativeElement);\n }\n get baseOriginTop() {\n return this.baseTop - this.getTransformY(this.element.nativeElement);\n }\n set ghostLeft(pageX) {\n if (this.ghostElement) {\n // We need to take into account marginLeft, since top style does not include margin, but pageX includes the margin.\n const ghostMarginLeft = parseInt(document.defaultView.getComputedStyle(this.ghostElement)['margin-left'], 10);\n // If ghost host is defined it needs to be taken into account.\n this.ghostElement.style.left = (pageX - ghostMarginLeft - this._ghostHostX) + 'px';\n }\n }\n get ghostLeft() {\n if (this.ghostElement) {\n return parseInt(this.ghostElement.style.left, 10) + this._ghostHostX;\n }\n }\n set ghostTop(pageY) {\n if (this.ghostElement) {\n // We need to take into account marginTop, since top style does not include margin, but pageY includes the margin.\n const ghostMarginTop = parseInt(document.defaultView.getComputedStyle(this.ghostElement)['margin-top'], 10);\n // If ghost host is defined it needs to be taken into account.\n this.ghostElement.style.top = (pageY - ghostMarginTop - this._ghostHostY) + 'px';\n }\n }\n get ghostTop() {\n if (this.ghostElement) {\n return parseInt(this.ghostElement.style.top, 10) + this._ghostHostY;\n }\n }\n get windowScrollTop() {\n return document.documentElement.scrollTop || window.scrollY;\n }\n get windowScrollLeft() {\n return document.documentElement.scrollLeft || window.scrollX;\n }\n get windowScrollHeight() {\n return document.documentElement.scrollHeight;\n }\n get windowScrollWidth() {\n return document.documentElement.scrollWidth;\n }\n /**\n * An @Input property that specifies the offset of the dragged element relative to the mouse in pixels.\n * By default it's taking the relative position to the mouse when the drag started and keeps it the same.\n * ```html\n *
    \n *
    \n * Drag Me!\n *
    \n * ```\n *\n * @memberof IgxDragDirective\n */\n set ghostOffsetX(value) {\n this._offsetX = parseInt(value, 10);\n }\n get ghostOffsetX() {\n return this._offsetX !== undefined ? this._offsetX : this._defaultOffsetX;\n }\n /**\n * An @Input property that specifies the offset of the dragged element relative to the mouse in pixels.\n * By default it's taking the relative position to the mouse when the drag started and keeps it the same.\n * ```html\n *
    \n *
    \n * Drag Me!\n *
    \n * ```\n *\n * @memberof IgxDragDirective\n */\n set ghostOffsetY(value) {\n this._offsetY = parseInt(value, 10);\n }\n get ghostOffsetY() {\n return this._offsetY !== undefined ? this._offsetY : this._defaultOffsetY;\n }\n constructor(cdr, element, viewContainer, zone, renderer, platformUtil) {\n this.cdr = cdr;\n this.element = element;\n this.viewContainer = viewContainer;\n this.zone = zone;\n this.renderer = renderer;\n this.platformUtil = platformUtil;\n /**\n * An @Input property that indicates when the drag should start.\n * By default the drag starts after the draggable element is moved by 5px.\n * ```html\n *
    \n * Drag Me!\n *
    \n * ```\n *\n * @memberof IgxDragDirective\n */\n this.dragTolerance = 5;\n /**\n * An @Input property that indicates the directions that the element can be dragged.\n * By default it is set to both horizontal and vertical directions.\n * ```html\n *
    \n * Drag Me!\n *
    \n * ```\n * ```typescript\n * public dragDir = DragDirection.HORIZONTAL;\n * ```\n *\n * @memberof IgxDragDirective\n */\n this.dragDirection = DragDirection.BOTH;\n /**\n * An @Input property that specifies if the base element should not be moved and a ghost element should be rendered that represents it.\n * By default it is set to `true`.\n * If it is set to `false` when dragging the base element is moved instead and no ghost elements are rendered.\n * ```html\n *
    \n * Drag Me!\n *
    \n * ```\n *\n * @memberof IgxDragDirective\n */\n this.ghost = true;\n /**\n * Sets a custom class that will be added to the `ghostElement` element.\n * ```html\n *
    \n * Drag Me!\n *
    \n * ```\n *\n * @memberof IgxDragDirective\n */\n this.ghostClass = '';\n /**\n * An @Input assigning a scroll container to the dragged element. By default its the window.\n */\n this.scrollContainer = null;\n /**\n * Event triggered when the draggable element drag starts.\n * ```html\n *
    \n * Drag Me!\n *
    \n * ```\n * ```typescript\n * public onDragStart(){\n * alert(\"The drag has stared!\");\n * }\n * ```\n *\n * @memberof IgxDragDirective\n */\n this.dragStart = new EventEmitter();\n /**\n * Event triggered when the draggable element has been moved.\n * ```html\n *
    \n * Drag Me!\n *
    \n * ```\n * ```typescript\n * public onDragMove(){\n * alert(\"The element has moved!\");\n * }\n * ```\n *\n * @memberof IgxDragDirective\n */\n this.dragMove = new EventEmitter();\n /**\n * Event triggered when the draggable element is released.\n * ```html\n *
    \n * Drag Me!\n *
    \n * ```\n * ```typescript\n * public onDragEnd(){\n * alert(\"The drag has ended!\");\n * }\n * ```\n *\n * @memberof IgxDragDirective\n */\n this.dragEnd = new EventEmitter();\n /**\n * Event triggered when the draggable element is clicked.\n * ```html\n *
    \n * Drag Me!\n *
    \n * ```\n * ```typescript\n * public onDragClick(){\n * alert(\"The element has been clicked!\");\n * }\n * ```\n *\n * @memberof IgxDragDirective\n */\n this.dragClick = new EventEmitter();\n /**\n * Event triggered when the drag ghost element is created.\n * ```html\n *
    \n * Drag Me!\n *
    \n * ```\n * ```typescript\n * public ghostCreated(){\n * alert(\"The ghost has been created!\");\n * }\n * ```\n *\n * @memberof IgxDragDirective\n */\n this.ghostCreate = new EventEmitter();\n /**\n * Event triggered when the drag ghost element is created.\n * ```html\n *
    \n * Drag Me!\n *
    \n * ```\n * ```typescript\n * public ghostDestroyed(){\n * alert(\"The ghost has been destroyed!\");\n * }\n * ```\n *\n * @memberof IgxDragDirective\n */\n this.ghostDestroy = new EventEmitter();\n /**\n * Event triggered after the draggable element is released and after its animation has finished.\n * ```html\n *
    \n * Drag Me!\n *
    \n * ```\n * ```typescript\n * public onMoveEnd(){\n * alert(\"The move has ended!\");\n * }\n * ```\n *\n * @memberof IgxDragDirective\n */\n this.transitioned = new EventEmitter();\n /**\n * @hidden\n */\n this.baseClass = true;\n /**\n * @hidden\n */\n this.selectDisabled = false;\n /**\n * @hidden\n */\n this.defaultReturnDuration = '0.5s';\n /**\n * @hidden\n */\n this.animInProgress = false;\n this.ghostContext = null;\n this._startX = 0;\n this._startY = 0;\n this._lastX = 0;\n this._lastY = 0;\n this._dragStarted = false;\n this._ghostHostX = 0;\n this._ghostHostY = 0;\n this._pointerDownId = null;\n this._clicked = false;\n this._lastDropArea = null;\n this._destroy = new Subject();\n this._removeOnDestroy = true;\n this._scrollContainer = null;\n this._originalScrollContainerWidth = 0;\n this._originalScrollContainerHeight = 0;\n this._scrollContainerStep = 5;\n this._scrollContainerStepMs = 10;\n this._scrollContainerThreshold = 25;\n this._containerScrollIntervalId = null;\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n if (!this.dragHandles || !this.dragHandles.length) {\n // Set user select none to the whole draggable element if no drag handles are defined.\n this.selectDisabled = true;\n }\n // Bind events\n this.zone.runOutsideAngular(() => {\n if (!this.platformUtil.isBrowser) {\n return;\n }\n const targetElements = this.dragHandles && this.dragHandles.length ?\n this.dragHandles.map((item) => item.element.nativeElement) : [this.element.nativeElement];\n targetElements.forEach((element) => {\n if (this.pointerEventsEnabled) {\n fromEvent(element, 'pointerdown').pipe(takeUntil(this._destroy))\n .subscribe((res) => this.onPointerDown(res));\n fromEvent(element, 'pointermove').pipe(throttle(() => interval(0, animationFrameScheduler)), takeUntil(this._destroy)).subscribe((res) => this.onPointerMove(res));\n fromEvent(element, 'pointerup').pipe(takeUntil(this._destroy))\n .subscribe((res) => this.onPointerUp(res));\n if (!this.ghost) {\n // Do not bind `lostpointercapture` to the target, because we will bind it on the ghost later.\n fromEvent(element, 'lostpointercapture').pipe(takeUntil(this._destroy))\n .subscribe((res) => this.onPointerLost(res));\n }\n }\n else if (this.touchEventsEnabled) {\n fromEvent(element, 'touchstart').pipe(takeUntil(this._destroy))\n .subscribe((res) => this.onPointerDown(res));\n }\n else {\n // We don't have pointer events and touch events. Use then mouse events.\n fromEvent(element, 'mousedown').pipe(takeUntil(this._destroy))\n .subscribe((res) => this.onPointerDown(res));\n }\n });\n // We should bind to document events only once when there are no pointer events.\n if (!this.pointerEventsEnabled && this.touchEventsEnabled) {\n fromEvent(document.defaultView, 'touchmove').pipe(throttle(() => interval(0, animationFrameScheduler)), takeUntil(this._destroy)).subscribe((res) => this.onPointerMove(res));\n fromEvent(document.defaultView, 'touchend').pipe(takeUntil(this._destroy))\n .subscribe((res) => this.onPointerUp(res));\n }\n else if (!this.pointerEventsEnabled) {\n fromEvent(document.defaultView, 'mousemove').pipe(throttle(() => interval(0, animationFrameScheduler)), takeUntil(this._destroy)).subscribe((res) => this.onPointerMove(res));\n fromEvent(document.defaultView, 'mouseup').pipe(takeUntil(this._destroy))\n .subscribe((res) => this.onPointerUp(res));\n }\n this.element.nativeElement.addEventListener('transitionend', (args) => {\n this.onTransitionEnd(args);\n });\n });\n // Set transition duration to 0s. This also helps with setting `visibility: hidden` to the base to not lag.\n this.element.nativeElement.style.transitionDuration = '0.0s';\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this._destroy.next(true);\n this._destroy.complete();\n if (this.ghost && this.ghostElement && this._removeOnDestroy) {\n this.ghostElement.parentNode.removeChild(this.ghostElement);\n this.ghostElement = null;\n if (this._dynamicGhostRef) {\n this._dynamicGhostRef.destroy();\n this._dynamicGhostRef = null;\n }\n }\n if (this._containerScrollIntervalId) {\n clearInterval(this._containerScrollIntervalId);\n this._containerScrollIntervalId = null;\n }\n }\n /**\n * Sets desired location of the base element or ghost element if rended relative to the document.\n *\n * @param newLocation New location that should be applied. It is advised to get new location using getBoundingClientRects() + scroll.\n */\n setLocation(newLocation) {\n // We do not subtract marginLeft and marginTop here because here we calculate deltas.\n if (this.ghost && this.ghostElement) {\n const offsetHostX = this.ghostHost ? this.ghostHostOffsetLeft(this.ghostHost) : 0;\n const offsetHostY = this.ghostHost ? this.ghostHostOffsetTop(this.ghostHost) : 0;\n this.ghostLeft = newLocation.pageX - offsetHostX + this.windowScrollLeft;\n this.ghostTop = newLocation.pageY - offsetHostY + this.windowScrollTop;\n }\n else if (!this.ghost) {\n const deltaX = newLocation.pageX - this.pageX;\n const deltaY = newLocation.pageY - this.pageY;\n const transformX = this.getTransformX(this.element.nativeElement);\n const transformY = this.getTransformY(this.element.nativeElement);\n this.setTransformXY(transformX + deltaX, transformY + deltaY);\n }\n this._startX = this.baseLeft;\n this._startY = this.baseTop;\n }\n /**\n * Animates the base or ghost element depending on the `ghost` input to its initial location.\n * If `ghost` is true but there is not ghost rendered, it will be created and animated.\n * If the base element has changed its DOM position its initial location will be changed accordingly.\n *\n * @param customAnimArgs Custom transition properties that will be applied when performing the transition.\n * @param startLocation Start location from where the transition should start.\n */\n transitionToOrigin(customAnimArgs, startLocation) {\n if ((!!startLocation && startLocation.pageX === this.baseOriginLeft && startLocation.pageY === this.baseOriginLeft) ||\n (!startLocation && this.ghost && !this.ghostElement)) {\n return;\n }\n if (!!startLocation && startLocation.pageX !== this.pageX && startLocation.pageY !== this.pageY) {\n if (this.ghost && !this.ghostElement) {\n this._startX = startLocation.pageX;\n this._startY = startLocation.pageY;\n this._ghostStartX = this._startX;\n this._ghostStartY = this._startY;\n this.createGhost(this._startX, this._startY);\n }\n this.setLocation(startLocation);\n }\n this.animInProgress = true;\n // Use setTimeout because we need to be sure that the element is positioned first correctly if there is start location.\n setTimeout(() => {\n if (this.ghost) {\n this.ghostElement.style.transitionProperty = 'top, left';\n this.ghostElement.style.transitionDuration =\n customAnimArgs && customAnimArgs.duration ? customAnimArgs.duration + 's' : this.defaultReturnDuration;\n this.ghostElement.style.transitionTimingFunction =\n customAnimArgs && customAnimArgs.timingFunction ? customAnimArgs.timingFunction : '';\n this.ghostElement.style.transitionDelay = customAnimArgs && customAnimArgs.delay ? customAnimArgs.delay + 's' : '';\n this.setLocation(new IgxDragLocation(this.baseLeft, this.baseTop));\n }\n else if (!this.ghost) {\n this.element.nativeElement.style.transitionProperty = 'transform';\n this.element.nativeElement.style.transitionDuration =\n customAnimArgs && customAnimArgs.duration ? customAnimArgs.duration + 's' : this.defaultReturnDuration;\n this.element.nativeElement.style.transitionTimingFunction =\n customAnimArgs && customAnimArgs.timingFunction ? customAnimArgs.timingFunction : '';\n this.element.nativeElement.style.transitionDelay = customAnimArgs && customAnimArgs.delay ? customAnimArgs.delay + 's' : '';\n this._startX = this.baseLeft;\n this._startY = this.baseTop;\n this.setTransformXY(0, 0);\n }\n }, 0);\n }\n /**\n * Animates the base or ghost element to a specific target location or other element using transition.\n * If `ghost` is true but there is not ghost rendered, it will be created and animated.\n * It is recommended to use 'getBoundingClientRects() + pageScroll' when determining desired location.\n *\n * @param target Target that the base or ghost will transition to. It can be either location in the page or another HTML element.\n * @param customAnimArgs Custom transition properties that will be applied when performing the transition.\n * @param startLocation Start location from where the transition should start.\n */\n transitionTo(target, customAnimArgs, startLocation) {\n if (!!startLocation && this.ghost && !this.ghostElement) {\n this._startX = startLocation.pageX;\n this._startY = startLocation.pageY;\n this._ghostStartX = this._startX;\n this._ghostStartY = this._startY;\n }\n else if (!!startLocation && (!this.ghost || this.ghostElement)) {\n this.setLocation(startLocation);\n }\n else if (this.ghost && !this.ghostElement) {\n this._startX = this.baseLeft;\n this._startY = this.baseTop;\n this._ghostStartX = this._startX + this.windowScrollLeft;\n this._ghostStartY = this._startY + this.windowScrollTop;\n }\n if (this.ghost && !this.ghostElement) {\n this.createGhost(this._startX, this._startY);\n }\n this.animInProgress = true;\n // Use setTimeout because we need to be sure that the element is positioned first correctly if there is start location.\n setTimeout(() => {\n const movedElem = this.ghost ? this.ghostElement : this.element.nativeElement;\n movedElem.style.transitionProperty = this.ghost && this.ghostElement ? 'left, top' : 'transform';\n movedElem.style.transitionDuration =\n customAnimArgs && customAnimArgs.duration ? customAnimArgs.duration + 's' : this.defaultReturnDuration;\n movedElem.style.transitionTimingFunction =\n customAnimArgs && customAnimArgs.timingFunction ? customAnimArgs.timingFunction : '';\n movedElem.style.transitionDelay = customAnimArgs && customAnimArgs.delay ? customAnimArgs.delay + 's' : '';\n if (target instanceof IgxDragLocation) {\n this.setLocation(new IgxDragLocation(target.pageX, target.pageY));\n }\n else {\n const targetRects = target.nativeElement.getBoundingClientRect();\n this.setLocation(new IgxDragLocation(targetRects.left - this.windowScrollLeft, targetRects.top - this.windowScrollTop));\n }\n }, 0);\n }\n /**\n * @hidden\n * Method bound to the PointerDown event of the base element igxDrag is initialized.\n * @param event PointerDown event captured\n */\n onPointerDown(event) {\n const ignoredElement = this.dragIgnoredElems.find(elem => elem.element.nativeElement === event.target);\n if (ignoredElement) {\n return;\n }\n this._clicked = true;\n this._pointerDownId = event.pointerId;\n // Set pointer capture so we detect pointermove even if mouse is out of bounds until ghostElement is created.\n const handleFound = this.dragHandles.find(handle => handle.element.nativeElement === event.currentTarget);\n const targetElement = handleFound ? handleFound.element.nativeElement : this.element.nativeElement;\n if (this.pointerEventsEnabled) {\n targetElement.setPointerCapture(this._pointerDownId);\n }\n else {\n targetElement.focus();\n event.preventDefault();\n }\n if (this.pointerEventsEnabled || !this.touchEventsEnabled) {\n // Check first for pointer events or non touch, because we can have pointer events and touch events at once.\n this._startX = event.pageX;\n this._startY = event.pageY;\n }\n else if (this.touchEventsEnabled) {\n this._startX = event.touches[0].pageX;\n this._startY = event.touches[0].pageY;\n }\n this._defaultOffsetX = this.baseLeft - this._startX + this.windowScrollLeft;\n this._defaultOffsetY = this.baseTop - this._startY + this.windowScrollTop;\n this._ghostStartX = this._startX + this.ghostOffsetX;\n this._ghostStartY = this._startY + this.ghostOffsetY;\n this._lastX = this._startX;\n this._lastY = this._startY;\n }\n /**\n * @hidden\n * Perform drag move logic when dragging and dispatching events if there is igxDrop under the pointer.\n * This method is bound at first at the base element.\n * If dragging starts and after the ghostElement is rendered the pointerId is reassigned it. Then this method is bound to it.\n * @param event PointerMove event captured\n */\n onPointerMove(event) {\n if (this._clicked) {\n let pageX;\n let pageY;\n if (this.pointerEventsEnabled || !this.touchEventsEnabled) {\n // Check first for pointer events or non touch, because we can have pointer events and touch events at once.\n pageX = event.pageX;\n pageY = event.pageY;\n }\n else if (this.touchEventsEnabled) {\n pageX = event.touches[0].pageX;\n pageY = event.touches[0].pageY;\n // Prevent scrolling on touch while dragging\n event.preventDefault();\n }\n const totalMovedX = pageX - this._startX;\n const totalMovedY = pageY - this._startY;\n if (!this._dragStarted &&\n (Math.abs(totalMovedX) > this.dragTolerance || Math.abs(totalMovedY) > this.dragTolerance)) {\n const dragStartArgs = {\n originalEvent: event,\n owner: this,\n startX: pageX - totalMovedX,\n startY: pageY - totalMovedY,\n pageX,\n pageY,\n cancel: false\n };\n this.zone.run(() => {\n this.dragStart.emit(dragStartArgs);\n });\n if (!dragStartArgs.cancel) {\n this._dragStarted = true;\n if (this.ghost) {\n // We moved enough so ghostElement can be rendered and actual dragging to start.\n // When creating it will take into account any offset set by the user by default.\n this.createGhost(pageX, pageY);\n }\n else if (this._offsetX !== undefined || this._offsetY !== undefined) {\n // There is no need for ghost, but we will need to position initially the base element to reflect any offset.\n const transformX = (this._offsetX !== undefined ? this._offsetX - this._defaultOffsetX : 0) +\n this.getTransformX(this.element.nativeElement);\n const transformY = (this._offsetY !== undefined ? this._offsetY - this._defaultOffsetY : 0) +\n this.getTransformY(this.element.nativeElement);\n this.setTransformXY(transformX, transformY);\n }\n }\n else {\n return;\n }\n }\n else if (!this._dragStarted) {\n return;\n }\n const moveArgs = {\n originalEvent: event,\n owner: this,\n startX: this._startX,\n startY: this._startY,\n pageX: this._lastX,\n pageY: this._lastY,\n nextPageX: pageX,\n nextPageY: pageY,\n cancel: false\n };\n this.dragMove.emit(moveArgs);\n const setPageX = moveArgs.nextPageX;\n const setPageY = moveArgs.nextPageY;\n if (!moveArgs.cancel) {\n // Scroll root container if the user reaches its boundaries.\n this.onScrollContainer();\n // Move the actual element around\n if (this.ghost) {\n const updatedTotalMovedX = this.dragDirection === DragDirection.VERTICAL ? 0 : setPageX - this._startX;\n const updatedTotalMovedY = this.dragDirection === DragDirection.HORIZONTAL ? 0 : setPageY - this._startY;\n this.ghostLeft = this._ghostStartX + updatedTotalMovedX;\n this.ghostTop = this._ghostStartY + updatedTotalMovedY;\n }\n else {\n const lastMovedX = this.dragDirection === DragDirection.VERTICAL ? 0 : setPageX - this._lastX;\n const lastMovedY = this.dragDirection === DragDirection.HORIZONTAL ? 0 : setPageY - this._lastY;\n const translateX = this.getTransformX(this.element.nativeElement) + lastMovedX;\n const translateY = this.getTransformY(this.element.nativeElement) + lastMovedY;\n this.setTransformXY(translateX, translateY);\n }\n this.dispatchDragEvents(pageX, pageY, event);\n }\n this._lastX = setPageX;\n this._lastY = setPageY;\n }\n }\n /**\n * @hidden\n * Perform drag end logic when releasing the ghostElement and dispatching drop event if igxDrop is under the pointer.\n * This method is bound at first at the base element.\n * If dragging starts and after the ghostElement is rendered the pointerId is reassigned to it. Then this method is bound to it.\n * @param event PointerUp event captured\n */\n onPointerUp(event) {\n if (!this._clicked) {\n return;\n }\n let pageX;\n let pageY;\n if (this.pointerEventsEnabled || !this.touchEventsEnabled) {\n // Check first for pointer events or non touch, because we can have pointer events and touch events at once.\n pageX = event.pageX;\n pageY = event.pageY;\n }\n else if (this.touchEventsEnabled) {\n pageX = event.touches[0].pageX;\n pageY = event.touches[0].pageY;\n // Prevent scrolling on touch while dragging\n event.preventDefault();\n }\n const eventArgs = {\n originalEvent: event,\n owner: this,\n startX: this._startX,\n startY: this._startY,\n pageX,\n pageY\n };\n this._pointerDownId = null;\n this._clicked = false;\n if (this._dragStarted) {\n if (this._lastDropArea && this._lastDropArea !== this.element.nativeElement) {\n this.dispatchDropEvent(event.pageX, event.pageY, event);\n }\n this.zone.run(() => {\n this.dragEnd.emit(eventArgs);\n });\n if (!this.animInProgress) {\n this.onTransitionEnd(null);\n }\n }\n else {\n // Trigger our own click event because when there is no ghost, native click cannot be prevented when dragging.\n this.zone.run(() => {\n this.dragClick.emit(eventArgs);\n });\n }\n if (this._containerScrollIntervalId) {\n clearInterval(this._containerScrollIntervalId);\n this._containerScrollIntervalId = null;\n }\n }\n /**\n * @hidden\n * Execute this method whe the pointer capture has been lost.\n * This means that during dragging the user has performed other action like right clicking and then clicking somewhere else.\n * This method will ensure that the drag state is being reset in this case as if the user released the dragged element.\n * @param event Event captured\n */\n onPointerLost(event) {\n if (!this._clicked) {\n return;\n }\n const eventArgs = {\n originalEvent: event,\n owner: this,\n startX: this._startX,\n startY: this._startY,\n pageX: event.pageX,\n pageY: event.pageY\n };\n this._pointerDownId = null;\n this._clicked = false;\n if (this._dragStarted) {\n this.zone.run(() => {\n this.dragEnd.emit(eventArgs);\n });\n if (!this.animInProgress) {\n this.onTransitionEnd(null);\n }\n }\n }\n /**\n * @hidden\n */\n onTransitionEnd(event) {\n if ((!this._dragStarted && !this.animInProgress) || this._clicked) {\n // Return if no dragging started and there is no animation in progress.\n return;\n }\n if (this.ghost && this.ghostElement) {\n this._ghostStartX = this.baseLeft + this.windowScrollLeft;\n this._ghostStartY = this.baseTop + this.windowScrollTop;\n const ghostDestroyArgs = {\n owner: this,\n ghostElement: this.ghostElement,\n cancel: false\n };\n this.ghostDestroy.emit(ghostDestroyArgs);\n if (ghostDestroyArgs.cancel) {\n return;\n }\n this.ghostElement.remove();\n this.ghostElement = null;\n if (this._dynamicGhostRef) {\n this._dynamicGhostRef.destroy();\n this._dynamicGhostRef = null;\n }\n }\n else if (!this.ghost) {\n this.element.nativeElement.style.transitionProperty = '';\n this.element.nativeElement.style.transitionDuration = '0.0s';\n this.element.nativeElement.style.transitionTimingFunction = '';\n this.element.nativeElement.style.transitionDelay = '';\n }\n this.animInProgress = false;\n this._dragStarted = false;\n // Execute transitioned after everything is reset so if the user sets new location on the base now it would work as expected.\n this.zone.run(() => {\n this.transitioned.emit({\n originalEvent: event,\n owner: this,\n startX: this._startX,\n startY: this._startY,\n pageX: this._startX,\n pageY: this._startY\n });\n });\n }\n /**\n * @hidden\n * Create ghost element - if a Node object is provided it creates a clone of that node,\n * otherwise it clones the host element.\n * Bind all needed events.\n * @param pageX Latest pointer position on the X axis relative to the page.\n * @param pageY Latest pointer position on the Y axis relative to the page.\n * @param node The Node object to be cloned.\n */\n createGhost(pageX, pageY, node = null) {\n if (!this.ghost) {\n return;\n }\n if (this.ghostTemplate) {\n this._dynamicGhostRef = this.viewContainer.createEmbeddedView(this.ghostTemplate, this.ghostContext);\n this.ghostElement = this._dynamicGhostRef.rootNodes[0];\n }\n else {\n this.ghostElement = node ? node.cloneNode(true) : this.element.nativeElement.cloneNode(true);\n }\n const totalMovedX = pageX - this._startX;\n const totalMovedY = pageY - this._startY;\n this._ghostHostX = this.ghostHost ? this.ghostHostOffsetLeft(this.ghostHost) : 0;\n this._ghostHostY = this.ghostHost ? this.ghostHostOffsetTop(this.ghostHost) : 0;\n this.ghostElement.style.transitionDuration = '0.0s';\n this.ghostElement.style.position = 'absolute';\n if (this.ghostClass) {\n this.renderer.addClass(this.ghostElement, this.ghostClass);\n }\n const createEventArgs = {\n owner: this,\n ghostElement: this.ghostElement,\n cancel: false\n };\n this.ghostCreate.emit(createEventArgs);\n if (createEventArgs.cancel) {\n this.ghostElement = null;\n if (this.ghostTemplate && this._dynamicGhostRef) {\n this._dynamicGhostRef.destroy();\n }\n return;\n }\n if (this.ghostHost) {\n this.ghostHost.appendChild(this.ghostElement);\n }\n else {\n document.body.appendChild(this.ghostElement);\n }\n const ghostMarginLeft = parseInt(document.defaultView.getComputedStyle(this.ghostElement)['margin-left'], 10);\n const ghostMarginTop = parseInt(document.defaultView.getComputedStyle(this.ghostElement)['margin-top'], 10);\n this.ghostElement.style.left = (this._ghostStartX - ghostMarginLeft + totalMovedX - this._ghostHostX) + 'px';\n this.ghostElement.style.top = (this._ghostStartY - ghostMarginTop + totalMovedY - this._ghostHostY) + 'px';\n if (this.pointerEventsEnabled) {\n // The ghostElement takes control for moving and dragging after it has been rendered.\n if (this._pointerDownId !== null) {\n this.ghostElement.setPointerCapture(this._pointerDownId);\n }\n this.ghostElement.addEventListener('pointermove', (args) => {\n this.onPointerMove(args);\n });\n this.ghostElement.addEventListener('pointerup', (args) => {\n this.onPointerUp(args);\n });\n this.ghostElement.addEventListener('lostpointercapture', (args) => {\n this.onPointerLost(args);\n });\n }\n // Transition animation when the ghostElement is released and it returns to it's original position.\n this.ghostElement.addEventListener('transitionend', (args) => {\n this.onTransitionEnd(args);\n });\n this.cdr.detectChanges();\n }\n /**\n * @hidden\n * Dispatch custom igxDragEnter/igxDragLeave events based on current pointer position and if drop area is under.\n */\n dispatchDragEvents(pageX, pageY, originalEvent) {\n let topDropArea;\n const customEventArgs = {\n startX: this._startX,\n startY: this._startY,\n pageX,\n pageY,\n owner: this,\n originalEvent\n };\n const elementsFromPoint = this.getElementsAtPoint(pageX, pageY);\n let targetElements = [];\n // Check for shadowRoot instance and use it if present\n for (const elFromPoint of elementsFromPoint) {\n if (!!(elFromPoint === null || elFromPoint === void 0 ? void 0 : elFromPoint.shadowRoot)) {\n targetElements = targetElements.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY, elementsFromPoint));\n }\n else if (targetElements.indexOf(elFromPoint) === -1) {\n targetElements.push(elFromPoint);\n }\n }\n for (const element of targetElements) {\n if (element.getAttribute('droppable') === 'true' &&\n element !== this.ghostElement && element !== this.element.nativeElement) {\n topDropArea = element;\n break;\n }\n }\n if (topDropArea &&\n (!this._lastDropArea || (this._lastDropArea && this._lastDropArea !== topDropArea))) {\n if (this._lastDropArea) {\n this.dispatchEvent(this._lastDropArea, 'igxDragLeave', customEventArgs);\n }\n this._lastDropArea = topDropArea;\n this.dispatchEvent(this._lastDropArea, 'igxDragEnter', customEventArgs);\n }\n else if (!topDropArea && this._lastDropArea) {\n this.dispatchEvent(this._lastDropArea, 'igxDragLeave', customEventArgs);\n this._lastDropArea = null;\n return;\n }\n if (topDropArea) {\n this.dispatchEvent(topDropArea, 'igxDragOver', customEventArgs);\n }\n }\n /**\n * @hidden\n * Traverse shadow dom in depth.\n */\n getFromShadowRoot(elem, pageX, pageY, parentDomElems) {\n const elementsFromPoint = elem.shadowRoot.elementsFromPoint(pageX, pageY);\n const shadowElements = elementsFromPoint.filter(cur => parentDomElems.indexOf(cur) === -1);\n let res = [];\n for (const elFromPoint of shadowElements) {\n if (!!(elFromPoint === null || elFromPoint === void 0 ? void 0 : elFromPoint.shadowRoot) && elFromPoint.shadowRoot !== elem.shadowRoot) {\n res = res.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY, elementsFromPoint));\n }\n res.push(elFromPoint);\n }\n return res;\n }\n /**\n * @hidden\n * Dispatch custom igxDrop event based on current pointer position if there is last recorder drop area under the pointer.\n * Last recorder drop area is updated in @dispatchDragEvents method.\n */\n dispatchDropEvent(pageX, pageY, originalEvent) {\n const eventArgs = {\n startX: this._startX,\n startY: this._startY,\n pageX,\n pageY,\n owner: this,\n originalEvent\n };\n this.dispatchEvent(this._lastDropArea, 'igxDrop', eventArgs);\n this.dispatchEvent(this._lastDropArea, 'igxDragLeave', eventArgs);\n this._lastDropArea = null;\n }\n /**\n * @hidden\n */\n getElementsAtPoint(pageX, pageY) {\n // correct the coordinates with the current scroll position, because\n // document.elementsFromPoint consider position within the current viewport\n // window.pageXOffset == window.scrollX; // always true\n // using window.pageXOffset for IE9 compatibility\n const viewPortX = pageX - window.pageXOffset;\n const viewPortY = pageY - window.pageYOffset;\n if (document['msElementsFromPoint']) {\n // Edge and IE special snowflakes\n const elements = document['msElementsFromPoint'](viewPortX, viewPortY);\n return elements === null ? [] : elements;\n }\n else {\n // Other browsers like Chrome, Firefox, Opera\n return document.elementsFromPoint(viewPortX, viewPortY);\n }\n }\n /**\n * @hidden\n */\n dispatchEvent(target, eventName, eventArgs) {\n // This way is IE11 compatible.\n const dragLeaveEvent = document.createEvent('CustomEvent');\n dragLeaveEvent.initCustomEvent(eventName, false, false, eventArgs);\n target.dispatchEvent(dragLeaveEvent);\n // Otherwise can be used `target.dispatchEvent(new CustomEvent(eventName, eventArgs));`\n }\n getTransformX(elem) {\n let posX = 0;\n if (elem.style.transform) {\n const matrix = elem.style.transform;\n const values = matrix ? matrix.match(/-?[\\d\\.]+/g) : undefined;\n posX = values ? Number(values[1]) : 0;\n }\n return posX;\n }\n getTransformY(elem) {\n let posY = 0;\n if (elem.style.transform) {\n const matrix = elem.style.transform;\n const values = matrix ? matrix.match(/-?[\\d\\.]+/g) : undefined;\n posY = values ? Number(values[2]) : 0;\n }\n return posY;\n }\n /** Method setting transformation to the base draggable element. */\n setTransformXY(x, y) {\n this.element.nativeElement.style.transform = 'translate3d(' + x + 'px, ' + y + 'px, 0px)';\n }\n ghostHostOffsetLeft(ghostHost) {\n const ghostPosition = document.defaultView.getComputedStyle(ghostHost).getPropertyValue('position');\n if (ghostPosition === 'static' && ghostHost.offsetParent && ghostHost.offsetParent === document.body) {\n return 0;\n }\n else if (ghostPosition === 'static' && ghostHost.offsetParent) {\n return ghostHost.offsetParent.getBoundingClientRect().left - this.windowScrollLeft;\n }\n return ghostHost.getBoundingClientRect().left - this.windowScrollLeft;\n }\n ghostHostOffsetTop(ghostHost) {\n const ghostPosition = document.defaultView.getComputedStyle(ghostHost).getPropertyValue('position');\n if (ghostPosition === 'static' && ghostHost.offsetParent && ghostHost.offsetParent === document.body) {\n return 0;\n }\n else if (ghostPosition === 'static' && ghostHost.offsetParent) {\n return ghostHost.offsetParent.getBoundingClientRect().top - this.windowScrollTop;\n }\n return ghostHost.getBoundingClientRect().top - this.windowScrollTop;\n }\n getContainerScrollDirection() {\n const containerBounds = this.scrollContainer ? this.scrollContainer.getBoundingClientRect() : null;\n const scrolledX = !this.scrollContainer ? this.windowScrollLeft > 0 : this.scrollContainer.scrollLeft > 0;\n const scrolledY = !this.scrollContainer ? this.windowScrollTop > 0 : this.scrollContainer.scrollTop > 0;\n // Take into account window scroll top because we do not use fixed positioning to the window.\n const topBorder = (!this.scrollContainer ? 0 : containerBounds.top) + this.windowScrollTop + this._scrollContainerThreshold;\n // Subtract the element height because we position it from top left corner.\n const elementHeight = this.ghost && this.ghostElement ? this.ghostElement.offsetHeight : this.element.nativeElement.offsetHeight;\n const bottomBorder = (!this.scrollContainer ? window.innerHeight : containerBounds.bottom) +\n this.windowScrollTop - this._scrollContainerThreshold - elementHeight;\n // Same for window scroll left\n const leftBorder = (!this.scrollContainer ? 0 : containerBounds.left) + this.windowScrollLeft + this._scrollContainerThreshold;\n // Subtract the element width again because we position it from top left corner.\n const elementWidth = this.ghost && this.ghostElement ? this.ghostElement.offsetWidth : this.element.nativeElement.offsetWidth;\n const rightBorder = (!this.scrollContainer ? window.innerWidth : containerBounds.right) +\n this.windowScrollLeft - this._scrollContainerThreshold - elementWidth;\n if (this.pageY <= topBorder && scrolledY) {\n return DragScrollDirection$1.UP;\n }\n else if (this.pageY > bottomBorder) {\n return DragScrollDirection$1.DOWN;\n }\n else if (this.pageX < leftBorder && scrolledX) {\n return DragScrollDirection$1.LEFT;\n }\n else if (this.pageX > rightBorder) {\n return DragScrollDirection$1.RIGHT;\n }\n return null;\n }\n onScrollContainerStep(scrollDir) {\n animationFrameScheduler.schedule(() => {\n let xDir = scrollDir == DragScrollDirection$1.LEFT ? -1 : (scrollDir == DragScrollDirection$1.RIGHT ? 1 : 0);\n let yDir = scrollDir == DragScrollDirection$1.UP ? -1 : (scrollDir == DragScrollDirection$1.DOWN ? 1 : 0);\n if (!this.scrollContainer) {\n // Cap scrolling so we don't scroll past the window max scroll position.\n const maxScrollX = this._originalScrollContainerWidth - document.documentElement.clientWidth;\n const maxScrollY = this._originalScrollContainerHeight - document.documentElement.clientHeight;\n xDir = (this.windowScrollLeft <= 0 && xDir < 0) || (this.windowScrollLeft >= maxScrollX && xDir > 0) ? 0 : xDir;\n yDir = (this.windowScrollTop <= 0 && yDir < 0) || (this.windowScrollTop >= maxScrollY && yDir > 0) ? 0 : yDir;\n }\n else {\n // Cap scrolling so we don't scroll past the container max scroll position.\n const maxScrollX = this._originalScrollContainerWidth - this.scrollContainer.clientWidth;\n const maxScrollY = this._originalScrollContainerHeight - this.scrollContainer.clientHeight;\n xDir = (this.scrollContainer.scrollLeft <= 0 && xDir < 0) || (this.scrollContainer.scrollLeft >= maxScrollX && xDir > 0) ? 0 : xDir;\n yDir = (this.scrollContainer.scrollTop <= 0 && yDir < 0) || (this.scrollContainer.scrollTop >= maxScrollY && yDir > 0) ? 0 : yDir;\n }\n const scrollByX = xDir * this._scrollContainerStep;\n const scrollByY = yDir * this._scrollContainerStep;\n // Scroll the corresponding window or container.\n if (!this.scrollContainer) {\n window.scrollBy(scrollByX, scrollByY);\n }\n else {\n this.scrollContainer.scrollLeft += scrollByX;\n this.scrollContainer.scrollTop += scrollByY;\n }\n if (this.ghost && !this.scrollContainer) {\n // Scroll the ghost only when there is no container specifies.\n // If it has container the ghost pretty much stays in the same position while the container is scrolled since e use top/left position.\n // Otherwise increase the position the same amount we have scrolled the window\n this.ghostLeft += scrollByX;\n this.ghostTop += scrollByY;\n }\n else if (!this.ghost) {\n // Move the base element the same amount we moved the window/container because we use transformations.\n const translateX = this.getTransformX(this.element.nativeElement) + scrollByX;\n const translateY = this.getTransformY(this.element.nativeElement) + scrollByY;\n this.setTransformXY(translateX, translateY);\n if (!this.scrollContainer) {\n this._lastX += scrollByX;\n this._lastY += scrollByY;\n }\n }\n });\n }\n onScrollContainer() {\n const scrollDir = this.getContainerScrollDirection();\n if (scrollDir !== null && scrollDir !== undefined && !this._containerScrollIntervalId) {\n // Save original container sizes to ensure that we don't increase scroll sizes infinitely when out of bounds.\n this._originalScrollContainerWidth = this.scrollContainer ? this.scrollContainer.scrollWidth : this.windowScrollWidth;\n this._originalScrollContainerHeight = this.scrollContainer ? this.scrollContainer.scrollHeight : this.windowScrollHeight;\n this._containerScrollIntervalId = setInterval(() => this.onScrollContainerStep(scrollDir), this._scrollContainerStepMs);\n }\n else if ((scrollDir === null || scrollDir === undefined) && this._containerScrollIntervalId) {\n // We moved out of end bounds and there is interval started\n clearInterval(this._containerScrollIntervalId);\n this._containerScrollIntervalId = null;\n }\n }\n}\nIgxDragDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDragDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive });\nIgxDragDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDragDirective, selector: \"[igxDrag]\", inputs: { data: [\"igxDrag\", \"data\"], dragTolerance: \"dragTolerance\", dragDirection: \"dragDirection\", dragChannel: \"dragChannel\", ghost: \"ghost\", ghostClass: \"ghostClass\", ghostTemplate: \"ghostTemplate\", ghostHost: \"ghostHost\", scrollContainer: \"scrollContainer\", ghostOffsetX: \"ghostOffsetX\", ghostOffsetY: \"ghostOffsetY\" }, outputs: { dragStart: \"dragStart\", dragMove: \"dragMove\", dragEnd: \"dragEnd\", dragClick: \"dragClick\", ghostCreate: \"ghostCreate\", ghostDestroy: \"ghostDestroy\", transitioned: \"transitioned\" }, host: { properties: { \"class.igx-drag\": \"this.baseClass\", \"class.igx-drag--select-disabled\": \"this.selectDisabled\" } }, queries: [{ propertyName: \"dragHandles\", predicate: IgxDragHandleDirective, descendants: true }, { propertyName: \"dragIgnoredElems\", predicate: IgxDragIgnoreDirective, descendants: true }], exportAs: [\"drag\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDragDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'drag',\n selector: '[igxDrag]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: PlatformUtil }]; }, propDecorators: { data: [{\n type: Input,\n args: ['igxDrag']\n }], dragTolerance: [{\n type: Input\n }], dragDirection: [{\n type: Input\n }], dragChannel: [{\n type: Input\n }], ghost: [{\n type: Input\n }], ghostClass: [{\n type: Input\n }], ghostTemplate: [{\n type: Input\n }], ghostHost: [{\n type: Input\n }], scrollContainer: [{\n type: Input\n }], dragStart: [{\n type: Output\n }], dragMove: [{\n type: Output\n }], dragEnd: [{\n type: Output\n }], dragClick: [{\n type: Output\n }], ghostCreate: [{\n type: Output\n }], ghostDestroy: [{\n type: Output\n }], transitioned: [{\n type: Output\n }], dragHandles: [{\n type: ContentChildren,\n args: [IgxDragHandleDirective, { descendants: true }]\n }], dragIgnoredElems: [{\n type: ContentChildren,\n args: [IgxDragIgnoreDirective, { descendants: true }]\n }], baseClass: [{\n type: HostBinding,\n args: ['class.igx-drag']\n }], selectDisabled: [{\n type: HostBinding,\n args: ['class.igx-drag--select-disabled']\n }], ghostOffsetX: [{\n type: Input\n }], ghostOffsetY: [{\n type: Input\n }] } });\nclass IgxDropDirective {\n /**\n * - Save data inside the `igxDrop` directive. This can be set when instancing `igxDrop` on an element.\n * ```html\n *
    \n * ```\n *\n * @memberof IgxDropDirective\n */\n set data(v) {\n this._data = v;\n }\n get data() {\n return this._data;\n }\n /**\n * An @Input property that specifies a drop strategy type that will be executed when an `IgxDrag` element is released inside\n * the current drop area. The provided strategies are:\n * - IgxDefaultDropStrategy - This is the default base strategy and it doesn't perform any actions.\n * - IgxAppendDropStrategy - Appends the dropped element to last position as a direct child to the `igxDrop`.\n * - IgxPrependDropStrategy - Prepends the dropped element to first position as a direct child to the `igxDrop`.\n * - IgxInsertDropStrategy - If the dropped element is released above a child element of the `igxDrop`, it will be inserted\n * at that position. Otherwise the dropped element will be appended if released outside any child of the `igxDrop`.\n * ```html\n *
    \n * DragMe\n *
    \n *
    \n * Numbers drop area!\n *
    \n * ```\n * ```typescript\n * import { IgxAppendDropStrategy } from 'igniteui-angular';\n *\n * export class App {\n * public myDropStrategy = IgxAppendDropStrategy;\n * }\n * ```\n *\n * @memberof IgxDropDirective\n */\n set dropStrategy(classRef) {\n this._dropStrategy = new classRef(this._renderer);\n }\n get dropStrategy() {\n return this._dropStrategy;\n }\n constructor(element, _renderer, _zone) {\n this.element = element;\n this._renderer = _renderer;\n this._zone = _zone;\n /**\n * Event triggered when dragged element enters the area of the element.\n * ```html\n *
    \n *
    \n * ```\n * ```typescript\n * public dragEnter(){\n * alert(\"A draggable element has entered the chip area!\");\n * }\n * ```\n *\n * @memberof IgxDropDirective\n */\n this.enter = new EventEmitter();\n /**\n * Event triggered when dragged element enters the area of the element.\n * ```html\n *
    \n *
    \n * ```\n * ```typescript\n * public dragEnter(){\n * alert(\"A draggable element has entered the chip area!\");\n * }\n * ```\n *\n * @memberof IgxDropDirective\n */\n this.over = new EventEmitter();\n /**\n * Event triggered when dragged element leaves the area of the element.\n * ```html\n *
    \n *
    \n * ```\n * ```typescript\n * public dragLeave(){\n * alert(\"A draggable element has left the chip area!\");\n * }\n * ```\n *\n * @memberof IgxDropDirective\n */\n this.leave = new EventEmitter();\n /**\n * Event triggered when dragged element is dropped in the area of the element.\n * Since the `igxDrop` has default logic that appends the dropped element as a child, it can be canceled here.\n * To cancel the default logic the `cancel` property of the event needs to be set to true.\n * ```html\n *
    \n *
    \n * ```\n * ```typescript\n * public dragDrop(){\n * alert(\"A draggable element has been dropped in the chip area!\");\n * }\n * ```\n *\n * @memberof IgxDropDirective\n */\n this.dropped = new EventEmitter();\n /**\n * @hidden\n */\n this.droppable = true;\n /**\n * @hidden\n */\n this.dragover = false;\n /**\n * @hidden\n */\n this._destroy = new Subject();\n this._dropStrategy = new IgxDefaultDropStrategy();\n }\n /**\n * @hidden\n */\n onDragDrop(event) {\n if (!this.isDragLinked(event.detail.owner)) {\n return;\n }\n const elementPosX = this.element.nativeElement.getBoundingClientRect().left + this.getWindowScrollLeft();\n const elementPosY = this.element.nativeElement.getBoundingClientRect().top + this.getWindowScrollTop();\n const offsetX = event.detail.pageX - elementPosX;\n const offsetY = event.detail.pageY - elementPosY;\n const args = {\n owner: this,\n originalEvent: event.detail.originalEvent,\n drag: event.detail.owner,\n dragData: event.detail.owner.data,\n startX: event.detail.startX,\n startY: event.detail.startY,\n pageX: event.detail.pageX,\n pageY: event.detail.pageY,\n offsetX,\n offsetY,\n cancel: false\n };\n this._zone.run(() => {\n this.dropped.emit(args);\n });\n if (this._dropStrategy && !args.cancel) {\n const elementsAtPoint = event.detail.owner.getElementsAtPoint(event.detail.pageX, event.detail.pageY);\n const insertIndex = this.getInsertIndexAt(event.detail.owner, elementsAtPoint);\n this._dropStrategy.dropAction(event.detail.owner, this, insertIndex);\n }\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this._zone.runOutsideAngular(() => {\n fromEvent(this.element.nativeElement, 'igxDragEnter').pipe(takeUntil(this._destroy))\n .subscribe((res) => this.onDragEnter(res));\n fromEvent(this.element.nativeElement, 'igxDragLeave').pipe(takeUntil(this._destroy)).subscribe((res) => this.onDragLeave(res));\n fromEvent(this.element.nativeElement, 'igxDragOver').pipe(takeUntil(this._destroy)).subscribe((res) => this.onDragOver(res));\n });\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this._destroy.next(true);\n this._destroy.complete();\n }\n /**\n * @hidden\n */\n onDragOver(event) {\n const elementPosX = this.element.nativeElement.getBoundingClientRect().left + this.getWindowScrollLeft();\n const elementPosY = this.element.nativeElement.getBoundingClientRect().top + this.getWindowScrollTop();\n const offsetX = event.detail.pageX - elementPosX;\n const offsetY = event.detail.pageY - elementPosY;\n const eventArgs = {\n originalEvent: event.detail.originalEvent,\n owner: this,\n drag: event.detail.owner,\n dragData: event.detail.owner.data,\n startX: event.detail.startX,\n startY: event.detail.startY,\n pageX: event.detail.pageX,\n pageY: event.detail.pageY,\n offsetX,\n offsetY\n };\n this.over.emit(eventArgs);\n }\n /**\n * @hidden\n */\n onDragEnter(event) {\n if (!this.isDragLinked(event.detail.owner)) {\n return;\n }\n this.dragover = true;\n const elementPosX = this.element.nativeElement.getBoundingClientRect().left + this.getWindowScrollLeft();\n const elementPosY = this.element.nativeElement.getBoundingClientRect().top + this.getWindowScrollTop();\n const offsetX = event.detail.pageX - elementPosX;\n const offsetY = event.detail.pageY - elementPosY;\n const eventArgs = {\n originalEvent: event.detail.originalEvent,\n owner: this,\n drag: event.detail.owner,\n dragData: event.detail.owner.data,\n startX: event.detail.startX,\n startY: event.detail.startY,\n pageX: event.detail.pageX,\n pageY: event.detail.pageY,\n offsetX,\n offsetY\n };\n this._zone.run(() => {\n this.enter.emit(eventArgs);\n });\n }\n /**\n * @hidden\n */\n onDragLeave(event) {\n if (!this.isDragLinked(event.detail.owner)) {\n return;\n }\n this.dragover = false;\n const elementPosX = this.element.nativeElement.getBoundingClientRect().left + this.getWindowScrollLeft();\n const elementPosY = this.element.nativeElement.getBoundingClientRect().top + this.getWindowScrollTop();\n const offsetX = event.detail.pageX - elementPosX;\n const offsetY = event.detail.pageY - elementPosY;\n const eventArgs = {\n originalEvent: event.detail.originalEvent,\n owner: this,\n drag: event.detail.owner,\n dragData: event.detail.owner.data,\n startX: event.detail.startX,\n startY: event.detail.startY,\n pageX: event.detail.pageX,\n pageY: event.detail.pageY,\n offsetX,\n offsetY\n };\n this._zone.run(() => {\n this.leave.emit(eventArgs);\n });\n }\n getWindowScrollTop() {\n return window.scrollY ? window.scrollY : (window.pageYOffset ? window.pageYOffset : 0);\n }\n getWindowScrollLeft() {\n return window.scrollX ? window.scrollX : (window.pageXOffset ? window.pageXOffset : 0);\n }\n isDragLinked(drag) {\n const dragLinkArray = drag.dragChannel instanceof Array;\n const dropLinkArray = this.dropChannel instanceof Array;\n if (!dragLinkArray && !dropLinkArray) {\n return this.dropChannel === drag.dragChannel;\n }\n else if (!dragLinkArray && dropLinkArray) {\n const dropLinks = this.dropChannel;\n for (const link of dropLinks) {\n if (link === drag.dragChannel) {\n return true;\n }\n }\n }\n else if (dragLinkArray && !dropLinkArray) {\n const dragLinks = drag.dragChannel;\n for (const link of dragLinks) {\n if (link === this.dropChannel) {\n return true;\n }\n }\n }\n else {\n const dragLinks = drag.dragChannel;\n const dropLinks = this.dropChannel;\n for (const draglink of dragLinks) {\n for (const droplink of dropLinks) {\n if (draglink === droplink) {\n return true;\n }\n }\n }\n }\n return false;\n }\n getInsertIndexAt(draggedDir, elementsAtPoint) {\n let insertIndex = -1;\n const dropChildren = Array.prototype.slice.call(this.element.nativeElement.children);\n if (!dropChildren.length) {\n return insertIndex;\n }\n let i = 0;\n let childUnder = null;\n while (!childUnder && i < elementsAtPoint.length) {\n if (elementsAtPoint[i].parentElement === this.element.nativeElement) {\n childUnder = elementsAtPoint[i];\n }\n i++;\n }\n const draggedElemIndex = dropChildren.indexOf(draggedDir.element.nativeElement);\n insertIndex = dropChildren.indexOf(childUnder);\n if (draggedElemIndex !== -1 && draggedElemIndex < insertIndex) {\n insertIndex++;\n }\n return insertIndex;\n }\n}\nIgxDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nIgxDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDropDirective, selector: \"[igxDrop]\", inputs: { data: [\"igxDrop\", \"data\"], dropChannel: \"dropChannel\", dropStrategy: \"dropStrategy\" }, outputs: { enter: \"enter\", over: \"over\", leave: \"leave\", dropped: \"dropped\" }, host: { listeners: { \"igxDrop\": \"onDragDrop($event)\" }, properties: { \"attr.droppable\": \"this.droppable\", \"class.dragOver\": \"this.dragover\" } }, exportAs: [\"drop\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDropDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'drop',\n selector: '[igxDrop]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { data: [{\n type: Input,\n args: ['igxDrop']\n }], dropChannel: [{\n type: Input\n }], dropStrategy: [{\n type: Input\n }], enter: [{\n type: Output\n }], over: [{\n type: Output\n }], leave: [{\n type: Output\n }], dropped: [{\n type: Output\n }], droppable: [{\n type: HostBinding,\n args: ['attr.droppable']\n }], dragover: [{\n type: HostBinding,\n args: ['class.dragOver']\n }], onDragDrop: [{\n type: HostListener,\n args: ['igxDrop', ['$event']]\n }] } });\n/**\n * @hidden\n */\nclass IgxDragDropModule {\n}\nIgxDragDropModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDragDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxDragDropModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDragDropModule, declarations: [IgxDragDirective, IgxDropDirective, IgxDragHandleDirective, IgxDragIgnoreDirective], exports: [IgxDragDirective, IgxDropDirective, IgxDragHandleDirective, IgxDragIgnoreDirective] });\nIgxDragDropModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDragDropModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDragDropModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxDragDirective, IgxDropDirective, IgxDragHandleDirective, IgxDragIgnoreDirective],\n exports: [IgxDragDirective, IgxDropDirective, IgxDragHandleDirective, IgxDragIgnoreDirective]\n }]\n }] });\n\nclass IgxFilterOptions {\n constructor() {\n // Input text value that will be used as a filtering pattern (matching condition is based on it)\n this.inputValue = '';\n }\n // Function - get value to be tested from the item\n // item - single item of the list to be filtered\n // key - property name of item, which value should be tested\n // Default behavior - returns \"key\"- named property value of item if key is provided,\n // otherwise textContent of the item's html element\n get_value(item, key) {\n let result = '';\n if (key && item[key]) {\n result = item[key].toString();\n }\n else if (item.element) {\n if (item.element.nativeElement) {\n result = item.element.nativeElement.textContent.trim();\n // Check if element doesn't return the DOM element directly\n }\n else if (item.element.textContent) {\n result = item.element.textContent.trim();\n }\n }\n return result;\n }\n // Function - formats the original text before matching process\n // Default behavior - returns text to lower case\n formatter(valueToTest) {\n return valueToTest.toLowerCase();\n }\n // Function - determines whether the item met the condition\n // valueToTest - text value that should be tested\n // inputValue - text value from input that condition is based on\n // Default behavior - \"contains\"\n matchFn(valueToTest, inputValue) {\n return valueToTest.indexOf(inputValue && inputValue.toLowerCase() || '') > -1;\n }\n // Function - executed after matching test for every matched item\n // Default behavior - shows the item\n metConditionFn(item) {\n if (item.hasOwnProperty('hidden')) {\n item.hidden = false;\n }\n }\n // Function - executed for every NOT matched item after matching test\n // Default behavior - hides the item\n overdueConditionFn(item) {\n if (item.hasOwnProperty('hidden')) {\n item.hidden = true;\n }\n }\n}\nclass IgxFilterDirective {\n constructor(element) {\n this.element = element;\n this.filtering = new EventEmitter(false); // synchronous event emitter\n this.filtered = new EventEmitter();\n }\n ngOnChanges(changes) {\n // Detect only changes of input value\n if (changes.filterOptions &&\n changes.filterOptions.currentValue &&\n changes.filterOptions.currentValue.inputValue !== undefined &&\n changes.filterOptions.previousValue &&\n changes.filterOptions.currentValue.inputValue !== changes.filterOptions.previousValue.inputValue) {\n this.filter();\n }\n }\n filter() {\n if (!this.filterOptions.items) {\n return;\n }\n const args = { cancel: false, items: this.filterOptions.items };\n this.filtering.emit(args);\n if (args.cancel) {\n return;\n }\n const pipe = new IgxFilterPipe();\n const filtered = pipe.transform(this.filterOptions.items, this.filterOptions);\n this.filtered.emit({ filteredItems: filtered });\n }\n}\nIgxFilterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxFilterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxFilterDirective, selector: \"[igxFilter]\", inputs: { filterOptions: [\"igxFilter\", \"filterOptions\"] }, outputs: { filtering: \"filtering\", filtered: \"filtered\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxFilter]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { filtering: [{\n type: Output\n }], filtered: [{\n type: Output\n }], filterOptions: [{\n type: Input,\n args: ['igxFilter']\n }] } });\nclass IgxFilterPipe {\n findMatchByKey(item, options, key) {\n const match = options.matchFn(options.formatter(options.get_value(item, key)), options.inputValue);\n if (match) {\n if (options.metConditionFn) {\n options.metConditionFn(item);\n }\n }\n else {\n if (options.overdueConditionFn) {\n options.overdueConditionFn(item);\n }\n }\n return match;\n }\n transform(items, \n // options - initial settings of filter functionality\n options) {\n let result = [];\n if (!items || !items.length || !options) {\n return;\n }\n if (options.items) {\n items = options.items;\n }\n result = items.filter((item) => {\n if (!Array.isArray(options.key)) {\n return this.findMatchByKey(item, options, options.key);\n }\n else {\n let isMatch = false;\n options.key.forEach(key => {\n if (this.findMatchByKey(item, options, key)) {\n isMatch = true;\n }\n });\n return isMatch;\n }\n });\n return result;\n }\n}\nIgxFilterPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxFilterPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterPipe, name: \"igxFilter\", pure: false });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'igxFilter',\n pure: false\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxFilterModule {\n}\nIgxFilterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxFilterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterModule, declarations: [IgxFilterDirective, IgxFilterPipe], imports: [CommonModule], exports: [IgxFilterDirective, IgxFilterPipe] });\nIgxFilterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxFilterDirective, IgxFilterPipe],\n exports: [IgxFilterDirective, IgxFilterPipe],\n imports: [CommonModule]\n }]\n }] });\n\n/**\n * Injection token is used to inject the EditorProvider token into components\n *\n * @hidden @internal\n */\nconst EDITOR_PROVIDER = new InjectionToken('EditorProvider');\n\nclass IgxFocusDirective {\n /**\n * Returns the state of the igxFocus.\n * ```typescript\n * @ViewChild('focusContainer', {read: IgxFocusDirective})\n * public igxFocus: IgxFocusDirective;\n * let isFocusOn = this.igxFocus.focused;\n * ```\n *\n * @memberof IgxFocusDirective\n */\n get focused() {\n return this.focusState;\n }\n /**\n * Sets the state of the igxFocus.\n * ```html\n * \n * \n * \n * ```\n *\n * @memberof IgxFocusDirective\n */\n set focused(val) {\n this.focusState = val;\n this.trigger();\n }\n /**\n * Gets the native element of the igxFocus.\n * ```typescript\n * @ViewChild('focusContainer', {read: IgxFocusDirective})\n * public igxFocus: IgxFocusDirective;\n * let igxFocusNativeElement = this.igxFocus.nativeElement;\n * ```\n *\n * @memberof IgxFocusDirective\n */\n get nativeElement() {\n if (this.comp && this.comp[0] && this.comp[0].getEditElement) {\n return this.comp[0].getEditElement();\n }\n if (this.control && this.control[0] && this.control[0].getEditElement) {\n return this.control[0].getEditElement();\n }\n return this.element.nativeElement;\n }\n constructor(element, comp, control) {\n this.element = element;\n this.comp = comp;\n this.control = control;\n this.focusState = true;\n }\n /**\n * Triggers the igxFocus state.\n * ```typescript\n * @ViewChild('focusContainer', {read: IgxFocusDirective})\n * public igxFocus: IgxFocusDirective;\n * this.igxFocus.trigger();\n * ```\n *\n * @memberof IgxFocusDirective\n */\n trigger() {\n if (this.focusState) {\n requestAnimationFrame(() => this.nativeElement.focus({ preventScroll: true }));\n }\n }\n}\nIgxFocusDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFocusDirective, deps: [{ token: i0.ElementRef }, { token: NG_VALUE_ACCESSOR, optional: true, self: true }, { token: EDITOR_PROVIDER, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });\nIgxFocusDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxFocusDirective, selector: \"[igxFocus]\", inputs: { focused: [\"igxFocus\", \"focused\"] }, exportAs: [\"igxFocus\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFocusDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'igxFocus',\n selector: '[igxFocus]'\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [NG_VALUE_ACCESSOR]\n }, {\n type: Self\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [EDITOR_PROVIDER]\n }, {\n type: Self\n }, {\n type: Optional\n }] }];\n }, propDecorators: { focused: [{\n type: Input,\n args: ['igxFocus']\n }] } });\n/**\n * @hidden\n */\nclass IgxFocusModule {\n}\nIgxFocusModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFocusModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxFocusModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFocusModule, declarations: [IgxFocusDirective], exports: [IgxFocusDirective] });\nIgxFocusModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFocusModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFocusModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxFocusDirective],\n exports: [IgxFocusDirective]\n }]\n }] });\n\nclass IgxFocusTrapDirective {\n /** @hidden */\n get element() {\n return this.elementRef.nativeElement;\n }\n /** @hidden */\n constructor(elementRef, platformUtil) {\n this.elementRef = elementRef;\n this.platformUtil = platformUtil;\n this.destroy$ = new Subject();\n this._focusTrap = true;\n }\n /**\n * Sets whether the Tab key focus is trapped within the element.\n *\n * @example\n * ```html\n *
    \n * ```\n */\n set focusTrap(focusTrap) {\n this._focusTrap = focusTrap;\n }\n /** @hidden */\n get focusTrap() {\n return this._focusTrap;\n }\n /** @hidden */\n ngAfterViewInit() {\n fromEvent(this.element, 'keydown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event) => {\n if (this._focusTrap && event.key === this.platformUtil.KEYMAP.TAB) {\n this.handleTab(event);\n }\n });\n }\n /** @hidden */\n ngOnDestroy() {\n this.destroy$.complete();\n }\n handleTab(event) {\n const elements = this.getFocusableElements(this.element);\n if (elements.length > 0) {\n const focusedElement = this.getFocusedElement();\n const focusedElementIndex = elements.findIndex((element) => element === focusedElement);\n const direction = event.shiftKey ? -1 : 1;\n let nextFocusableElementIndex = focusedElementIndex + direction;\n if (nextFocusableElementIndex < 0) {\n nextFocusableElementIndex = elements.length - 1;\n }\n if (nextFocusableElementIndex >= elements.length) {\n nextFocusableElementIndex = 0;\n }\n elements[nextFocusableElementIndex].focus();\n }\n else {\n this.element.focus();\n }\n event.preventDefault();\n }\n getFocusableElements(element) {\n return Array.from(element.querySelectorAll('a[href], button, input, textarea, select, details,[tabindex]:not([tabindex=\"-1\"])')).filter(el => !el.hasAttribute('disabled') && !el.getAttribute('aria-hidden'));\n }\n getFocusedElement() {\n let activeElement = typeof document !== 'undefined' && document\n ? document.activeElement\n : null;\n while (activeElement && activeElement.shadowRoot) {\n const newActiveElement = activeElement.shadowRoot.activeElement;\n if (newActiveElement === activeElement) {\n break;\n }\n else {\n activeElement = newActiveElement;\n }\n }\n return activeElement;\n }\n}\nIgxFocusTrapDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFocusTrapDirective, deps: [{ token: i0.ElementRef }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive });\nIgxFocusTrapDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxFocusTrapDirective, selector: \"[igxFocusTrap]\", inputs: { focusTrap: [\"igxFocusTrap\", \"focusTrap\"] }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFocusTrapDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxFocusTrap]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: PlatformUtil }]; }, propDecorators: { focusTrap: [{\n type: Input,\n args: ['igxFocusTrap']\n }] } });\n/**\n * @hidden\n */\nclass IgxFocusTrapModule {\n}\nIgxFocusTrapModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFocusTrapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxFocusTrapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFocusTrapModule, declarations: [IgxFocusTrapDirective], exports: [IgxFocusTrapDirective] });\nIgxFocusTrapModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFocusTrapModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFocusTrapModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxFocusTrapDirective],\n exports: [IgxFocusTrapDirective]\n }]\n }] });\n\nclass IgxLayoutDirective {\n constructor() {\n /**\n * Sets the default flow direction of the container's children.\n *\n * Defaults to `rows`.\n *\n * ```html\n * \n *
    1
    \n *
    2
    \n *
    3
    \n * \n * ```\n */\n this.dir = 'row';\n /**\n * Defines the direction flex children are placed in the flex container.\n *\n * When set to `true`, the `rows` direction goes right to left and `columns` goes bottom to top.\n *\n * ```html\n * \n *
    1
    \n *
    2
    \n *
    3
    \n * \n * ```\n */\n this.reverse = false;\n /**\n * By default the immediate children will all try to fit onto one line.\n *\n * The default value `nowrap` sets this behavior.\n *\n * Other accepted values are `wrap` and `wrap-reverse`.\n *\n * ```html\n * \n *
    1
    \n *
    2
    \n *
    3
    \n * \n * ```\n */\n this.wrap = 'nowrap';\n /**\n * Defines the alignment along the main axis.\n *\n * Defaults to `flex-start` which packs the children toward the start line.\n *\n * Other possible values are `flex-end`, `center`, `space-between`, `space-around`.\n *\n * ```html\n * \n *
    1
    \n *
    2
    \n *
    3
    \n * \n * ```\n */\n this.justify = 'flex-start';\n /**\n * Defines the default behavior for how children are laid out along the corss axis of the current line.\n *\n * Defaults to `flex-start`.\n *\n * Other possible values are `flex-end`, `center`, `baseline`, and `stretch`.\n *\n * ```html\n * \n *
    1
    \n *
    2
    \n *
    3
    \n * \n * ```\n */\n this.itemAlign = 'stretch';\n /**\n * @hidden\n */\n this.display = 'flex';\n }\n /**\n * @hidden\n */\n get flexwrap() {\n return this.wrap;\n }\n /**\n * @hidden\n */\n get justifycontent() {\n return this.justify;\n }\n /**\n * @hidden\n */\n get align() {\n return this.itemAlign;\n }\n /**\n * @hidden\n */\n get direction() {\n if (this.reverse) {\n return (this.dir === 'row') ? 'row-reverse' : 'column-reverse';\n }\n return (this.dir === 'row') ? 'row' : 'column';\n }\n}\nIgxLayoutDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxLayoutDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxLayoutDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxLayoutDirective, selector: \"[igxLayout]\", inputs: { dir: [\"igxLayoutDir\", \"dir\"], reverse: [\"igxLayoutReverse\", \"reverse\"], wrap: [\"igxLayoutWrap\", \"wrap\"], justify: [\"igxLayoutJustify\", \"justify\"], itemAlign: [\"igxLayoutItemAlign\", \"itemAlign\"] }, host: { properties: { \"style.display\": \"this.display\", \"style.flex-wrap\": \"this.flexwrap\", \"style.justify-content\": \"this.justifycontent\", \"style.align-items\": \"this.align\", \"style.flex-direction\": \"this.direction\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxLayoutDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxLayout]'\n }]\n }], propDecorators: { dir: [{\n type: Input,\n args: ['igxLayoutDir']\n }], reverse: [{\n type: Input,\n args: ['igxLayoutReverse']\n }], wrap: [{\n type: Input,\n args: ['igxLayoutWrap']\n }], justify: [{\n type: Input,\n args: ['igxLayoutJustify']\n }], itemAlign: [{\n type: Input,\n args: ['igxLayoutItemAlign']\n }], display: [{\n type: HostBinding,\n args: ['style.display']\n }], flexwrap: [{\n type: HostBinding,\n args: ['style.flex-wrap']\n }], justifycontent: [{\n type: HostBinding,\n args: ['style.justify-content']\n }], align: [{\n type: HostBinding,\n args: ['style.align-items']\n }], direction: [{\n type: HostBinding,\n args: ['style.flex-direction']\n }] } });\nclass IgxFlexDirective {\n constructor() {\n /**\n * Applies the `grow` attribute to an element that uses the directive.\n *\n * Default value is `1`.\n *\n * ```html\n *
    \n *
    Content1
    \n *
    Content2
    \n *
    Content3
    \n *
    \n * ```\n */\n this.grow = 1;\n /**\n * Applies the `shrink` attribute to an element that uses the directive.\n *\n * Default value is `1`.\n *\n * ```html\n *
    \n *
    Content1
    \n *
    Content2
    \n *
    Content3
    \n *
    \n * ```\n */\n this.shrink = 1;\n /**\n * Applies the directive to an element.\n *\n * Possible values include `igxFlexGrow`, `igxFlexShrink`, `igxFlexOrder`, `igxFlexBasis`.\n *\n * ```html\n *
    Content
    \n * ```\n */\n this.flex = '';\n /**\n * Applies the `order` attribute to an element that uses the directive.\n *\n * Default value is `0`.\n *\n * ```html\n *
    \n *
    Content1
    \n *
    Content2
    \n *
    Content3
    \n *
    \n * ```\n */\n this.order = 0;\n /**\n * Applies the `flex-basis` attribute to an element that uses the directive.\n *\n * Default value is `auto`.\n *\n * Other possible values include `content`, `max-content`, `min-content`, `fit-content`.\n *\n * ```html\n *
    Content
    \n * ```\n */\n this.basis = 'auto';\n }\n /**\n * @hidden\n */\n get style() {\n if (this.flex) {\n return `${this.flex}`;\n }\n return `${this.grow} ${this.shrink} ${this.basis}`;\n }\n /**\n * @hidden\n */\n get itemorder() {\n return this.order || 0;\n }\n}\nIgxFlexDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFlexDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxFlexDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxFlexDirective, selector: \"[igxFlex]\", inputs: { grow: [\"igxFlexGrow\", \"grow\"], shrink: [\"igxFlexShrink\", \"shrink\"], flex: [\"igxFlex\", \"flex\"], order: [\"igxFlexOrder\", \"order\"], basis: [\"igxFlexBasis\", \"basis\"] }, host: { properties: { \"style.flex\": \"this.style\", \"style.order\": \"this.itemorder\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFlexDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxFlex]'\n }]\n }], propDecorators: { grow: [{\n type: Input,\n args: ['igxFlexGrow']\n }], shrink: [{\n type: Input,\n args: ['igxFlexShrink']\n }], flex: [{\n type: Input,\n args: ['igxFlex']\n }], order: [{\n type: Input,\n args: ['igxFlexOrder']\n }], basis: [{\n type: Input,\n args: ['igxFlexBasis']\n }], style: [{\n type: HostBinding,\n args: ['style.flex']\n }], itemorder: [{\n type: HostBinding,\n args: ['style.order']\n }] } });\n/**\n * @hidden\n */\nclass IgxLayoutModule {\n}\nIgxLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxLayoutModule, declarations: [IgxFlexDirective, IgxLayoutDirective], exports: [IgxFlexDirective, IgxLayoutDirective] });\nIgxLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxLayoutModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxLayoutModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxFlexDirective, IgxLayoutDirective],\n exports: [IgxFlexDirective, IgxLayoutDirective]\n }]\n }] });\n\nconst FLAGS = new Set('aACL09#&?');\nconst REGEX = new Map([\n ['C', /(?!^$)/u],\n ['&', /[^\\p{Separator}]/u],\n ['a', /[\\p{Letter}\\d\\p{Separator}]/u],\n ['A', /[\\p{Letter}\\d]/u],\n ['?', /[\\p{Letter}\\p{Separator}]/u],\n ['L', /\\p{Letter}/u],\n ['0', /\\d/],\n ['9', /[\\d\\p{Separator}]/u],\n ['#', /[\\d\\-+]/], // Numeric and sign\n]);\n;\nconst replaceCharAt = (string, idx, char) => `${string.substring(0, idx)}${char}${string.substring(idx + 1)}`;\nfunction parseMask(format) {\n const literals = new Map();\n let mask = format;\n for (let i = 0, j = 0; i < format.length; i++, j++) {\n const [current, next] = [format.charAt(i), format.charAt(i + 1)];\n if (current === '\\\\' && FLAGS.has(next)) {\n mask = replaceCharAt(mask, j, '');\n literals.set(j, next);\n i++;\n }\n else {\n if (!FLAGS.has(current)) {\n literals.set(j, current);\n }\n }\n }\n return { literals, mask };\n}\n/** @hidden */\nclass MaskParsingService {\n applyMask(inputVal, maskOptions, pos = 0) {\n let outputVal = '';\n let value = '';\n const { literals, mask } = parseMask(maskOptions.format);\n const literalKeys = Array.from(literals.keys());\n const nonLiteralIndices = this.getNonLiteralIndices(mask, literalKeys);\n const literalValues = Array.from(literals.values());\n if (inputVal != null) {\n value = inputVal.toString();\n }\n for (const _maskSym of mask) {\n outputVal += maskOptions.promptChar;\n }\n literals.forEach((val, key) => {\n outputVal = replaceCharAt(outputVal, key, val);\n });\n if (!value) {\n return outputVal;\n }\n const nonLiteralValues = this.getNonLiteralValues(value, literalValues);\n for (let i = 0; i < nonLiteralValues.length; i++) {\n const char = nonLiteralValues[i];\n const isCharValid = this.validateCharOnPosition(char, nonLiteralIndices[i], mask);\n if (!isCharValid && char !== maskOptions.promptChar) {\n nonLiteralValues[i] = maskOptions.promptChar;\n }\n }\n if (nonLiteralValues.length > nonLiteralIndices.length) {\n nonLiteralValues.splice(nonLiteralIndices.length);\n }\n for (const nonLiteralValue of nonLiteralValues) {\n const char = nonLiteralValue;\n outputVal = replaceCharAt(outputVal, nonLiteralIndices[pos++], char);\n }\n return outputVal;\n }\n parseValueFromMask(maskedValue, maskOptions) {\n let outputVal = '';\n const literalValues = Array.from(parseMask(maskOptions.format).literals.values());\n for (const val of maskedValue) {\n if (literalValues.indexOf(val) === -1) {\n if (val !== maskOptions.promptChar) {\n outputVal += val;\n }\n }\n }\n return outputVal;\n }\n replaceInMask(maskedValue, value, maskOptions, start, end) {\n const { literals, mask } = parseMask(maskOptions.format);\n const literalsPositions = Array.from(literals.keys());\n value = this.replaceIMENumbers(value);\n const chars = Array.from(value);\n let cursor = start;\n end = Math.min(end, maskedValue.length);\n let initialMaskedValue = maskedValue;\n for (let i = start; i < end || (chars.length && i < maskedValue.length); i++) {\n if (literalsPositions.indexOf(i) !== -1) {\n if (chars[0] === maskedValue[i]) {\n cursor = i + 1;\n chars.shift();\n }\n continue;\n }\n if (chars[0]\n && !this.validateCharOnPosition(chars[0], i, mask)\n && chars[0] !== maskOptions.promptChar) {\n break;\n }\n let char = maskOptions.promptChar;\n if (chars.length) {\n cursor = i + 1;\n char = chars.shift();\n }\n maskedValue = replaceCharAt(maskedValue, i, char);\n }\n if (value.length <= 1) {\n let isDelete = false;\n cursor = start;\n for (let i = 0; i < literalsPositions.length; i++) {\n if (value === '') {\n // on `delete` the cursor should move forward\n cursor = Math.max(cursor, end);\n isDelete = true;\n }\n else if (cursor === literalsPositions[i]) {\n cursor = literalsPositions[i] + 1;\n }\n }\n if (!isDelete && initialMaskedValue !== maskedValue) {\n cursor++;\n }\n }\n return { value: maskedValue, end: cursor };\n }\n /** Validates only non literal positions. */\n validateCharOnPosition(inputChar, position, mask) {\n const regex = REGEX.get(mask.charAt(position));\n return regex ? regex.test(inputChar) : false;\n }\n getNonLiteralIndices(mask, literalKeys) {\n const nonLiteralsIndices = new Array();\n for (let i = 0; i < mask.length; i++) {\n if (literalKeys.indexOf(i) === -1) {\n nonLiteralsIndices.push(i);\n }\n }\n return nonLiteralsIndices;\n }\n getNonLiteralValues(value, literalValues) {\n const nonLiteralValues = new Array();\n for (const val of value) {\n if (literalValues.indexOf(val) === -1) {\n nonLiteralValues.push(val);\n }\n }\n return nonLiteralValues;\n }\n replaceIMENumbers(value) {\n return value.replace(/[0123456789]/g, (num) => ({\n '1': '1', '2': '2', '3': '3', '4': '4', '5': '5',\n '6': '6', '7': '7', '8': '8', '9': '9', '0': '0'\n }[num]));\n }\n}\nMaskParsingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: MaskParsingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMaskParsingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: MaskParsingService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: MaskParsingService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n\nclass IgxMaskDirective {\n /**\n * Sets the input mask.\n * ```html\n * \n * ```\n */\n get mask() {\n return this._mask || this.defaultMask;\n }\n set mask(val) {\n // B.P. 9th June 2021 #7490\n if (val !== this._mask) {\n const cleanInputValue = this.maskParser.parseValueFromMask(this.inputValue, this.maskOptions);\n this.setPlaceholder(val);\n this._mask = val;\n this.updateInputValue(cleanInputValue);\n }\n }\n /** @hidden */\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n /** @hidden @internal; */\n get inputValue() {\n return this.nativeElement.value;\n }\n /** @hidden @internal */\n set inputValue(val) {\n this.nativeElement.value = val;\n }\n /** @hidden */\n get maskOptions() {\n const format = this.mask || this.defaultMask;\n const promptChar = this.promptChar && this.promptChar.substring(0, 1);\n return { format, promptChar };\n }\n /** @hidden */\n get selectionStart() {\n // Edge(classic) and FF don't select text on drop\n return this.nativeElement.selectionStart === this.nativeElement.selectionEnd && this._hasDropAction ?\n this.nativeElement.selectionEnd - this._droppedData.length :\n this.nativeElement.selectionStart;\n }\n /** @hidden */\n get selectionEnd() {\n return this.nativeElement.selectionEnd;\n }\n /** @hidden */\n get start() {\n return this._start;\n }\n /** @hidden */\n get end() {\n return this._end;\n }\n constructor(elementRef, maskParser, renderer, platform) {\n this.elementRef = elementRef;\n this.maskParser = maskParser;\n this.renderer = renderer;\n this.platform = platform;\n /**\n * Sets the character representing a fillable spot in the input mask.\n * Default value is \"'_'\".\n * ```html\n * \n * ```\n */\n this.promptChar = '_';\n /**\n * Emits an event each time the value changes.\n * Provides `rawValue: string` and `formattedValue: string` as event arguments.\n * ```html\n * \n * ```\n */\n this.valueChanged = new EventEmitter();\n this._end = 0;\n this._start = 0;\n this._oldText = '';\n this._dataValue = '';\n this._focused = false;\n this.defaultMask = 'CCCCCCCCCC';\n this._onTouchedCallback = noop;\n this._onChangeCallback = noop;\n }\n /** @hidden */\n onKeyDown(event) {\n const key = event.key;\n if (!key) {\n return;\n }\n if ((event.ctrlKey && (key === this.platform.KEYMAP.Z || key === this.platform.KEYMAP.Y))) {\n event.preventDefault();\n }\n this._key = key;\n this._start = this.selectionStart;\n this._end = this.selectionEnd;\n }\n /** @hidden @internal */\n onCompositionStart() {\n if (!this._composing) {\n this._compositionStartIndex = this._start;\n this._composing = true;\n }\n }\n /** @hidden @internal */\n onCompositionEnd() {\n this._start = this._compositionStartIndex;\n const end = this.selectionEnd;\n const valueToParse = this.inputValue.substring(this._start, end);\n this.updateInput(valueToParse);\n this._end = this.selectionEnd;\n this._compositionValue = this.inputValue;\n }\n /** @hidden @internal */\n onInputChanged(event) {\n var _a;\n /**\n * '!this._focused' is a fix for #8165\n * On page load IE triggers input events before focus events and\n * it does so for every single input on the page.\n * The mask needs to be prevented from doing anything while this is happening because\n * the end user will be unable to blur the input.\n * https://stackoverflow.com/questions/21406138/input-event-triggered-on-internet-explorer-when-placeholder-changed\n */\n if (this._composing) {\n if (this.inputValue.length < this._oldText.length) {\n // software keyboard input delete\n this._key = this.platform.KEYMAP.BACKSPACE;\n }\n return;\n }\n // After the compositionend event Chromium triggers input events of type 'deleteContentBackward' and\n // we need to adjust the start and end indexes to include mask literals\n if (event.inputType === 'deleteContentBackward' && this._key !== this.platform.KEYMAP.BACKSPACE) {\n const isInputComplete = this._compositionStartIndex === 0 && this._end === this.mask.length;\n let numberOfMaskLiterals = 0;\n const literalPos = parseMask(this.maskOptions.format).literals.keys();\n for (const index of literalPos) {\n if (index >= this._compositionStartIndex && index <= this._end) {\n numberOfMaskLiterals++;\n }\n }\n this.inputValue = isInputComplete ?\n this.inputValue.substring(0, this.selectionEnd - numberOfMaskLiterals) + this.inputValue.substring(this.selectionEnd)\n : ((_a = this._compositionValue) === null || _a === void 0 ? void 0 : _a.substring(0, this._compositionStartIndex)) || this.inputValue;\n if (this._compositionValue) {\n this._start = this.selectionStart;\n this._end = this.selectionEnd;\n this.nativeElement.selectionStart = isInputComplete ? this._start - numberOfMaskLiterals : this._compositionStartIndex;\n this.nativeElement.selectionEnd = this._end - numberOfMaskLiterals;\n this.nativeElement.selectionEnd = this._end;\n this._start = this.selectionStart;\n this._end = this.selectionEnd;\n }\n }\n if (this._hasDropAction) {\n this._start = this.selectionStart;\n }\n let valueToParse = '';\n switch (this._key) {\n case this.platform.KEYMAP.DELETE:\n this._end = this._start === this._end ? ++this._end : this._end;\n break;\n case this.platform.KEYMAP.BACKSPACE:\n this._start = this.selectionStart;\n break;\n default:\n valueToParse = this.inputValue.substring(this._start, this.selectionEnd);\n break;\n }\n this.updateInput(valueToParse);\n }\n /** @hidden */\n onPaste() {\n this._oldText = this.inputValue;\n this._start = this.selectionStart;\n }\n /** @hidden */\n onFocus() {\n if (this.nativeElement.readOnly) {\n return;\n }\n this._focused = true;\n this.showMask(this.inputValue);\n }\n /** @hidden */\n onBlur(value) {\n this._focused = false;\n this.showDisplayValue(value);\n this._onTouchedCallback();\n }\n /** @hidden */\n onDragEnter() {\n if (!this._focused && !this._dataValue) {\n this.showMask(this._dataValue);\n }\n }\n /** @hidden */\n onDragLeave() {\n if (!this._focused) {\n this.showDisplayValue(this.inputValue);\n }\n }\n /** @hidden */\n onDrop(event) {\n this._hasDropAction = true;\n this._droppedData = event.dataTransfer.getData('text');\n }\n /** @hidden */\n ngOnInit() {\n this.setPlaceholder(this.maskOptions.format);\n }\n /**\n * TODO: Remove after date/time picker integration refactor\n *\n * @hidden\n */\n ngAfterViewChecked() {\n if (this._composing) {\n return;\n }\n this._oldText = this.inputValue;\n }\n /** @hidden */\n writeValue(value) {\n if (this.promptChar && this.promptChar.length > 1) {\n this.maskOptions.promptChar = this.promptChar.substring(0, 1);\n }\n this.inputValue = value ? this.maskParser.applyMask(value, this.maskOptions) : '';\n if (this.displayValuePipe) {\n this.inputValue = this.displayValuePipe.transform(this.inputValue);\n }\n this._dataValue = this.includeLiterals ? this.inputValue : value;\n this.valueChanged.emit({ rawValue: value, formattedValue: this.inputValue });\n }\n /** @hidden */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /** @hidden */\n registerOnTouched(fn) {\n this._onTouchedCallback = fn;\n }\n /** @hidden */\n showMask(value) {\n if (this.focusedValuePipe) {\n // TODO(D.P.): focusedValuePipe should be deprecated or force-checked to match mask format\n this.inputValue = this.focusedValuePipe.transform(value);\n }\n else {\n this.inputValue = this.maskParser.applyMask(value, this.maskOptions);\n }\n this._oldText = this.inputValue;\n }\n /** @hidden */\n setSelectionRange(start, end = start) {\n this.nativeElement.setSelectionRange(start, end);\n }\n /** @hidden */\n afterInput() {\n this._oldText = this.inputValue;\n this._hasDropAction = false;\n this._start = 0;\n this._end = 0;\n this._key = null;\n this._composing = false;\n }\n /** @hidden */\n setPlaceholder(value) {\n const placeholder = this.nativeElement.placeholder;\n if (!placeholder || placeholder === this.mask) {\n this.renderer.setAttribute(this.nativeElement, 'placeholder', parseMask(value !== null && value !== void 0 ? value : '').mask || this.defaultMask);\n }\n }\n updateInputValue(value) {\n if (this._focused) {\n this.showMask(value);\n }\n else if (!this.displayValuePipe) {\n this.inputValue = this.inputValue ? this.maskParser.applyMask(value, this.maskOptions) : '';\n }\n }\n updateInput(valueToParse) {\n const replacedData = this.maskParser.replaceInMask(this._oldText, valueToParse, this.maskOptions, this._start, this._end);\n this.inputValue = replacedData.value;\n if (this._key === this.platform.KEYMAP.BACKSPACE) {\n replacedData.end = this._start;\n }\n ;\n this.setSelectionRange(replacedData.end);\n const rawVal = this.maskParser.parseValueFromMask(this.inputValue, this.maskOptions);\n this._dataValue = this.includeLiterals ? this.inputValue : rawVal;\n this._onChangeCallback(this._dataValue);\n this.valueChanged.emit({ rawValue: rawVal, formattedValue: this.inputValue });\n this.afterInput();\n }\n showDisplayValue(value) {\n if (this.displayValuePipe) {\n this.inputValue = this.displayValuePipe.transform(value);\n }\n else if (value === this.maskParser.applyMask(null, this.maskOptions)) {\n this.inputValue = '';\n }\n }\n}\nIgxMaskDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMaskDirective, deps: [{ token: i0.ElementRef }, { token: MaskParsingService }, { token: i0.Renderer2 }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive });\nIgxMaskDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxMaskDirective, selector: \"[igxMask]\", inputs: { mask: [\"igxMask\", \"mask\"], promptChar: \"promptChar\", includeLiterals: \"includeLiterals\", displayValuePipe: \"displayValuePipe\", focusedValuePipe: \"focusedValuePipe\" }, outputs: { valueChanged: \"valueChanged\" }, host: { listeners: { \"keydown\": \"onKeyDown($event)\", \"compositionstart\": \"onCompositionStart()\", \"compositionend\": \"onCompositionEnd()\", \"input\": \"onInputChanged($event)\", \"paste\": \"onPaste()\", \"focus\": \"onFocus()\", \"blur\": \"onBlur($event.target.value)\", \"dragenter\": \"onDragEnter()\", \"dragleave\": \"onDragLeave()\", \"drop\": \"onDrop($event)\" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxMaskDirective, multi: true }], exportAs: [\"igxMask\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMaskDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxMaskDirective, multi: true }],\n selector: '[igxMask]',\n exportAs: 'igxMask'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: MaskParsingService }, { type: i0.Renderer2 }, { type: PlatformUtil }]; }, propDecorators: { mask: [{\n type: Input,\n args: ['igxMask']\n }], promptChar: [{\n type: Input\n }], includeLiterals: [{\n type: Input\n }], displayValuePipe: [{\n type: Input\n }], focusedValuePipe: [{\n type: Input\n }], valueChanged: [{\n type: Output\n }], onKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], onCompositionStart: [{\n type: HostListener,\n args: ['compositionstart']\n }], onCompositionEnd: [{\n type: HostListener,\n args: ['compositionend']\n }], onInputChanged: [{\n type: HostListener,\n args: ['input', ['$event']]\n }], onPaste: [{\n type: HostListener,\n args: ['paste']\n }], onFocus: [{\n type: HostListener,\n args: ['focus']\n }], onBlur: [{\n type: HostListener,\n args: ['blur', ['$event.target.value']]\n }], onDragEnter: [{\n type: HostListener,\n args: ['dragenter']\n }], onDragLeave: [{\n type: HostListener,\n args: ['dragleave']\n }], onDrop: [{\n type: HostListener,\n args: ['drop', ['$event']]\n }] } });\n/** @hidden */\nclass IgxMaskModule {\n}\nIgxMaskModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMaskModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxMaskModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMaskModule, declarations: [IgxMaskDirective], imports: [CommonModule], exports: [IgxMaskDirective] });\nIgxMaskModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMaskModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMaskModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxMaskDirective],\n exports: [IgxMaskDirective],\n imports: [CommonModule]\n }]\n }] });\n\nclass IgxRippleDirective {\n /**\n * Enables/disables the ripple to be centered.\n * ```html\n * \n * ```\n *\n * @memberof IgxRippleDirective\n */\n set centered(value) {\n this._centered = value || this.centered;\n }\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n constructor(builder, elementRef, renderer, zone) {\n this.builder = builder;\n this.elementRef = elementRef;\n this.renderer = renderer;\n this.zone = zone;\n /**\n * Sets/gets the ripple target.\n * ```html\n *
    \n * ```\n * ```typescript\n * @ViewChild('rippleContainer', {read: IgxRippleDirective})\n * public ripple: IgxRippleDirective;\n * let rippleTarget = this.ripple.rippleTarget;\n * ```\n * Can set the ripple to activate on a child element inside the parent where igxRipple is defined.\n * ```html\n *
    \n * \n *
    \n * ```\n *\n * @memberof IgxRippleDirective\n */\n this.rippleTarget = '';\n /**\n * Sets/gets the ripple duration(in milliseconds).\n * Default value is `600`.\n * ```html\n * \n * ```\n * ```typescript\n * @ViewChild('rippleContainer', {read: IgxRippleDirective})\n * public ripple: IgxRippleDirective;\n * let rippleDuration = this.ripple.rippleDuration;\n * ```\n *\n * @memberof IgxRippleDirective\n */\n this.rippleDuration = 600;\n /**\n * Sets/gets whether the ripple is disabled.\n * Default value is `false`.\n * ```html\n * \n * ```\n * ```typescript\n * @ViewChild('rippleContainer', {read: IgxRippleDirective})\n * public ripple: IgxRippleDirective;\n * let isRippleDisabled = this.ripple.rippleDisabled;\n * ```\n *\n * @memberof IgxRippleDirective\n */\n this.rippleDisabled = false;\n this.rippleElementClass = 'igx-ripple__inner';\n this.rippleHostClass = 'igx-ripple';\n this._centered = false;\n this.animationQueue = [];\n }\n /**\n * @hidden\n */\n onMouseDown(event) {\n this.zone.runOutsideAngular(() => this._ripple(event));\n }\n setStyles(rippleElement, styleParams) {\n this.renderer.addClass(rippleElement, this.rippleElementClass);\n this.renderer.setStyle(rippleElement, 'width', `${styleParams.radius}px`);\n this.renderer.setStyle(rippleElement, 'height', `${styleParams.radius}px`);\n this.renderer.setStyle(rippleElement, 'top', `${styleParams.top}px`);\n this.renderer.setStyle(rippleElement, 'left', `${styleParams.left}px`);\n if (this.rippleColor) {\n this.renderer.setStyle(rippleElement, 'background', this.rippleColor);\n }\n }\n _ripple(event) {\n if (this.rippleDisabled) {\n return;\n }\n const target = (this.rippleTarget ? this.nativeElement.querySelector(this.rippleTarget) || this.nativeElement : this.nativeElement);\n const rectBounds = target.getBoundingClientRect();\n const radius = Math.max(rectBounds.width, rectBounds.height);\n let left = Math.round(event.clientX - rectBounds.left - radius / 2);\n let top = Math.round(event.clientY - rectBounds.top - radius / 2);\n if (this._centered) {\n left = top = 0;\n }\n const dimensions = {\n radius,\n top,\n left\n };\n const rippleElement = this.renderer.createElement('span');\n this.setStyles(rippleElement, dimensions);\n this.renderer.addClass(target, this.rippleHostClass);\n this.renderer.appendChild(target, rippleElement);\n const animation = this.builder.build([\n style({ opacity: 0.5, transform: 'scale(.3)' }),\n animate(this.rippleDuration, style({ opacity: 0, transform: 'scale(2)' }))\n ]).create(rippleElement);\n this.animationQueue.push(animation);\n animation.onDone(() => {\n this.animationQueue.splice(this.animationQueue.indexOf(animation), 1);\n target.removeChild(rippleElement);\n if (this.animationQueue.length < 1) {\n this.renderer.removeClass(target, this.rippleHostClass);\n }\n });\n animation.play();\n }\n}\nIgxRippleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRippleDirective, deps: [{ token: i1.AnimationBuilder }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nIgxRippleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: { rippleTarget: [\"igxRippleTarget\", \"rippleTarget\"], rippleColor: [\"igxRipple\", \"rippleColor\"], rippleDuration: [\"igxRippleDuration\", \"rippleDuration\"], centered: [\"igxRippleCentered\", \"centered\"], rippleDisabled: [\"igxRippleDisabled\", \"rippleDisabled\"] }, host: { listeners: { \"mousedown\": \"onMouseDown($event)\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRippleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxRipple]'\n }]\n }], ctorParameters: function () { return [{ type: i1.AnimationBuilder }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { rippleTarget: [{\n type: Input,\n args: ['igxRippleTarget']\n }], rippleColor: [{\n type: Input,\n args: ['igxRipple']\n }], rippleDuration: [{\n type: Input,\n args: ['igxRippleDuration']\n }], centered: [{\n type: Input,\n args: ['igxRippleCentered']\n }], rippleDisabled: [{\n type: Input,\n args: ['igxRippleDisabled']\n }], onMouseDown: [{\n type: HostListener,\n args: ['mousedown', ['$event']]\n }] } });\n/**\n * @hidden\n */\nclass IgxRippleModule {\n}\nIgxRippleModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRippleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxRippleModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRippleModule, declarations: [IgxRippleDirective], exports: [IgxRippleDirective] });\nIgxRippleModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRippleModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRippleModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxRippleDirective],\n exports: [IgxRippleDirective]\n }]\n }] });\n\nconst RadioLabelPosition = mkenum({\n BEFORE: 'before',\n AFTER: 'after'\n});\nlet nextId$3 = 0;\n/**\n * **Ignite UI for Angular Radio Button** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/radio_button.html)\n *\n * The Ignite UI Radio Button allows the user to select a single option from an available set of options that are listed side by side.\n *\n * Example:\n * ```html\n * \n * Simple radio button\n * \n * ```\n */\nclass IgxRadioComponent {\n /**\n * Gets the `nativeElement` of the igx-radio.\n *\n * @example\n * ```typescript\n * let igxRadioNativeElement = this.igxRadio.nativeElement;\n * ```\n */\n get nativeElement() {\n return this.nativeRadio.nativeElement;\n }\n /**\n * Sets/gets whether the radio button is required.\n * If not set, `required` will have value `false`.\n * ```html\n * \n * ```\n * ```typescript\n * let isRequired = this.radio.required;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n get required() {\n return this._required || this.nativeElement.hasAttribute('required');\n }\n set required(value) {\n this._required = (value === '') || value;\n }\n /**\n * Sets/gets the `disabled` attribute.\n * Default value is `false`.\n * ```html\n * \n * ```\n * ```typescript\n * let isDisabled = this.radio.disabled;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n get disabled() {\n return this._disabled || false;\n }\n set disabled(value) {\n this._disabled = (value === '') || value;\n }\n /**\n * Sets/gets whether the radio button is invalid.\n * Default value is `false`.\n * ```html\n * \n * ```\n * ```typescript\n * let isInvalid = this.radio.invalid;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n get invalid() {\n return this._invalid || false;\n }\n set invalid(value) {\n this._invalid = !!value;\n }\n constructor(cdr, renderer, ngControl) {\n this.cdr = cdr;\n this.renderer = renderer;\n this.ngControl = ngControl;\n /**\n * @hidden\n * @internal\n */\n this.destroy$ = new Subject();\n /**\n * Sets/gets the `id` of the radio component.\n * If not set, the `id` of the first radio component will be `\"igx-radio-0\"`.\n * ```html\n * \n * ```\n * ```typescript\n * let radioId = this.radio.id;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n this.id = `igx-radio-${nextId$3++}`;\n /**\n * Sets/gets the id of the `label` element in the radio component.\n * If not set, the id of the `label` in the first radio component will be `\"igx-radio-0-label\"`.\n * ```html\n * \n * ```\n * ```typescript\n * let labelId = this.radio.labelId;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n this.labelId = `${this.id}-label`;\n /**\n * Sets the value of the `tabindex` attribute.\n * ```html\n * \n * ```\n * ```typescript\n * let tabIndex = this.radio.tabindex;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n this.tabindex = null;\n /**\n * Enables/disables the ripple effect on the radio button..\n * If not set, the `disableRipple` will have value `false`.\n * ```html\n * \n * ```\n * ```typescript\n * let isDisabledRipple = this.radio.disableRipple;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n this.disableRipple = false;\n /**\n * Sets/gets the `aria-labelledby` attribute of the radio component.\n * If not set, the `aria-labelledby` will be equal to the value of `labelId` attribute.\n * ```html\n * \n * ```\n * ```typescript\n * let ariaLabelledBy = this.radio.ariaLabelledBy;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n this.ariaLabelledBy = this.labelId;\n /**\n * Sets/gets the `aria-label` attribute of the radio component.\n * ```html\n * \n * ```\n * ```typescript\n * let ariaLabel = this.radio.ariaLabel;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n this.ariaLabel = null;\n /**\n * An event that is emitted after the radio `value` is changed.\n * Provides references to the `IgxRadioComponent` and the `value` property as event arguments.\n *\n * @memberof IgxRadioComponent\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n this.change = new EventEmitter();\n /** @hidden @internal */\n this.blurRadio = new EventEmitter();\n /**\n * Returns the class of the radio component.\n * ```typescript\n * let radioClass = this.radio.cssClass;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n this.cssClass = 'igx-radio';\n /**\n * Sets/gets the `checked` attribute.\n * Default value is `false`.\n * ```html\n * \n * ```\n * ```typescript\n * let isChecked = this.radio.checked;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n this.checked = false;\n /**\n * Sets/gets whether the radio component is on focus.\n * Default value is `false`.\n * ```typescript\n * this.radio.focus = true;\n * ```\n * ```typescript\n * let isFocused = this.radio.focused;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n this.focused = false;\n /**\n * @hidden\n */\n this.inputId = `${this.id}-input`;\n /**\n * @hidden\n * @internal\n */\n this._required = false;\n /**\n * @hidden\n * @internal\n */\n this._invalid = false;\n /**\n * @hidden\n */\n this._onTouchedCallback = noop;\n /**\n * @hidden\n */\n this._onChangeCallback = noop;\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n /**\n * @hidden\n * @internal\n */\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n /**\n * @hidden\n * @internal\n */\n ngAfterViewInit() {\n var _a, _b;\n if (this.ngControl) {\n this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged.bind(this));\n if (this.ngControl.control.validator || this.ngControl.control.asyncValidator) {\n this._required = (_b = (_a = this.ngControl) === null || _a === void 0 ? void 0 : _a.control) === null || _b === void 0 ? void 0 : _b.hasValidator(Validators.required);\n this.cdr.detectChanges();\n }\n }\n }\n onStatusChanged() {\n if (this.disabled !== this.ngControl.disabled) {\n this.disabled = this.ngControl.disabled;\n }\n this.updateValidityState();\n }\n /**\n * @hidden\n * @internal\n */\n _changed(event) {\n if (event instanceof Event) {\n event.preventDefault();\n }\n }\n /**\n * @hidden\n * @internal\n */\n onKeyUp(event) {\n event.stopPropagation();\n if (!this.focused) {\n this.focused = true;\n }\n }\n /**\n * @hidden\n */\n _clicked() {\n this.select();\n }\n /**\n * Selects the current radio button.\n * ```typescript\n * this.radio.select();\n * ```\n *\n * @memberof IgxRadioComponent\n */\n select() {\n if (!this.checked) {\n this.checked = true;\n this.change.emit({ value: this.value, radio: this });\n this._onChangeCallback(this.value);\n }\n }\n /**\n * Deselects the current radio button.\n * ```typescript\n * this.radio.deselect();\n * ```\n *\n * @memberof IgxRadioComponent\n */\n deselect() {\n this.checked = false;\n this.focused = false;\n this.cdr.markForCheck();\n }\n /**\n * Checks whether the provided value is consistent to the current radio button.\n * If it is, the checked attribute will have value `true`;\n * ```typescript\n * this.radio.writeValue('radioButtonValue');\n * ```\n */\n writeValue(value) {\n this.value = this.value || value;\n if (value === this.value) {\n this.select();\n }\n else {\n this.deselect();\n }\n }\n /** @hidden */\n getEditElement() {\n return this.nativeRadio.nativeElement;\n }\n /**\n * @hidden\n */\n get labelClass() {\n switch (this.labelPosition) {\n case RadioLabelPosition.BEFORE:\n return `${this.cssClass}__label--before`;\n case RadioLabelPosition.AFTER:\n default:\n return `${this.cssClass}__label`;\n }\n }\n /**\n * @hidden\n */\n onBlur() {\n this.focused = false;\n this._onTouchedCallback();\n this.updateValidityState();\n this.blurRadio.emit();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this._onTouchedCallback = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n * @internal\n */\n updateValidityState() {\n if (this.ngControl) {\n if (!this.disabled && (this.ngControl.control.touched || this.ngControl.control.dirty)) {\n // the control is not disabled and is touched or dirty\n this._invalid = this.ngControl.invalid;\n }\n else {\n // if control is untouched, pristine, or disabled its state is initial. This is when user did not interact\n // with the radio or when form/control is reset\n this._invalid = false;\n }\n }\n else {\n this.checkNativeValidity();\n }\n }\n /**\n * A function to assign a native validity property of a radio.\n * This should be used when there's no ngControl\n *\n * @hidden\n * @internal\n */\n checkNativeValidity() {\n if (!this.disabled && this._required && !this.checked) {\n this._invalid = !this.focused;\n }\n }\n}\nIgxRadioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRadioComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i5.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxRadioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRadioComponent, selector: \"igx-radio\", inputs: { id: \"id\", labelId: \"labelId\", labelPosition: \"labelPosition\", value: \"value\", name: \"name\", tabindex: \"tabindex\", disableRipple: \"disableRipple\", required: \"required\", ariaLabelledBy: [\"aria-labelledby\", \"ariaLabelledBy\"], ariaLabel: [\"aria-label\", \"ariaLabel\"], checked: \"checked\", disabled: \"disabled\", invalid: \"invalid\" }, outputs: { change: \"change\" }, host: { listeners: { \"change\": \"_changed($event)\", \"keyup\": \"onKeyUp($event)\", \"click\": \"_clicked()\", \"blur\": \"onBlur()\" }, properties: { \"attr.id\": \"this.id\", \"class.igx-radio\": \"this.cssClass\", \"class.igx-radio--checked\": \"this.checked\", \"class.igx-radio--disabled\": \"this.disabled\", \"class.igx-radio--invalid\": \"this.invalid\", \"class.igx-radio--focused\": \"this.focused\" } }, providers: [{\n provide: EDITOR_PROVIDER,\n useExisting: IgxRadioComponent,\n multi: true\n }], viewQueries: [{ propertyName: \"nativeRadio\", first: true, predicate: [\"radio\"], descendants: true, static: true }, { propertyName: \"nativeLabel\", first: true, predicate: [\"nativeLabel\"], descendants: true, static: true }, { propertyName: \"placeholderLabel\", first: true, predicate: [\"placeholderLabel\"], descendants: true, static: true }], ngImport: i0, template: \"\\n\\n\\n
    \\n
    \\n\\n\\n \\n\\n\", dependencies: [{ kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRadioComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-radio', providers: [{\n provide: EDITOR_PROVIDER,\n useExisting: IgxRadioComponent,\n multi: true\n }], template: \"\\n\\n\\n
    \\n
    \\n\\n\\n \\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i5.NgControl, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }];\n }, propDecorators: { nativeRadio: [{\n type: ViewChild,\n args: ['radio', { static: true }]\n }], nativeLabel: [{\n type: ViewChild,\n args: ['nativeLabel', { static: true }]\n }], placeholderLabel: [{\n type: ViewChild,\n args: ['placeholderLabel', { static: true }]\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], labelId: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], value: [{\n type: Input\n }], name: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], disableRipple: [{\n type: Input\n }], required: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input,\n args: ['aria-labelledby']\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], change: [{\n type: Output\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-radio']\n }], checked: [{\n type: HostBinding,\n args: ['class.igx-radio--checked']\n }, {\n type: Input\n }], disabled: [{\n type: HostBinding,\n args: ['class.igx-radio--disabled']\n }, {\n type: Input\n }], invalid: [{\n type: HostBinding,\n args: ['class.igx-radio--invalid']\n }, {\n type: Input\n }], focused: [{\n type: HostBinding,\n args: ['class.igx-radio--focused']\n }], _changed: [{\n type: HostListener,\n args: ['change', ['$event']]\n }], onKeyUp: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }], _clicked: [{\n type: HostListener,\n args: ['click']\n }], onBlur: [{\n type: HostListener,\n args: ['blur']\n }] } });\n\n/**\n * @hidden\n */\nfunction DIR_DOCUMENT_FACTORY() {\n return inject(DOCUMENT);\n}\n/**\n * Injection token is used to inject the document into Directionality\n * which factory could be faked for testing purposes.\n *\n * We can't provide and mock the DOCUMENT token from platform-browser because configureTestingModule\n * allows override of the default providers, directive, pipes, modules of the test injector\n * which causes errors.\n *\n * @hidden\n */\nconst DIR_DOCUMENT = new InjectionToken('dir-doc', {\n providedIn: 'root',\n factory: DIR_DOCUMENT_FACTORY\n});\n/**\n * @hidden\n *\n * Bidirectional service that extracts the value of the direction attribute on the body or html elements.\n *\n * The dir attribute over the body element takes precedence.\n */\nclass IgxDirectionality {\n get value() {\n return this._dir;\n }\n get document() {\n return this._document;\n }\n get rtl() {\n return this._dir === 'rtl';\n }\n constructor(document) {\n this._document = document;\n const bodyDir = this._document.body ? this._document.body.dir : null;\n const htmlDir = this._document.documentElement ? this._document.documentElement.dir : null;\n const extractedDir = bodyDir || htmlDir;\n this._dir = (extractedDir === 'ltr' || extractedDir === 'rtl') ? extractedDir : 'ltr';\n }\n}\nIgxDirectionality.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDirectionality, deps: [{ token: DIR_DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });\nIgxDirectionality.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDirectionality, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDirectionality, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DIR_DOCUMENT]\n }] }];\n } });\n\n/**\n * Determines the Radio Group alignment\n */\nconst RadioGroupAlignment = mkenum({\n horizontal: 'horizontal',\n vertical: 'vertical'\n});\nlet nextId$2 = 0;\n/**\n * Radio group directive renders set of radio buttons.\n *\n * @igxModule IgxRadioModule\n *\n * @igxTheme igx-radio-theme\n *\n * @igxKeywords radiogroup, radio, button, input\n *\n * @igxGroup Data Entry & Display\n *\n * @remarks\n * The Ignite UI Radio Group allows the user to select a single option from an available set of options that are listed side by side.\n *\n * @example:\n * ```html\n * \n * \n * {{item}}\n * \n * \n * ```\n */\nclass IgxRadioGroupDirective {\n /**\n * Sets/gets the `value` attribute.\n *\n * @example\n * ```html\n * \n * ```\n */\n get value() {\n return this._value;\n }\n set value(newValue) {\n if (this._value !== newValue) {\n this._value = newValue;\n this._selectRadioButton();\n }\n }\n /**\n * Sets/gets the `name` attribute of the radio group component. All child radio buttons inherits this name.\n *\n * @example\n * ```html\n * \n * ```\n */\n get name() {\n return this._name;\n }\n set name(newValue) {\n if (this._name !== newValue) {\n this._name = newValue;\n this._setRadioButtonNames();\n }\n }\n /**\n * Sets/gets whether the radio group is required.\n *\n * @remarks\n * If not set, `required` will have value `false`.\n *\n * @example\n * ```html\n * \n * ```\n */\n get required() {\n return this._required;\n }\n set required(value) {\n this._required = value === '' || value;\n this._setRadioButtonsRequired();\n }\n /**\n * Sets/gets the selected child radio button.\n *\n * @example\n * ```typescript\n * let selectedButton = this.radioGroup.selected;\n * this.radioGroup.selected = selectedButton;\n * ```\n */\n get selected() {\n return this._selected;\n }\n set selected(selected) {\n if (this._selected !== selected) {\n this._selected = selected;\n this.value = selected ? selected.value : null;\n }\n }\n /**\n * Sets/gets whether the radio group is invalid.\n *\n * @remarks\n * If not set, `invalid` will have value `false`.\n *\n * @example\n * ```html\n * \n * ```\n */\n get invalid() {\n return this._invalid;\n }\n set invalid(value) {\n this._invalid = value === '' || value;\n this._setRadioButtonsInvalid();\n }\n handleClick(event) {\n event.stopPropagation();\n if (this.selected) {\n this.selected.nativeElement.focus();\n }\n }\n handleKeyDown(event) {\n const { key } = event;\n const buttons = this.radioButtons.filter(radio => !radio.disabled);\n const checked = buttons.find((radio) => radio.checked);\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) {\n let index = checked ? buttons.indexOf(checked) : -1;\n const ltr = this._directionality.value === 'ltr';\n switch (key) {\n case 'ArrowUp':\n index += -1;\n break;\n case 'ArrowLeft':\n index += ltr ? -1 : 1;\n break;\n case 'ArrowRight':\n index += ltr ? 1 : -1;\n break;\n default:\n index += 1;\n }\n if (index < 0)\n index = buttons.length - 1;\n if (index > buttons.length - 1)\n index = 0;\n buttons.forEach((radio) => {\n radio.deselect();\n radio.nativeElement.blur();\n });\n buttons[index].focused = true;\n buttons[index].nativeElement.focus();\n buttons[index].select();\n event.preventDefault();\n }\n if (event.key === \"Tab\") {\n buttons.forEach((radio) => {\n if (radio !== checked) {\n event.stopPropagation();\n }\n });\n }\n }\n /**\n * Returns the alignment of the `igx-radio-group`.\n * ```typescript\n * @ViewChild(\"MyRadioGroup\")\n * public radioGroup: IgxRadioGroupDirective;\n * ngAfterViewInit(){\n * let radioAlignment = this.radioGroup.alignment;\n * }\n * ```\n */\n get alignment() {\n return this.vertical ? RadioGroupAlignment.vertical : RadioGroupAlignment.horizontal;\n }\n /**\n * Allows you to set the radio group alignment.\n * Available options are `RadioGroupAlignment.horizontal` (default) and `RadioGroupAlignment.vertical`.\n * ```typescript\n * public alignment = RadioGroupAlignment.vertical;\n * //..\n * ```\n * ```html\n * \n * ```\n */\n set alignment(value) {\n this.vertical = value === RadioGroupAlignment.vertical;\n }\n /**\n * @hidden\n * @internal\n */\n ngAfterContentInit() {\n // The initial value can possibly be set by NgModel and it is possible that\n // the OnInit of the NgModel occurs after the OnInit of this class.\n this._isInitialized = true;\n this.radioButtons.changes.pipe(startWith(0), takeUntil(this.destroy$)).subscribe(() => {\n this.queryChange$.next();\n setTimeout(() => this._initRadioButtons());\n });\n }\n /**\n * @hidden\n * @internal\n */\n ngAfterViewInit() {\n var _a, _b;\n if (this.ngControl) {\n this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.invalid = false;\n });\n if (this.ngControl.control.validator || this.ngControl.control.asyncValidator) {\n this._required = (_b = (_a = this.ngControl) === null || _a === void 0 ? void 0 : _a.control) === null || _b === void 0 ? void 0 : _b.hasValidator(Validators.required);\n }\n }\n if (this.radioButtons) {\n this.radioButtons.forEach((button) => {\n button.blurRadio\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.updateValidityOnBlur();\n });\n fromEvent(button.nativeElement, 'keyup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event) => {\n this.updateOnKeyUp(event);\n });\n });\n }\n }\n /**\n * @hidden\n * @internal\n */\n updateValidityOnBlur() {\n this.radioButtons.forEach((button) => {\n button.focused = false;\n if (button.invalid) {\n this.invalid = true;\n }\n });\n }\n /**\n * @hidden\n * @internal\n */\n updateOnKeyUp(event) {\n const checked = this.radioButtons.find(x => x.checked);\n if (event.key === \"Tab\") {\n this.radioButtons.forEach((radio) => {\n if (radio === checked) {\n checked.focused = true;\n }\n });\n }\n }\n ngDoCheck() {\n this._updateTabIndex();\n }\n _updateTabIndex() {\n // Needed so that the keyboard navigation of a radio group\n // placed inside a dialog works properly\n if (this.radioButtons) {\n const checked = this.radioButtons.find(x => x.checked);\n if (checked) {\n this.radioButtons.forEach((button) => {\n checked.nativeElement.tabIndex = 0;\n if (button !== checked) {\n button.nativeElement.tabIndex = -1;\n button.focused = false;\n }\n });\n }\n }\n }\n /**\n * Sets the \"checked\" property value on the radio input element.\n *\n * @remarks\n * Checks whether the provided value is consistent to the current radio button.\n * If it is, the checked attribute will have value `true` and selected property will contain the selected `IgxRadioComponent`.\n *\n * @example\n * ```typescript\n * this.radioGroup.writeValue('radioButtonValue');\n * ```\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * Registers a function called when the control value changes.\n *\n * @hidden\n * @internal\n */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /**\n * Registers a function called when the control is touched.\n *\n * @hidden\n * @internal\n */\n registerOnTouched(fn) {\n if (this.radioButtons) {\n this.radioButtons.forEach((button) => {\n button.registerOnTouched(fn);\n });\n }\n }\n /**\n * @hidden\n * @internal\n */\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n constructor(ngControl, _directionality) {\n this.ngControl = ngControl;\n this._directionality = _directionality;\n /**\n * An event that is emitted after the radio group `value` is changed.\n *\n * @remarks\n * Provides references to the selected `IgxRadioComponent` and the `value` property as event arguments.\n *\n * @example\n * ```html\n * \n * ```\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n this.change = new EventEmitter();\n /**\n * The css class applied to the component.\n *\n * @hidden\n * @internal\n */\n this.cssClass = 'igx-radio-group';\n /**\n * Sets vertical alignment to the radio group, if `alignment` is set to `vertical`.\n * By default the alignment is horizontal.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.vertical = false;\n /**\n * @hidden\n * @internal\n */\n this._onChangeCallback = noop;\n /**\n * @hidden\n * @internal\n */\n this._name = `igx-radio-group-${nextId$2++}`;\n /**\n * @hidden\n * @internal\n */\n this._value = null;\n /**\n * @hidden\n * @internal\n */\n this._selected = null;\n /**\n * @hidden\n * @internal\n */\n this._isInitialized = false;\n /**\n * @hidden\n * @internal\n */\n this._required = false;\n /**\n * @hidden\n * @internal\n */\n this._invalid = false;\n /**\n * @hidden\n * @internal\n */\n this.destroy$ = new Subject();\n /**\n * @hidden\n * @internal\n */\n this.queryChange$ = new Subject();\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n /**\n * @hidden\n * @internal\n */\n _initRadioButtons() {\n if (this.radioButtons) {\n const props = { name: this._name, required: this._required };\n this.radioButtons.forEach((button) => {\n Object.assign(button, props);\n if (button.value === this._value) {\n button.checked = true;\n this._selected = button;\n }\n button.change.pipe(takeUntil(button.destroy$), takeUntil(this.destroy$), takeUntil(this.queryChange$)).subscribe((ev) => this._selectedRadioButtonChanged(ev));\n });\n }\n }\n /**\n * @hidden\n * @internal\n */\n _selectedRadioButtonChanged(args) {\n this.radioButtons.forEach((button) => {\n button.checked = button.id === args.radio.id;\n if (button.checked && button.ngControl) {\n this.invalid = button.ngControl.invalid;\n }\n else if (button.checked) {\n this.invalid = false;\n }\n });\n this._selected = args.radio;\n this._value = args.value;\n if (this._isInitialized) {\n this.change.emit(args);\n this._onChangeCallback(this.value);\n }\n }\n /**\n * @hidden\n * @internal\n */\n _setRadioButtonNames() {\n if (this.radioButtons) {\n this.radioButtons.forEach((button) => {\n button.name = this._name;\n });\n }\n }\n /**\n * @hidden\n * @internal\n */\n _selectRadioButton() {\n if (this.radioButtons) {\n this.radioButtons.forEach((button) => {\n if (this._value === null) {\n // no value - uncheck all radio buttons\n if (button.checked) {\n button.checked = false;\n }\n }\n else {\n if (this._value === button.value) {\n // selected button\n if (this._selected !== button) {\n this._selected = button;\n }\n if (!button.checked) {\n button.select();\n }\n }\n else {\n // non-selected button\n if (button.checked) {\n button.checked = false;\n }\n }\n }\n });\n }\n }\n /**\n * @hidden\n * @internal\n */\n _setRadioButtonsRequired() {\n if (this.radioButtons) {\n this.radioButtons.forEach((button) => {\n button.required = this._required;\n });\n }\n }\n /**\n * @hidden\n * @internal\n */\n _setRadioButtonsInvalid() {\n if (this.radioButtons) {\n this.radioButtons.forEach((button) => {\n button.invalid = this._invalid;\n });\n }\n }\n}\nIgxRadioGroupDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRadioGroupDirective, deps: [{ token: i5.NgControl, optional: true, self: true }, { token: IgxDirectionality }], target: i0.ɵɵFactoryTarget.Directive });\nIgxRadioGroupDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRadioGroupDirective, selector: \"igx-radio-group, [igxRadioGroup]\", inputs: { value: \"value\", name: \"name\", required: \"required\", selected: \"selected\", invalid: \"invalid\", alignment: \"alignment\" }, outputs: { change: \"change\" }, host: { listeners: { \"click\": \"handleClick($event)\", \"keydown\": \"handleKeyDown($event)\" }, properties: { \"class.igx-radio-group\": \"this.cssClass\", \"class.igx-radio-group--vertical\": \"this.vertical\" } }, queries: [{ propertyName: \"radioButtons\", predicate: IgxRadioComponent, descendants: true }], exportAs: [\"igxRadioGroup\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRadioGroupDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'igxRadioGroup',\n selector: 'igx-radio-group, [igxRadioGroup]'\n }]\n }], ctorParameters: function () {\n return [{ type: i5.NgControl, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: IgxDirectionality }];\n }, propDecorators: { radioButtons: [{\n type: ContentChildren,\n args: [IgxRadioComponent, { descendants: true }]\n }], value: [{\n type: Input\n }], name: [{\n type: Input\n }], required: [{\n type: Input\n }], selected: [{\n type: Input\n }], invalid: [{\n type: Input\n }], change: [{\n type: Output\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-radio-group']\n }], vertical: [{\n type: HostBinding,\n args: ['class.igx-radio-group--vertical']\n }], handleClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], handleKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], alignment: [{\n type: Input\n }] } });\n/**\n * @hidden\n */\nclass IgxRadioModule {\n}\nIgxRadioModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRadioModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxRadioModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRadioModule, declarations: [IgxRadioGroupDirective, IgxRadioComponent], imports: [IgxRippleModule], exports: [IgxRadioGroupDirective, IgxRadioComponent] });\nIgxRadioModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRadioModule, imports: [IgxRippleModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRadioModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxRadioGroupDirective, IgxRadioComponent],\n exports: [IgxRadioGroupDirective, IgxRadioComponent],\n imports: [IgxRippleModule]\n }]\n }] });\n\nclass IgxTextHighlightDirective {\n /**\n * The underlying value of the element that will be highlighted.\n *\n * ```typescript\n * // get\n * const elementValue = this.textHighlight.value;\n * ```\n *\n * ```html\n * \n * \n * \n * ```\n */\n get value() {\n return this._value;\n }\n set value(value) {\n if (value === undefined || value === null) {\n this._value = '';\n }\n else {\n this._value = value;\n }\n }\n /**\n * @hidden\n */\n get lastSearchInfo() {\n return this._lastSearchInfo;\n }\n constructor(element, renderer) {\n this.element = element;\n this.renderer = renderer;\n /**\n * Identifies the highlight within a unique group.\n * This allows it to have several different highlight groups,\n * with each of them having their own active highlight.\n *\n * ```html\n * \n * \n * ```\n */\n this.groupName = '';\n this.destroy$ = new Subject();\n this._value = '';\n this._div = null;\n this._observer = null;\n this._nodeWasRemoved = false;\n this._forceEvaluation = false;\n this._activeElementIndex = -1;\n this._defaultCssClass = 'igx-highlight';\n this._defaultActiveCssClass = 'igx-highlight--active';\n IgxTextHighlightDirective.onActiveElementChanged.pipe(takeUntil(this.destroy$)).subscribe((groupName) => {\n if (this.groupName === groupName) {\n if (this._activeElementIndex !== -1) {\n this.deactivate();\n }\n this.activateIfNecessary();\n }\n });\n }\n /**\n * Activates the highlight at a given index.\n * (if such index exists)\n */\n static setActiveHighlight(groupName, highlight) {\n IgxTextHighlightDirective.highlightGroupsMap.set(groupName, highlight);\n IgxTextHighlightDirective.onActiveElementChanged.emit(groupName);\n }\n /**\n * Clears any existing highlight.\n */\n static clearActiveHighlight(groupName) {\n IgxTextHighlightDirective.highlightGroupsMap.set(groupName, {\n index: -1\n });\n IgxTextHighlightDirective.onActiveElementChanged.emit(groupName);\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.clearHighlight();\n if (this._observer !== null) {\n this._observer.disconnect();\n }\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (changes.value && !changes.value.firstChange) {\n this._valueChanged = true;\n }\n else if ((changes.row !== undefined && !changes.row.firstChange) ||\n (changes.column !== undefined && !changes.column.firstChange) ||\n (changes.page !== undefined && !changes.page.firstChange)) {\n if (this._activeElementIndex !== -1) {\n this.deactivate();\n }\n this.activateIfNecessary();\n }\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this.parentElement = this.renderer.parentNode(this.element.nativeElement);\n if (IgxTextHighlightDirective.highlightGroupsMap.has(this.groupName) === false) {\n IgxTextHighlightDirective.highlightGroupsMap.set(this.groupName, {\n index: -1\n });\n }\n this._lastSearchInfo = {\n searchedText: '',\n content: this.value,\n matchCount: 0,\n caseSensitive: false,\n exactMatch: false\n };\n this._container = this.parentElement.firstElementChild;\n }\n /**\n * @hidden\n */\n ngAfterViewChecked() {\n if (this._valueChanged) {\n this.highlight(this._lastSearchInfo.searchedText, this._lastSearchInfo.caseSensitive, this._lastSearchInfo.exactMatch);\n this.activateIfNecessary();\n this._valueChanged = false;\n }\n }\n /**\n * Clears the existing highlight and highlights the searched text.\n * Returns how many times the element contains the searched text.\n */\n highlight(text, caseSensitive, exactMatch) {\n const caseSensitiveResolved = caseSensitive ? true : false;\n const exactMatchResolved = exactMatch ? true : false;\n if (this.searchNeedsEvaluation(text, caseSensitiveResolved, exactMatchResolved)) {\n this._lastSearchInfo.searchedText = text;\n this._lastSearchInfo.caseSensitive = caseSensitiveResolved;\n this._lastSearchInfo.exactMatch = exactMatchResolved;\n this._lastSearchInfo.content = this.value;\n if (text === '' || text === undefined || text === null) {\n this.clearHighlight();\n }\n else {\n this.clearChildElements(true);\n this._lastSearchInfo.matchCount = this.getHighlightedText(text, caseSensitive, exactMatch);\n }\n }\n else if (this._nodeWasRemoved) {\n this._lastSearchInfo.searchedText = text;\n this._lastSearchInfo.caseSensitive = caseSensitiveResolved;\n this._lastSearchInfo.exactMatch = exactMatchResolved;\n }\n return this._lastSearchInfo.matchCount;\n }\n /**\n * Clears any existing highlight.\n */\n clearHighlight() {\n this.clearChildElements(false);\n this._lastSearchInfo.searchedText = '';\n this._lastSearchInfo.matchCount = 0;\n }\n /**\n * Activates the highlight if it is on the currently active row and column.\n */\n activateIfNecessary() {\n const group = IgxTextHighlightDirective.highlightGroupsMap.get(this.groupName);\n if (group.index >= 0 && group.column === this.column && group.row === this.row && compareMaps(this.metadata, group.metadata)) {\n this.activate(group.index);\n }\n }\n /**\n * Attaches a MutationObserver to the parentElement and watches for when the container element is removed/readded to the DOM.\n * Should be used only when necessary as using many observers may lead to performance degradation.\n */\n observe() {\n if (this._observer === null) {\n const callback = (mutationList) => {\n mutationList.forEach((mutation) => {\n const removedNodes = Array.from(mutation.removedNodes);\n removedNodes.forEach((n) => {\n if (n === this._container) {\n this._nodeWasRemoved = true;\n this.clearChildElements(false);\n }\n });\n const addedNodes = Array.from(mutation.addedNodes);\n addedNodes.forEach((n) => {\n if (n === this.parentElement.firstElementChild && this._nodeWasRemoved) {\n this._container = this.parentElement.firstElementChild;\n this._nodeWasRemoved = false;\n this._forceEvaluation = true;\n this.highlight(this._lastSearchInfo.searchedText, this._lastSearchInfo.caseSensitive, this._lastSearchInfo.exactMatch);\n this._forceEvaluation = false;\n this.activateIfNecessary();\n this._observer.disconnect();\n this._observer = null;\n }\n });\n });\n };\n this._observer = new MutationObserver(callback);\n this._observer.observe(this.parentElement, { childList: true });\n }\n }\n activate(index) {\n this.deactivate();\n if (this._div !== null) {\n const spans = this._div.querySelectorAll('span');\n this._activeElementIndex = index;\n if (spans.length <= index) {\n return;\n }\n const elementToActivate = spans[index];\n this.renderer.addClass(elementToActivate, this._defaultActiveCssClass);\n this.renderer.addClass(elementToActivate, this.activeCssClass);\n }\n }\n deactivate() {\n if (this._activeElementIndex === -1) {\n return;\n }\n const spans = this._div.querySelectorAll('span');\n if (spans.length <= this._activeElementIndex) {\n this._activeElementIndex = -1;\n return;\n }\n const elementToDeactivate = spans[this._activeElementIndex];\n this.renderer.removeClass(elementToDeactivate, this._defaultActiveCssClass);\n this.renderer.removeClass(elementToDeactivate, this.activeCssClass);\n this._activeElementIndex = -1;\n }\n clearChildElements(originalContentHidden) {\n this.renderer.setProperty(this.element.nativeElement, 'hidden', originalContentHidden);\n if (this._div !== null) {\n this.renderer.removeChild(this.parentElement, this._div);\n this._div = null;\n this._activeElementIndex = -1;\n }\n }\n getHighlightedText(searchText, caseSensitive, exactMatch) {\n this.appendDiv();\n const stringValue = String(this.value);\n const contentStringResolved = !caseSensitive ? stringValue.toLowerCase() : stringValue;\n const searchTextResolved = !caseSensitive ? searchText.toLowerCase() : searchText;\n let matchCount = 0;\n if (exactMatch) {\n if (contentStringResolved === searchTextResolved) {\n this.appendSpan(`${stringValue}`);\n matchCount++;\n }\n else {\n this.appendText(stringValue);\n }\n }\n else {\n let foundIndex = contentStringResolved.indexOf(searchTextResolved, 0);\n let previousMatchEnd = 0;\n while (foundIndex !== -1) {\n const start = foundIndex;\n const end = foundIndex + searchTextResolved.length;\n this.appendText(stringValue.substring(previousMatchEnd, start));\n // eslint-disable-next-line max-len\n this.appendSpan(`${stringValue.substring(start, end)}`);\n previousMatchEnd = end;\n matchCount++;\n foundIndex = contentStringResolved.indexOf(searchTextResolved, end);\n }\n this.appendText(stringValue.substring(previousMatchEnd, stringValue.length));\n }\n return matchCount;\n }\n appendText(text) {\n const textElement = this.renderer.createText(text);\n this.renderer.appendChild(this._div, textElement);\n }\n appendSpan(outerHTML) {\n const span = this.renderer.createElement('span');\n this.renderer.appendChild(this._div, span);\n this.renderer.setProperty(span, 'outerHTML', outerHTML);\n }\n appendDiv() {\n this._div = this.renderer.createElement('div');\n if (this.containerClass) {\n this.renderer.addClass(this._div, this.containerClass);\n }\n this.renderer.appendChild(this.parentElement, this._div);\n }\n searchNeedsEvaluation(text, caseSensitive, exactMatch) {\n const searchedText = this._lastSearchInfo.searchedText;\n return !this._nodeWasRemoved &&\n (searchedText === null ||\n searchedText !== text ||\n this._lastSearchInfo.content !== this.value ||\n this._lastSearchInfo.caseSensitive !== caseSensitive ||\n this._lastSearchInfo.exactMatch !== exactMatch ||\n this._forceEvaluation);\n }\n}\nIgxTextHighlightDirective.highlightGroupsMap = new Map();\nIgxTextHighlightDirective.onActiveElementChanged = new EventEmitter();\nIgxTextHighlightDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTextHighlightDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTextHighlightDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTextHighlightDirective, selector: \"[igxTextHighlight]\", inputs: { cssClass: \"cssClass\", activeCssClass: \"activeCssClass\", containerClass: \"containerClass\", groupName: \"groupName\", value: \"value\", row: \"row\", column: \"column\", metadata: \"metadata\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTextHighlightDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxTextHighlight]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { cssClass: [{\n type: Input,\n args: ['cssClass']\n }], activeCssClass: [{\n type: Input,\n args: ['activeCssClass']\n }], containerClass: [{\n type: Input,\n args: ['containerClass']\n }], groupName: [{\n type: Input,\n args: ['groupName']\n }], value: [{\n type: Input,\n args: ['value']\n }], row: [{\n type: Input,\n args: ['row']\n }], column: [{\n type: Input,\n args: ['column']\n }], metadata: [{\n type: Input\n }] } });\n/**\n * @hidden\n */\nclass IgxTextHighlightModule {\n}\nIgxTextHighlightModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTextHighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxTextHighlightModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTextHighlightModule, declarations: [IgxTextHighlightDirective], exports: [IgxTextHighlightDirective] });\nIgxTextHighlightModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTextHighlightModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTextHighlightModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxTextHighlightDirective],\n exports: [IgxTextHighlightDirective]\n }]\n }] });\n\nclass IgxTextSelectionDirective {\n /**\n * Returns whether the input element is selectable through the directive.\n *\n * ```typescript\n * // get\n * @ViewChild('firstName',\n * {read: IgxTextSelectionDirective})\n * public firstName: IgxTextSelectionDirective;\n *\n * public getFirstNameSelectionStatus() {\n * return this.firstName.selected;\n * }\n * ```\n */\n get selected() {\n return this.selectionState;\n }\n /**\n * Determines whether the input element could be selected through the directive.\n *\n * ```html\n * \n * \n * \n *\n * \n * \n * ```\n */\n set selected(val) {\n this.selectionState = val;\n }\n /**\n * Returns the nativeElement of the element where the directive was applied.\n *\n * ```html\n * \n * \n * ```\n *\n * ```typescript\n * @ViewChild('firstName',\n * {read: IgxTextSelectionDirective})\n * public inputElement: IgxTextSelectionDirective;\n *\n * public getNativeElement() {\n * return this.inputElement.nativeElement;\n * }\n * ```\n */\n get nativeElement() {\n return this.element.nativeElement;\n }\n constructor(element) {\n this.element = element;\n this.selectionState = true;\n }\n /**\n * @hidden\n */\n onFocus() {\n this.trigger();\n }\n /**\n * Triggers the selection of the element if it is marked as selectable.\n *\n * ```html\n * \n * \n * ```\n *\n * ```typescript\n * @ViewChild('firstName',\n * {read: IgxTextSelectionDirective})\n * public inputElement: IgxTextSelectionDirective;\n *\n * public triggerElementSelection() {\n * this.inputElement.trigger();\n * }\n * ```\n */\n trigger() {\n if (this.selected && this.nativeElement.value.length) {\n // delay the select call to avoid race conditions in case the directive is applied\n // to an element with its own focus handler\n requestAnimationFrame(() => this.nativeElement.select());\n }\n }\n}\nIgxTextSelectionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTextSelectionDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTextSelectionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTextSelectionDirective, selector: \"[igxTextSelection]\", inputs: { selected: [\"igxTextSelection\", \"selected\"] }, host: { listeners: { \"focus\": \"onFocus()\" } }, exportAs: [\"igxTextSelection\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTextSelectionDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'igxTextSelection',\n selector: '[igxTextSelection]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { selected: [{\n type: Input,\n args: ['igxTextSelection']\n }], onFocus: [{\n type: HostListener,\n args: ['focus']\n }] } });\n/**\n * @hidden\n */\nclass IgxTextSelectionModule {\n}\nIgxTextSelectionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTextSelectionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxTextSelectionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTextSelectionModule, declarations: [IgxTextSelectionDirective], exports: [IgxTextSelectionDirective] });\nIgxTextSelectionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTextSelectionModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTextSelectionModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxTextSelectionDirective],\n exports: [IgxTextSelectionDirective]\n }]\n }] });\n\n/**\n * @hidden\n */\nclass IgxTemplateOutletDirective {\n constructor(_viewContainerRef, _zone, cdr) {\n this._viewContainerRef = _viewContainerRef;\n this._zone = _zone;\n this.cdr = cdr;\n this.viewCreated = new EventEmitter();\n this.viewMoved = new EventEmitter();\n this.cachedViewLoaded = new EventEmitter();\n this.beforeViewDetach = new EventEmitter();\n /**\n * The embedded views cache. Collection is key-value paired.\n * Key is the template type, value is another key-value paired collection\n * where the key is the template id and value is the embedded view for the related template.\n */\n this._embeddedViewsMap = new Map();\n }\n ngOnChanges(changes) {\n const actionType = this._getActionType(changes);\n switch (actionType) {\n case TemplateOutletAction.CreateView:\n this._recreateView();\n break;\n case TemplateOutletAction.MoveView:\n this._moveView();\n break;\n case TemplateOutletAction.UseCachedView:\n this._useCachedView();\n break;\n case TemplateOutletAction.UpdateViewContext:\n this._updateExistingContext(this.igxTemplateOutletContext);\n break;\n }\n }\n cleanCache() {\n this._embeddedViewsMap.forEach((collection) => {\n collection.forEach((item => {\n if (!item.destroyed) {\n item.destroy();\n }\n }));\n collection.clear();\n });\n this._embeddedViewsMap.clear();\n }\n cleanView(tmplID) {\n const embViewCollection = this._embeddedViewsMap.get(tmplID.type);\n const embView = embViewCollection === null || embViewCollection === void 0 ? void 0 : embViewCollection.get(tmplID.id);\n if (embView) {\n embView.destroy();\n this._embeddedViewsMap.get(tmplID.type).delete(tmplID.id);\n }\n }\n _recreateView() {\n const prevIndex = this._viewRef ? this._viewContainerRef.indexOf(this._viewRef) : -1;\n // detach old and create new\n if (prevIndex !== -1) {\n this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n this._viewContainerRef.detach(prevIndex);\n }\n if (this.igxTemplateOutlet) {\n this._viewRef = this._viewContainerRef.createEmbeddedView(this.igxTemplateOutlet, this.igxTemplateOutletContext);\n this.viewCreated.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n const tmplId = this.igxTemplateOutletContext['templateID'];\n if (tmplId) {\n // if context contains a template id, check if we have a view for that template already stored in the cache\n // if not create a copy and add it to the cache in detached state.\n // Note: Views in detached state do not appear in the DOM, however they remain stored in memory.\n const resCollection = this._embeddedViewsMap.get(this.igxTemplateOutletContext['templateID'].type);\n const res = resCollection === null || resCollection === void 0 ? void 0 : resCollection.get(this.igxTemplateOutletContext['templateID'].id);\n if (!res) {\n this._embeddedViewsMap.set(this.igxTemplateOutletContext['templateID'].type, new Map([[this.igxTemplateOutletContext['templateID'].id, this._viewRef]]));\n }\n }\n }\n }\n _moveView() {\n // using external view and inserting it in current view.\n const view = this.igxTemplateOutletContext['moveView'];\n const owner = this.igxTemplateOutletContext['owner'];\n if (view !== this._viewRef) {\n if (owner._viewContainerRef.indexOf(view) !== -1) {\n // detach in case view it is attached somewhere else at the moment.\n this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n owner._viewContainerRef.detach(owner._viewContainerRef.indexOf(view));\n }\n if (this._viewRef && this._viewContainerRef.indexOf(this._viewRef) !== -1) {\n this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n this._viewContainerRef.detach(this._viewContainerRef.indexOf(this._viewRef));\n }\n this._viewRef = view;\n this._viewContainerRef.insert(view, 0);\n this._updateExistingContext(this.igxTemplateOutletContext);\n this.viewMoved.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n }\n else {\n this._updateExistingContext(this.igxTemplateOutletContext);\n }\n }\n _useCachedView() {\n var _a;\n // use view for specific template cached in the current template outlet\n const tmplID = this.igxTemplateOutletContext['templateID'];\n const cachedView = tmplID ?\n (_a = this._embeddedViewsMap.get(tmplID.type)) === null || _a === void 0 ? void 0 : _a.get(tmplID.id) :\n null;\n // if view exists, but template has been changed and there is a view in the cache with the related template\n // then detach old view and insert the stored one with the matching template\n // after that update its context.\n if (this._viewContainerRef.length > 0) {\n this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n this._viewContainerRef.detach(this._viewContainerRef.indexOf(this._viewRef));\n }\n this._viewRef = cachedView;\n const oldContext = this._cloneContext(cachedView.context);\n this._viewContainerRef.insert(this._viewRef, 0);\n this._updateExistingContext(this.igxTemplateOutletContext);\n this.cachedViewLoaded.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext, oldContext });\n }\n _shouldRecreateView(changes) {\n const ctxChange = changes['igxTemplateOutletContext'];\n return !!changes['igxTemplateOutlet'] || (ctxChange && this._hasContextShapeChanged(ctxChange));\n }\n _hasContextShapeChanged(ctxChange) {\n const prevCtxKeys = Object.keys(ctxChange.previousValue || {});\n const currCtxKeys = Object.keys(ctxChange.currentValue || {});\n if (prevCtxKeys.length === currCtxKeys.length) {\n for (const propName of currCtxKeys) {\n if (prevCtxKeys.indexOf(propName) === -1) {\n return true;\n }\n }\n return false;\n }\n else {\n return true;\n }\n }\n _updateExistingContext(ctx) {\n for (const propName of Object.keys(ctx)) {\n this._viewRef.context[propName] = this.igxTemplateOutletContext[propName];\n }\n }\n _cloneContext(ctx) {\n const clone = {};\n for (const propName of Object.keys(ctx)) {\n clone[propName] = ctx[propName];\n }\n return clone;\n }\n _getActionType(changes) {\n var _a;\n const movedView = this.igxTemplateOutletContext['moveView'];\n const tmplID = this.igxTemplateOutletContext['templateID'];\n const cachedView = tmplID ?\n (_a = this._embeddedViewsMap.get(tmplID.type)) === null || _a === void 0 ? void 0 : _a.get(tmplID.id) :\n null;\n const shouldRecreate = this._shouldRecreateView(changes);\n if (movedView) {\n // view is moved from external source\n return TemplateOutletAction.MoveView;\n }\n else if (shouldRecreate && cachedView) {\n // should recreate (template or context change) and there is a matching template in cache\n return TemplateOutletAction.UseCachedView;\n }\n else if (!this._viewRef || shouldRecreate) {\n // no view or should recreate\n return TemplateOutletAction.CreateView;\n }\n else if (this.igxTemplateOutletContext) {\n // has context, update context\n return TemplateOutletAction.UpdateViewContext;\n }\n }\n}\nIgxTemplateOutletDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTemplateOutletDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTemplateOutletDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTemplateOutletDirective, selector: \"[igxTemplateOutlet]\", inputs: { igxTemplateOutletContext: \"igxTemplateOutletContext\", igxTemplateOutlet: \"igxTemplateOutlet\" }, outputs: { viewCreated: \"viewCreated\", viewMoved: \"viewMoved\", cachedViewLoaded: \"cachedViewLoaded\", beforeViewDetach: \"beforeViewDetach\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTemplateOutletDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxTemplateOutlet]' }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { igxTemplateOutletContext: [{\n type: Input\n }], igxTemplateOutlet: [{\n type: Input\n }], viewCreated: [{\n type: Output\n }], viewMoved: [{\n type: Output\n }], cachedViewLoaded: [{\n type: Output\n }], beforeViewDetach: [{\n type: Output\n }] } });\nvar TemplateOutletAction;\n(function (TemplateOutletAction) {\n TemplateOutletAction[TemplateOutletAction[\"CreateView\"] = 0] = \"CreateView\";\n TemplateOutletAction[TemplateOutletAction[\"MoveView\"] = 1] = \"MoveView\";\n TemplateOutletAction[TemplateOutletAction[\"UseCachedView\"] = 2] = \"UseCachedView\";\n TemplateOutletAction[TemplateOutletAction[\"UpdateViewContext\"] = 3] = \"UpdateViewContext\";\n})(TemplateOutletAction || (TemplateOutletAction = {}));\n/**\n * @hidden\n */\nclass IgxTemplateOutletModule {\n}\nIgxTemplateOutletModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTemplateOutletModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxTemplateOutletModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTemplateOutletModule, declarations: [IgxTemplateOutletDirective], imports: [CommonModule], exports: [IgxTemplateOutletDirective] });\nIgxTemplateOutletModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTemplateOutletModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTemplateOutletModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxTemplateOutletDirective],\n exports: [IgxTemplateOutletDirective],\n imports: [CommonModule]\n }]\n }] });\n\nlet NEXT_ID$q = 0;\n/**\n * **Ignite UI for Angular Tooltip** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tooltip)\n *\n * The Ignite UI for Angular Tooltip directive is used to mark an HTML element in the markup as one that should behave as a tooltip.\n * The tooltip is used in combination with the Ignite UI for Angular Tooltip Target by assigning the exported tooltip reference to the\n * respective target's selector property.\n *\n * Example:\n * ```html\n * \n * Hello there, I am a tooltip!\n * ```\n */\nclass IgxTooltipDirective extends IgxToggleDirective {\n /**\n * @hidden\n */\n get hiddenClass() {\n return this.collapsed;\n }\n /**\n * @hidden\n */\n get defaultClass() {\n return !this.collapsed;\n }\n /**\n * Get the role attribute of the tooltip.\n *\n * ```typescript\n * let tooltipRole = this.tooltip.role;\n * ```\n */\n get role() {\n return 'tooltip';\n }\n /** @hidden */\n constructor(elementRef, cdr, overlayService, navigationService) {\n // D.P. constructor duplication due to es6 compilation, might be obsolete in the future\n super(elementRef, cdr, overlayService, navigationService);\n /**\n * Identifier for the tooltip.\n * If this is property is not explicitly set, it will be automatically generated.\n *\n * ```typescript\n * let tooltipId = this.tooltip.id;\n * ```\n */\n this.id = `igx-tooltip-${NEXT_ID$q++}`;\n /**\n * @hidden\n * Returns whether close time out has started\n */\n this.toBeHidden = false;\n /**\n * @hidden\n * Returns whether open time out has started\n */\n this.toBeShown = false;\n }\n /**\n * If there is open animation in progress this method will finish is.\n * If there is no open animation in progress this method will open the toggle with no animation.\n *\n * @param overlaySettings setting to use for opening the toggle\n */\n forceOpen(overlaySettings) {\n const info = this.overlayService.getOverlayById(this._overlayId);\n const hasOpenAnimation = info ? info.openAnimationPlayer : false;\n if (hasOpenAnimation) {\n info.openAnimationPlayer.finish();\n info.openAnimationPlayer.reset();\n info.openAnimationPlayer = null;\n }\n else if (this.collapsed) {\n const animation = overlaySettings.positionStrategy.settings.openAnimation;\n overlaySettings.positionStrategy.settings.openAnimation = null;\n this.open(overlaySettings);\n overlaySettings.positionStrategy.settings.openAnimation = animation;\n }\n }\n /**\n * If there is close animation in progress this method will finish is.\n * If there is no close animation in progress this method will close the toggle with no animation.\n *\n * @param overlaySettings settings to use for closing the toggle\n */\n forceClose(overlaySettings) {\n const info = this.overlayService.getOverlayById(this._overlayId);\n const hasCloseAnimation = info ? info.closeAnimationPlayer : false;\n if (hasCloseAnimation) {\n info.closeAnimationPlayer.finish();\n info.closeAnimationPlayer.reset();\n info.closeAnimationPlayer = null;\n }\n else if (!this.collapsed) {\n const animation = overlaySettings.positionStrategy.settings.closeAnimation;\n overlaySettings.positionStrategy.settings.closeAnimation = null;\n this.close();\n overlaySettings.positionStrategy.settings.closeAnimation = animation;\n }\n }\n}\nIgxTooltipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxOverlayService }, { token: IgxNavigationService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTooltipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTooltipDirective, selector: \"[igxTooltip]\", inputs: { context: \"context\", id: \"id\" }, host: { properties: { \"class.igx-tooltip--hidden\": \"this.hiddenClass\", \"class.igx-tooltip--desktop\": \"this.defaultClass\", \"attr.id\": \"this.id\", \"attr.role\": \"this.role\" } }, exportAs: [\"tooltip\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTooltipDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'tooltip',\n selector: '[igxTooltip]'\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxOverlayService, decorators: [{\n type: Inject,\n args: [IgxOverlayService]\n }] }, { type: IgxNavigationService, decorators: [{\n type: Optional\n }] }];\n }, propDecorators: { hiddenClass: [{\n type: HostBinding,\n args: ['class.igx-tooltip--hidden']\n }], defaultClass: [{\n type: HostBinding,\n args: ['class.igx-tooltip--desktop']\n }], context: [{\n type: Input,\n args: ['context']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }] } });\n\nclass IgxTooltipComponent {\n}\nIgxTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTooltipComponent, selector: \"igx-tooltip\", viewQueries: [{ propertyName: \"tooltip\", first: true, predicate: IgxTooltipDirective, descendants: true, static: true }], ngImport: i0, template: \"{{content}}\", dependencies: [{ kind: \"directive\", type: IgxTooltipDirective, selector: \"[igxTooltip]\", inputs: [\"context\", \"id\"], exportAs: [\"tooltip\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTooltipComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-tooltip', template: \"{{content}}\" }]\n }], propDecorators: { tooltip: [{\n type: ViewChild,\n args: [IgxTooltipDirective, { static: true }]\n }] } });\n\n/**\n * **Ignite UI for Angular Tooltip Target** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tooltip)\n *\n * The Ignite UI for Angular Tooltip Target directive is used to mark an HTML element in the markup as one that has a tooltip.\n * The tooltip target is used in combination with the Ignite UI for Angular Tooltip by assigning the exported tooltip reference to the\n * target's selector property.\n *\n * Example:\n * ```html\n * \n * Hello there, I am a tooltip!\n * ```\n */\nclass IgxTooltipTargetDirective extends IgxToggleActionDirective {\n /**\n * @hidden\n */\n set target(target) {\n if (target !== null && target !== '') {\n this._target = target;\n }\n }\n /**\n * @hidden\n */\n get target() {\n if (typeof this._target === 'string') {\n return this._navigationService.get(this._target);\n }\n return this._target;\n }\n /**\n * @hidden\n */\n set tooltip(content) {\n if (!this.target && (typeof content === 'string' || content instanceof String)) {\n const tooltipComponent = this._viewContainerRef.createComponent(IgxTooltipComponent);\n tooltipComponent.instance.content = content;\n this._target = tooltipComponent.instance.tooltip;\n }\n }\n /**\n * Gets the respective native element of the directive.\n *\n * ```typescript\n * let tooltipTargetElement = this.tooltipTarget.nativeElement;\n * ```\n */\n get nativeElement() {\n return this._element.nativeElement;\n }\n /**\n * Indicates if the tooltip that is is associated with this target is currently hidden.\n *\n * ```typescript\n * let tooltipHiddenValue = this.tooltipTarget.tooltipHidden;\n * ```\n */\n get tooltipHidden() {\n return !this.target || this.target.collapsed;\n }\n constructor(_element, _navigationService, _viewContainerRef) {\n super(_element, _navigationService);\n this._element = _element;\n this._navigationService = _navigationService;\n this._viewContainerRef = _viewContainerRef;\n /**\n * Gets/sets the amount of milliseconds that should pass before showing the tooltip.\n *\n * ```typescript\n * // get\n * let tooltipShowDelay = this.tooltipTarget.showDelay;\n * ```\n *\n * ```html\n * \n * \n * Hello there, I am a tooltip!\n * ```\n */\n this.showDelay = 500;\n /**\n * Gets/sets the amount of milliseconds that should pass before hiding the tooltip.\n *\n * ```typescript\n * // get\n * let tooltipHideDelay = this.tooltipTarget.hideDelay;\n * ```\n *\n * ```html\n * \n * \n * Hello there, I am a tooltip!\n * ```\n */\n this.hideDelay = 500;\n /**\n * Specifies if the tooltip should not show when hovering its target with the mouse. (defaults to false)\n * While setting this property to 'true' will disable the user interactions that shows/hides the tooltip,\n * the developer will still be able to show/hide the tooltip through the API.\n *\n * ```typescript\n * // get\n * let tooltipDisabledValue = this.tooltipTarget.tooltipDisabled;\n * ```\n *\n * ```html\n * \n * \n * Hello there, I am a tooltip!\n * ```\n */\n this.tooltipDisabled = false;\n /**\n * Emits an event when the tooltip that is associated with this target starts showing.\n * This event is fired before the start of the countdown to showing the tooltip.\n *\n * ```typescript\n * tooltipShowing(args: ITooltipShowEventArgs) {\n * alert(\"Tooltip started showing!\");\n * }\n * ```\n *\n * ```html\n * \n * Hello there, I am a tooltip!\n * ```\n */\n this.tooltipShow = new EventEmitter();\n /**\n * Emits an event when the tooltip that is associated with this target starts hiding.\n * This event is fired before the start of the countdown to hiding the tooltip.\n *\n * ```typescript\n * tooltipHiding(args: ITooltipHideEventArgs) {\n * alert(\"Tooltip started hiding!\");\n * }\n * ```\n *\n * ```html\n * \n * Hello there, I am a tooltip!\n * ```\n */\n this.tooltipHide = new EventEmitter();\n this.destroy$ = new Subject();\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.target.collapsed) {\n this.target.forceClose(this.mergedOverlaySettings);\n }\n }\n /**\n * @hidden\n */\n onMouseEnter() {\n if (this.tooltipDisabled) {\n return;\n }\n this.checkOutletAndOutsideClick();\n const shouldReturn = this.preMouseEnterCheck();\n if (shouldReturn) {\n return;\n }\n const showingArgs = { target: this, tooltip: this.target, cancel: false };\n this.tooltipShow.emit(showingArgs);\n if (showingArgs.cancel) {\n return;\n }\n this.target.toBeShown = true;\n this.target.timeoutId = setTimeout(() => {\n this.target.open(this.mergedOverlaySettings); // Call open() of IgxTooltipDirective\n this.target.toBeShown = false;\n }, this.showDelay);\n }\n /**\n * @hidden\n */\n onMouseLeave() {\n if (this.tooltipDisabled) {\n return;\n }\n this.checkOutletAndOutsideClick();\n const shouldReturn = this.preMouseLeaveCheck();\n if (shouldReturn || this.target.collapsed) {\n return;\n }\n this.target.toBeHidden = true;\n this.target.timeoutId = setTimeout(() => {\n this.target.close(); // Call close() of IgxTooltipDirective\n this.target.toBeHidden = false;\n }, this.hideDelay);\n }\n /**\n * @hidden\n */\n onTouchStart() {\n if (this.tooltipDisabled) {\n return;\n }\n this.showTooltip();\n }\n /**\n * @hidden\n */\n onDocumentTouchStart(event) {\n if (this.tooltipDisabled) {\n return;\n }\n if (this.nativeElement !== event.target &&\n !this.nativeElement.contains(event.target)) {\n this.hideTooltip();\n }\n }\n /**\n * @hidden\n */\n ngOnInit() {\n super.ngOnInit();\n const positionSettings = {\n horizontalDirection: HorizontalAlignment.Center,\n horizontalStartPoint: HorizontalAlignment.Center,\n openAnimation: useAnimation(scaleInCenter, { params: { duration: '150ms' } }),\n closeAnimation: useAnimation(fadeOut, { params: { duration: '75ms' } })\n };\n this._overlayDefaults.positionStrategy = new AutoPositionStrategy(positionSettings);\n this._overlayDefaults.closeOnOutsideClick = false;\n this._overlayDefaults.closeOnEscape = true;\n this.target.closing.pipe(takeUntil(this.destroy$)).subscribe((event) => {\n const hidingArgs = { target: this, tooltip: this.target, cancel: false };\n this.tooltipHide.emit(hidingArgs);\n if (hidingArgs.cancel) {\n event.cancel = true;\n }\n });\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n /**\n * Shows the tooltip by respecting the 'showDelay' property.\n *\n * ```typescript\n * this.tooltipTarget.showTooltip();\n * ```\n */\n showTooltip() {\n clearTimeout(this.target.timeoutId);\n if (!this.target.collapsed) {\n // if close animation has started finish it, or close the tooltip with no animation\n this.target.forceClose(this.mergedOverlaySettings);\n this.target.toBeHidden = false;\n }\n const showingArgs = { target: this, tooltip: this.target, cancel: false };\n this.tooltipShow.emit(showingArgs);\n if (showingArgs.cancel) {\n return;\n }\n this.target.toBeShown = true;\n this.target.timeoutId = setTimeout(() => {\n this.target.open(this.mergedOverlaySettings); // Call open() of IgxTooltipDirective\n this.target.toBeShown = false;\n }, this.showDelay);\n }\n /**\n * Hides the tooltip by respecting the 'hideDelay' property.\n *\n * ```typescript\n * this.tooltipTarget.hideTooltip();\n * ```\n */\n hideTooltip() {\n if (this.target.collapsed && this.target.toBeShown) {\n clearTimeout(this.target.timeoutId);\n }\n if (this.target.collapsed || this.target.toBeHidden) {\n return;\n }\n this.target.toBeHidden = true;\n this.target.timeoutId = setTimeout(() => {\n this.target.close(); // Call close() of IgxTooltipDirective\n this.target.toBeHidden = false;\n }, this.hideDelay);\n }\n checkOutletAndOutsideClick() {\n if (this.outlet) {\n this._overlayDefaults.outlet = this.outlet;\n }\n }\n get mergedOverlaySettings() {\n return Object.assign({}, this._overlayDefaults, this.overlaySettings);\n }\n // Return true if the execution in onMouseEnter should be terminated after this method\n preMouseEnterCheck() {\n // If tooltip is about to be opened\n if (this.target.toBeShown) {\n clearTimeout(this.target.timeoutId);\n this.target.toBeShown = false;\n }\n // If Tooltip is opened or about to be hidden\n if (!this.target.collapsed || this.target.toBeHidden) {\n clearTimeout(this.target.timeoutId);\n // if close animation has started finish it, or close the tooltip with no animation\n this.target.forceClose(this.mergedOverlaySettings);\n this.target.toBeHidden = false;\n }\n return false;\n }\n // Return true if the execution in onMouseLeave should be terminated after this method\n preMouseLeaveCheck() {\n clearTimeout(this.target.timeoutId);\n // If tooltip is about to be opened\n if (this.target.toBeShown) {\n this.target.toBeShown = false;\n this.target.toBeHidden = false;\n return true;\n }\n return false;\n }\n}\nIgxTooltipTargetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTooltipTargetDirective, deps: [{ token: i0.ElementRef }, { token: IgxNavigationService, optional: true }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTooltipTargetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTooltipTargetDirective, selector: \"[igxTooltipTarget]\", inputs: { showDelay: \"showDelay\", hideDelay: \"hideDelay\", tooltipDisabled: \"tooltipDisabled\", target: [\"igxTooltipTarget\", \"target\"], tooltip: \"tooltip\" }, outputs: { tooltipShow: \"tooltipShow\", tooltipHide: \"tooltipHide\" }, host: { listeners: { \"click\": \"onClick()\", \"mouseenter\": \"onMouseEnter()\", \"mouseleave\": \"onMouseLeave()\", \"touchstart\": \"onTouchStart()\", \"document:touchstart\": \"onDocumentTouchStart($event)\" } }, exportAs: [\"tooltipTarget\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTooltipTargetDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'tooltipTarget',\n selector: '[igxTooltipTarget]',\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: IgxNavigationService, decorators: [{\n type: Optional\n }] }, { type: i0.ViewContainerRef }];\n }, propDecorators: { showDelay: [{\n type: Input,\n args: ['showDelay']\n }], hideDelay: [{\n type: Input,\n args: ['hideDelay']\n }], tooltipDisabled: [{\n type: Input,\n args: ['tooltipDisabled']\n }], target: [{\n type: Input,\n args: ['igxTooltipTarget']\n }], tooltip: [{\n type: Input\n }], tooltipShow: [{\n type: Output\n }], tooltipHide: [{\n type: Output\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }], onMouseEnter: [{\n type: HostListener,\n args: ['mouseenter']\n }], onMouseLeave: [{\n type: HostListener,\n args: ['mouseleave']\n }], onTouchStart: [{\n type: HostListener,\n args: ['touchstart']\n }], onDocumentTouchStart: [{\n type: HostListener,\n args: ['document:touchstart', ['$event']]\n }] } });\n\n/**\n * @hidden\n */\nclass IgxTooltipModule {\n}\nIgxTooltipModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxTooltipModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTooltipModule, declarations: [IgxTooltipDirective, IgxTooltipTargetDirective, IgxTooltipComponent], imports: [CommonModule], exports: [IgxTooltipDirective, IgxTooltipTargetDirective] });\nIgxTooltipModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTooltipModule, providers: [IgxOverlayService], imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTooltipModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxTooltipDirective, IgxTooltipTargetDirective, IgxTooltipComponent],\n exports: [IgxTooltipDirective, IgxTooltipTargetDirective],\n imports: [CommonModule],\n providers: [IgxOverlayService]\n }]\n }] });\n\n/**\n * Specify a particular date, time or AmPm part.\n */\nvar DatePart;\n(function (DatePart) {\n DatePart[\"Date\"] = \"date\";\n DatePart[\"Month\"] = \"month\";\n DatePart[\"Year\"] = \"year\";\n DatePart[\"Hours\"] = \"hours\";\n DatePart[\"Minutes\"] = \"minutes\";\n DatePart[\"Seconds\"] = \"seconds\";\n DatePart[\"AmPm\"] = \"ampm\";\n DatePart[\"Literal\"] = \"literal\";\n})(DatePart || (DatePart = {}));\n\nconst DATE_CHARS = ['h', 'H', 'm', 's', 'S', 't', 'T'];\nconst TIME_CHARS = ['d', 'D', 'M', 'y', 'Y'];\n/** @hidden */\nclass DateTimeUtil {\n /**\n * Parse a Date value from masked string input based on determined date parts\n *\n * @param inputData masked value to parse\n * @param dateTimeParts Date parts array for the mask\n */\n static parseValueFromMask(inputData, dateTimeParts, promptChar) {\n const parts = {};\n dateTimeParts.forEach(dp => {\n let value = parseInt(DateTimeUtil.getCleanVal(inputData, dp, promptChar), 10);\n if (!value) {\n value = dp.type === DatePart.Date || dp.type === DatePart.Month ? 1 : 0;\n }\n parts[dp.type] = value;\n });\n parts[DatePart.Month] -= 1;\n if (parts[DatePart.Month] < 0 || 11 < parts[DatePart.Month]) {\n return null;\n }\n // TODO: Century threshold\n if (parts[DatePart.Year] < 50) {\n parts[DatePart.Year] += 2000;\n }\n if (parts[DatePart.Date] > DateTimeUtil.daysInMonth(parts[DatePart.Year], parts[DatePart.Month])) {\n return null;\n }\n if (parts[DatePart.Hours] > 23 || parts[DatePart.Minutes] > 59 || parts[DatePart.Seconds] > 59) {\n return null;\n }\n const amPm = dateTimeParts.find(p => p.type === DatePart.AmPm);\n if (amPm) {\n parts[DatePart.Hours] %= 12;\n }\n if (amPm && DateTimeUtil.getCleanVal(inputData, amPm, promptChar).toLowerCase() === 'pm') {\n parts[DatePart.Hours] += 12;\n }\n return new Date(parts[DatePart.Year] || 2000, parts[DatePart.Month] || 0, parts[DatePart.Date] || 1, parts[DatePart.Hours] || 0, parts[DatePart.Minutes] || 0, parts[DatePart.Seconds] || 0);\n }\n /** Parse the mask into date/time and literal parts */\n static parseDateTimeFormat(mask, locale) {\n const format = mask || DateTimeUtil.getDefaultInputFormat(locale);\n const dateTimeParts = [];\n const formatArray = Array.from(format);\n let currentPart = null;\n let position = 0;\n for (let i = 0; i < formatArray.length; i++, position++) {\n const type = DateTimeUtil.determineDatePart(formatArray[i]);\n if (currentPart) {\n if (currentPart.type === type) {\n currentPart.format += formatArray[i];\n if (i < formatArray.length - 1) {\n continue;\n }\n }\n DateTimeUtil.addCurrentPart(currentPart, dateTimeParts);\n position = currentPart.end;\n }\n currentPart = {\n start: position,\n end: position + formatArray[i].length,\n type,\n format: formatArray[i]\n };\n }\n // make sure the last member of a format like H:m:s is not omitted\n if (!dateTimeParts.filter(p => p.format.includes(currentPart.format)).length) {\n DateTimeUtil.addCurrentPart(currentPart, dateTimeParts);\n }\n // formats like \"y\" or \"yyy\" are treated like \"yyyy\" while editing\n const yearPart = dateTimeParts.filter(p => p.type === DatePart.Year)[0];\n if (yearPart && yearPart.format !== 'yy') {\n yearPart.end += 4 - yearPart.format.length;\n yearPart.format = 'yyyy';\n }\n return dateTimeParts;\n }\n static getPartValue(value, datePartInfo, partLength) {\n let maskedValue;\n const datePart = datePartInfo.type;\n switch (datePart) {\n case DatePart.Date:\n maskedValue = value.getDate();\n break;\n case DatePart.Month:\n // months are zero based\n maskedValue = value.getMonth() + 1;\n break;\n case DatePart.Year:\n if (partLength === 2) {\n maskedValue = this.prependValue(parseInt(value.getFullYear().toString().slice(-2), 10), partLength, '0');\n }\n else {\n maskedValue = value.getFullYear();\n }\n break;\n case DatePart.Hours:\n if (datePartInfo.format.indexOf('h') !== -1) {\n maskedValue = this.prependValue(this.toTwelveHourFormat(value.getHours().toString()), partLength, '0');\n }\n else {\n maskedValue = value.getHours();\n }\n break;\n case DatePart.Minutes:\n maskedValue = value.getMinutes();\n break;\n case DatePart.Seconds:\n maskedValue = value.getSeconds();\n break;\n case DatePart.AmPm:\n maskedValue = value.getHours() >= 12 ? 'PM' : 'AM';\n break;\n }\n if (datePartInfo.type !== DatePart.AmPm) {\n return this.prependValue(maskedValue, partLength, '0');\n }\n return maskedValue;\n }\n /** Builds a date-time editor's default input format based on provided locale settings. */\n static getDefaultInputFormat(locale) {\n locale = locale || DateTimeUtil.DEFAULT_LOCALE;\n if (!Intl || !Intl.DateTimeFormat || !Intl.DateTimeFormat.prototype.formatToParts) {\n // TODO: fallback with Intl.format for IE?\n return DateTimeUtil.DEFAULT_INPUT_FORMAT;\n }\n const parts = DateTimeUtil.getDefaultLocaleMask(locale);\n parts.forEach(p => {\n if (p.type !== DatePart.Year && p.type !== DateTimeUtil.SEPARATOR) {\n p.formatType = \"2-digit\" /* FormatDesc.TwoDigits */;\n }\n });\n return DateTimeUtil.getMask(parts);\n }\n /** Tries to format a date using Angular's DatePipe. Fallbacks to `Intl` if no locale settings have been loaded. */\n static formatDate(value, format, locale, timezone) {\n let formattedDate;\n try {\n formattedDate = formatDate$1(value, format, locale, timezone);\n }\n catch (_a) {\n DateTimeUtil.logMissingLocaleSettings(locale);\n const formatter = new Intl.DateTimeFormat(locale);\n formattedDate = formatter.format(value);\n }\n return formattedDate;\n }\n /**\n * Returns the date format based on a provided locale.\n * Supports Angular's DatePipe format options such as `shortDate`, `longDate`.\n */\n static getLocaleDateFormat(locale, displayFormat) {\n const formatKeys = Object.keys(FormatWidth);\n const targetKey = formatKeys.find(k => k.toLowerCase() === (displayFormat === null || displayFormat === void 0 ? void 0 : displayFormat.toLowerCase().replace('date', '')));\n if (!targetKey) {\n // if displayFormat is not shortDate, longDate, etc.\n // or if it is not set by the user\n return displayFormat;\n }\n let format;\n try {\n format = getLocaleDateFormat(locale, FormatWidth[targetKey]);\n }\n catch (_a) {\n DateTimeUtil.logMissingLocaleSettings(locale);\n format = DateTimeUtil.getDefaultInputFormat(locale);\n }\n return format;\n }\n /** Determines if a given character is `d/M/y` or `h/m/s`. */\n static isDateOrTimeChar(char) {\n return DATE_CHARS.indexOf(char) !== -1 || TIME_CHARS.indexOf(char) !== -1;\n }\n /** Spins the date portion in a date-time editor. */\n static spinDate(delta, newDate, spinLoop) {\n const maxDate = DateTimeUtil.daysInMonth(newDate.getFullYear(), newDate.getMonth());\n let date = newDate.getDate() + delta;\n if (date > maxDate) {\n date = spinLoop ? date % maxDate : maxDate;\n }\n else if (date < 1) {\n date = spinLoop ? maxDate + (date % maxDate) : 1;\n }\n newDate.setDate(date);\n }\n /** Spins the month portion in a date-time editor. */\n static spinMonth(delta, newDate, spinLoop) {\n const maxDate = DateTimeUtil.daysInMonth(newDate.getFullYear(), newDate.getMonth() + delta);\n if (newDate.getDate() > maxDate) {\n newDate.setDate(maxDate);\n }\n const maxMonth = 11;\n const minMonth = 0;\n let month = newDate.getMonth() + delta;\n if (month > maxMonth) {\n month = spinLoop ? (month % maxMonth) - 1 : maxMonth;\n }\n else if (month < minMonth) {\n month = spinLoop ? maxMonth + (month % maxMonth) + 1 : minMonth;\n }\n newDate.setMonth(month);\n }\n /** Spins the year portion in a date-time editor. */\n static spinYear(delta, newDate) {\n const maxDate = DateTimeUtil.daysInMonth(newDate.getFullYear() + delta, newDate.getMonth());\n if (newDate.getDate() > maxDate) {\n // clip to max to avoid leap year change shifting the entire value\n newDate.setDate(maxDate);\n }\n newDate.setFullYear(newDate.getFullYear() + delta);\n }\n /** Spins the hours portion in a date-time editor. */\n static spinHours(delta, newDate, spinLoop) {\n const maxHour = 23;\n const minHour = 0;\n let hours = newDate.getHours() + delta;\n if (hours > maxHour) {\n hours = spinLoop ? hours % maxHour - 1 : maxHour;\n }\n else if (hours < minHour) {\n hours = spinLoop ? maxHour + (hours % maxHour) + 1 : minHour;\n }\n newDate.setHours(hours);\n }\n /** Spins the minutes portion in a date-time editor. */\n static spinMinutes(delta, newDate, spinLoop) {\n const maxMinutes = 59;\n const minMinutes = 0;\n let minutes = newDate.getMinutes() + delta;\n if (minutes > maxMinutes) {\n minutes = spinLoop ? minutes % maxMinutes - 1 : maxMinutes;\n }\n else if (minutes < minMinutes) {\n minutes = spinLoop ? maxMinutes + (minutes % maxMinutes) + 1 : minMinutes;\n }\n newDate.setMinutes(minutes);\n }\n /** Spins the seconds portion in a date-time editor. */\n static spinSeconds(delta, newDate, spinLoop) {\n const maxSeconds = 59;\n const minSeconds = 0;\n let seconds = newDate.getSeconds() + delta;\n if (seconds > maxSeconds) {\n seconds = spinLoop ? seconds % maxSeconds - 1 : maxSeconds;\n }\n else if (seconds < minSeconds) {\n seconds = spinLoop ? maxSeconds + (seconds % maxSeconds) + 1 : minSeconds;\n }\n newDate.setSeconds(seconds);\n }\n /** Spins the AM/PM portion in a date-time editor. */\n static spinAmPm(newDate, currentDate, amPmFromMask) {\n switch (amPmFromMask) {\n case 'AM':\n newDate = new Date(newDate.setHours(newDate.getHours() + 12));\n break;\n case 'PM':\n newDate = new Date(newDate.setHours(newDate.getHours() - 12));\n break;\n }\n if (newDate.getDate() !== currentDate.getDate()) {\n return currentDate;\n }\n return newDate;\n }\n /**\n * Determines whether the provided value is greater than the provided max value.\n *\n * @param includeTime set to false if you want to exclude time portion of the two dates\n * @param includeDate set to false if you want to exclude the date portion of the two dates\n * @returns true if provided value is greater than provided maxValue\n */\n static greaterThanMaxValue(value, maxValue, includeTime = true, includeDate = true) {\n if (includeTime && includeDate) {\n return value.getTime() > maxValue.getTime();\n }\n const _value = new Date(value.getTime());\n const _maxValue = new Date(maxValue.getTime());\n if (!includeTime) {\n _value.setHours(0, 0, 0, 0);\n _maxValue.setHours(0, 0, 0, 0);\n }\n if (!includeDate) {\n _value.setFullYear(0, 0, 0);\n _maxValue.setFullYear(0, 0, 0);\n }\n return _value.getTime() > _maxValue.getTime();\n }\n /**\n * Determines whether the provided value is less than the provided min value.\n *\n * @param includeTime set to false if you want to exclude time portion of the two dates\n * @param includeDate set to false if you want to exclude the date portion of the two dates\n * @returns true if provided value is less than provided minValue\n */\n static lessThanMinValue(value, minValue, includeTime = true, includeDate = true) {\n if (includeTime && includeDate) {\n return value.getTime() < minValue.getTime();\n }\n const _value = new Date(value.getTime());\n const _minValue = new Date(minValue.getTime());\n if (!includeTime) {\n _value.setHours(0, 0, 0, 0);\n _minValue.setHours(0, 0, 0, 0);\n }\n if (!includeDate) {\n _value.setFullYear(0, 0, 0);\n _minValue.setFullYear(0, 0, 0);\n }\n return _value.getTime() < _minValue.getTime();\n }\n /**\n * Validates a value within a given min and max value range.\n *\n * @param value The value to validate\n * @param minValue The lowest possible value that `value` can take\n * @param maxValue The largest possible value that `value` can take\n */\n static validateMinMax(value, minValue, maxValue, includeTime = true, includeDate = true) {\n if (!value) {\n return null;\n }\n const errors = {};\n const min = DateTimeUtil.isValidDate(minValue) ? minValue : DateTimeUtil.parseIsoDate(minValue);\n const max = DateTimeUtil.isValidDate(maxValue) ? maxValue : DateTimeUtil.parseIsoDate(maxValue);\n if (min && value && DateTimeUtil.lessThanMinValue(value, min, includeTime, includeDate)) {\n Object.assign(errors, { minValue: true });\n }\n if (max && value && DateTimeUtil.greaterThanMaxValue(value, max, includeTime, includeDate)) {\n Object.assign(errors, { maxValue: true });\n }\n return errors;\n }\n /** Parse an ISO string to a Date */\n static parseIsoDate(value) {\n let regex = /^\\d{4}/g;\n const timeLiteral = 'T';\n if (regex.test(value)) {\n return new Date(value + `${value.indexOf(timeLiteral) === -1 ? 'T00:00:00' : ''}`);\n }\n regex = /^\\d{2}/g;\n if (regex.test(value)) {\n const dateNow = new Date().toISOString();\n // eslint-disable-next-line prefer-const\n let [datePart, _timePart] = dateNow.split(timeLiteral);\n return new Date(`${datePart}T${value}`);\n }\n return null;\n }\n /**\n * Returns whether the input is valid date\n *\n * @param value input to check\n * @returns true if provided input is a valid date\n */\n static isValidDate(value) {\n if (isDate(value)) {\n return !isNaN(value.getTime());\n }\n return false;\n }\n static addCurrentPart(currentPart, dateTimeParts) {\n DateTimeUtil.ensureLeadingZero(currentPart);\n currentPart.end = currentPart.start + currentPart.format.length;\n dateTimeParts.push(currentPart);\n }\n static daysInMonth(fullYear, month) {\n return new Date(fullYear, month + 1, 0).getDate();\n }\n static trimEmptyPlaceholders(value, promptChar) {\n const result = value.replace(new RegExp(promptChar || '_', 'g'), '');\n return result;\n }\n static getMask(dateStruct) {\n const mask = [];\n for (const part of dateStruct) {\n switch (part.formatType) {\n case \"numeric\" /* FormatDesc.Numeric */: {\n if (part.type === \"day\" /* DateParts.Day */) {\n mask.push('d');\n }\n else if (part.type === \"month\" /* DateParts.Month */) {\n mask.push('M');\n }\n else {\n mask.push('yyyy');\n }\n break;\n }\n case \"2-digit\" /* FormatDesc.TwoDigits */: {\n if (part.type === \"day\" /* DateParts.Day */) {\n mask.push('dd');\n }\n else if (part.type === \"month\" /* DateParts.Month */) {\n mask.push('MM');\n }\n else {\n mask.push('yy');\n }\n }\n }\n if (part.type === DateTimeUtil.SEPARATOR) {\n mask.push(part.value);\n }\n }\n return mask.join('');\n }\n static logMissingLocaleSettings(locale) {\n console.warn(`Missing locale data for the locale ${locale}. Please refer to https://angular.io/guide/i18n#i18n-pipes`);\n console.warn('Using default browser locale settings.');\n }\n static prependValue(value, partLength, prependChar) {\n return (prependChar + value.toString()).slice(-partLength);\n }\n static toTwelveHourFormat(value, promptChar = '_') {\n let hour = parseInt(value.replace(new RegExp(promptChar, 'g'), '0'), 10);\n if (hour > 12) {\n hour -= 12;\n }\n else if (hour === 0) {\n hour = 12;\n }\n return hour;\n }\n static ensureLeadingZero(part) {\n switch (part.type) {\n case DatePart.Date:\n case DatePart.Month:\n case DatePart.Hours:\n case DatePart.Minutes:\n case DatePart.Seconds:\n if (part.format.length === 1) {\n part.format = part.format.repeat(2);\n }\n break;\n }\n }\n static getCleanVal(inputData, datePart, promptChar) {\n return DateTimeUtil.trimEmptyPlaceholders(inputData.substring(datePart.start, datePart.end), promptChar);\n }\n static determineDatePart(char) {\n switch (char) {\n case 'd':\n case 'D':\n return DatePart.Date;\n case 'M':\n return DatePart.Month;\n case 'y':\n case 'Y':\n return DatePart.Year;\n case 'h':\n case 'H':\n return DatePart.Hours;\n case 'm':\n return DatePart.Minutes;\n case 's':\n case 'S':\n return DatePart.Seconds;\n case 't':\n case 'T':\n return DatePart.AmPm;\n default:\n return DatePart.Literal;\n }\n }\n static getDefaultLocaleMask(locale) {\n const dateStruct = [];\n const formatter = new Intl.DateTimeFormat(locale);\n const formatToParts = formatter.formatToParts(new Date());\n for (const part of formatToParts) {\n if (part.type === DateTimeUtil.SEPARATOR) {\n dateStruct.push({\n type: DateTimeUtil.SEPARATOR,\n value: part.value\n });\n }\n else {\n dateStruct.push({\n type: part.type\n });\n }\n }\n const formatterOptions = formatter.resolvedOptions();\n for (const part of dateStruct) {\n switch (part.type) {\n case \"day\" /* DateParts.Day */: {\n part.formatType = formatterOptions.day;\n break;\n }\n case \"month\" /* DateParts.Month */: {\n part.formatType = formatterOptions.month;\n break;\n }\n case \"year\" /* DateParts.Year */: {\n part.formatType = formatterOptions.year;\n break;\n }\n }\n }\n DateTimeUtil.fillDatePartsPositions(dateStruct);\n return dateStruct;\n }\n static fillDatePartsPositions(dateArray) {\n let currentPos = 0;\n for (const part of dateArray) {\n // Day|Month part positions\n if (part.type === \"day\" /* DateParts.Day */ || part.type === \"month\" /* DateParts.Month */) {\n // Offset 2 positions for number\n part.position = [currentPos, currentPos + 2];\n currentPos += 2;\n }\n else if (part.type === \"year\" /* DateParts.Year */) {\n // Year part positions\n switch (part.formatType) {\n case \"numeric\" /* FormatDesc.Numeric */: {\n // Offset 4 positions for full year\n part.position = [currentPos, currentPos + 4];\n currentPos += 4;\n break;\n }\n case \"2-digit\" /* FormatDesc.TwoDigits */: {\n // Offset 2 positions for short year\n part.position = [currentPos, currentPos + 2];\n currentPos += 2;\n break;\n }\n }\n }\n else if (part.type === DateTimeUtil.SEPARATOR) {\n // Separator positions\n part.position = [currentPos, currentPos + 1];\n currentPos++;\n }\n }\n }\n}\nDateTimeUtil.DEFAULT_INPUT_FORMAT = 'MM/dd/yyyy';\nDateTimeUtil.DEFAULT_TIME_INPUT_FORMAT = 'hh:mm tt';\nDateTimeUtil.SEPARATOR = 'literal';\nDateTimeUtil.DEFAULT_LOCALE = 'en';\n\n/* eslint-disable @angular-eslint/no-conflicting-lifecycle */\n/**\n * Date Time Editor provides a functionality to input, edit and format date and time.\n *\n * @igxModule IgxDateTimeEditorModule\n *\n * @igxParent IgxInputGroup\n *\n * @igxTheme igx-input-theme\n *\n * @igxKeywords date, time, editor\n *\n * @igxGroup Scheduling\n *\n * @remarks\n *\n * The Ignite UI Date Time Editor Directive makes it easy for developers to manipulate date/time user input.\n * It requires input in a specified or default input format which is visible in the input element as a placeholder.\n * It allows the input of only date (ex: 'dd/MM/yyyy'), only time (ex:'HH:mm tt') or both at once, if needed.\n * Supports display format that may differ from the input format.\n * Provides methods to increment and decrement any specific/targeted `DatePart`.\n *\n * @example\n * ```html\n * \n * \n * \n * ```\n */\nclass IgxDateTimeEditorDirective extends IgxMaskDirective {\n /**\n * Minimum value required for the editor to remain valid.\n *\n * @remarks\n * If a `string` value is passed, it must be in the defined input format.\n *\n * @example\n * ```html\n * \n * ```\n */\n get minValue() {\n return this._minValue;\n }\n set minValue(value) {\n this._minValue = value;\n this.onValidatorChange();\n }\n /**\n * Maximum value required for the editor to remain valid.\n *\n * @remarks\n * If a `string` value is passed in, it must be in the defined input format.\n *\n * @example\n * ```html\n * \n * ```\n */\n get maxValue() {\n return this._maxValue;\n }\n set maxValue(value) {\n this._maxValue = value;\n this.onValidatorChange();\n }\n /**\n * Expected user input format (and placeholder).\n *\n * @example\n * ```html\n * \n * ```\n */\n set inputFormat(value) {\n if (value) {\n this.setMask(value);\n this._inputFormat = value;\n }\n }\n get inputFormat() {\n return this._inputFormat || this._defaultInputFormat;\n }\n /**\n * Editor value.\n *\n * @example\n * ```html\n * \n * ```\n */\n set value(value) {\n this._value = value;\n this.setDateValue(value);\n this.onChangeCallback(value);\n this.updateMask();\n }\n get value() {\n return this._value;\n }\n get datePartDeltas() {\n return Object.assign({}, this._datePartDeltas, this.spinDelta);\n }\n get emptyMask() {\n return this.maskParser.applyMask(null, this.maskOptions);\n }\n get targetDatePart() {\n var _a, _b, _c;\n // V.K. May 16th, 2022 #11554 Get correct date part in shadow DOM\n if (this.document.activeElement === this.nativeElement ||\n ((_b = (_a = this.document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement) === this.nativeElement) {\n return (_c = this._inputDateParts\n .find(p => p.start <= this.selectionStart && this.selectionStart <= p.end && p.type !== DatePart.Literal)) === null || _c === void 0 ? void 0 : _c.type;\n }\n else {\n if (this._inputDateParts.some(p => p.type === DatePart.Date)) {\n return DatePart.Date;\n }\n else if (this._inputDateParts.some(p => p.type === DatePart.Hours)) {\n return DatePart.Hours;\n }\n }\n }\n get hasDateParts() {\n return this._inputDateParts.some(p => p.type === DatePart.Date\n || p.type === DatePart.Month\n || p.type === DatePart.Year);\n }\n get hasTimeParts() {\n return this._inputDateParts.some(p => p.type === DatePart.Hours\n || p.type === DatePart.Minutes\n || p.type === DatePart.Seconds);\n }\n get dateValue() {\n return this._dateValue;\n }\n constructor(renderer, elementRef, maskParser, platform, _document, _locale) {\n super(elementRef, maskParser, renderer, platform);\n this._document = _document;\n this._locale = _locale;\n /**\n * Specify if the currently spun date segment should loop over.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.spinLoop = true;\n /**\n * Emitted when the editor's value has changed.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.valueChange = new EventEmitter();\n /**\n * Emitted when the editor is not within a specified range or when the editor's value is in an invalid state.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.validationFailed = new EventEmitter();\n this._datePartDeltas = {\n date: 1,\n month: 1,\n year: 1,\n hours: 1,\n minutes: 1,\n seconds: 1\n };\n this.onTouchCallback = noop;\n this.onChangeCallback = noop;\n this.onValidatorChange = noop;\n this.document = this._document;\n this.locale = this.locale || this._locale;\n }\n onWheel(event) {\n if (!this._isFocused) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n if (event.deltaY > 0) {\n this.decrement();\n }\n else {\n this.increment();\n }\n }\n ngOnInit() {\n this.updateDefaultFormat();\n this.setMask(this.inputFormat);\n this.updateMask();\n }\n /** @hidden @internal */\n ngOnChanges(changes) {\n if (changes['locale'] && !changes['locale'].firstChange) {\n this.updateDefaultFormat();\n if (!this._inputFormat) {\n this.setMask(this.inputFormat);\n this.updateMask();\n }\n }\n if (changes['inputFormat'] && !changes['inputFormat'].firstChange) {\n this.updateMask();\n }\n }\n /** Clear the input element value. */\n clear() {\n this._onClear = true;\n this.updateValue(null);\n this.setSelectionRange(0, this.inputValue.length);\n this._onClear = false;\n }\n /**\n * Increment specified DatePart.\n *\n * @param datePart The optional DatePart to increment. Defaults to Date or Hours (when Date is absent from the inputFormat - ex:'HH:mm').\n * @param delta The optional delta to increment by. Overrides `spinDelta`.\n */\n increment(datePart, delta) {\n const targetPart = datePart || this.targetDatePart;\n if (!targetPart) {\n return;\n }\n const newValue = this.trySpinValue(targetPart, delta);\n this.updateValue(newValue);\n }\n /**\n * Decrement specified DatePart.\n *\n * @param datePart The optional DatePart to decrement. Defaults to Date or Hours (when Date is absent from the inputFormat - ex:'HH:mm').\n * @param delta The optional delta to decrement by. Overrides `spinDelta`.\n */\n decrement(datePart, delta) {\n const targetPart = datePart || this.targetDatePart;\n if (!targetPart) {\n return;\n }\n const newValue = this.trySpinValue(targetPart, delta, true);\n this.updateValue(newValue);\n }\n /** @hidden @internal */\n writeValue(value) {\n this._value = value;\n this.setDateValue(value);\n this.updateMask();\n }\n /** @hidden @internal */\n validate(control) {\n if (!control.value) {\n return null;\n }\n // InvalidDate handling\n if (isDate(control.value) && !DateTimeUtil.isValidDate(control.value)) {\n return { value: true };\n }\n let errors = {};\n const value = DateTimeUtil.isValidDate(control.value) ? control.value : DateTimeUtil.parseIsoDate(control.value);\n const minValueDate = DateTimeUtil.isValidDate(this.minValue) ? this.minValue : this.parseDate(this.minValue);\n const maxValueDate = DateTimeUtil.isValidDate(this.maxValue) ? this.maxValue : this.parseDate(this.maxValue);\n if (minValueDate || maxValueDate) {\n errors = DateTimeUtil.validateMinMax(value, minValueDate, maxValueDate, this.hasTimeParts, this.hasDateParts);\n }\n return Object.keys(errors).length > 0 ? errors : null;\n }\n /** @hidden @internal */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /** @hidden @internal */\n registerOnChange(fn) {\n this.onChangeCallback = fn;\n }\n /** @hidden @internal */\n registerOnTouched(fn) {\n this.onTouchCallback = fn;\n }\n /** @hidden @internal */\n setDisabledState(_isDisabled) { }\n /** @hidden @internal */\n onCompositionEnd() {\n super.onCompositionEnd();\n this.updateValue(this.parseDate(this.inputValue));\n this.updateMask();\n }\n /** @hidden @internal */\n onInputChanged(event) {\n super.onInputChanged(event);\n if (this._composing) {\n return;\n }\n if (this.inputIsComplete()) {\n const parsedDate = this.parseDate(this.inputValue);\n if (DateTimeUtil.isValidDate(parsedDate)) {\n this.updateValue(parsedDate);\n }\n else {\n const oldValue = this.value && new Date(this.dateValue.getTime());\n const args = { oldValue, newValue: parsedDate, userInput: this.inputValue };\n this.validationFailed.emit(args);\n if (DateTimeUtil.isValidDate(args.newValue)) {\n this.updateValue(args.newValue);\n }\n else {\n this.updateValue(null);\n }\n }\n }\n else {\n this.updateValue(null);\n }\n }\n /** @hidden @internal */\n onKeyDown(event) {\n if (this.nativeElement.readOnly) {\n return;\n }\n super.onKeyDown(event);\n const key = event.key;\n if (event.altKey) {\n return;\n }\n if (key === this.platform.KEYMAP.ARROW_DOWN || key === this.platform.KEYMAP.ARROW_UP) {\n this.spin(event);\n return;\n }\n if (event.ctrlKey && key === this.platform.KEYMAP.SEMICOLON) {\n this.updateValue(new Date());\n }\n this.moveCursor(event);\n }\n /** @hidden @internal */\n onFocus() {\n if (this.nativeElement.readOnly) {\n return;\n }\n this._isFocused = true;\n this.onTouchCallback();\n this.updateMask();\n super.onFocus();\n this.nativeElement.select();\n }\n /** @hidden @internal */\n onBlur(value) {\n this._isFocused = false;\n if (!this.inputIsComplete() && this.inputValue !== this.emptyMask) {\n this.updateValue(this.parseDate(this.inputValue));\n }\n else {\n this.updateMask();\n }\n // TODO: think of a better way to set displayValuePipe in mask directive\n if (this.displayValuePipe) {\n return;\n }\n super.onBlur(value);\n }\n // the date editor sets its own inputFormat as its placeholder if none is provided\n /** @hidden */\n setPlaceholder(_value) { }\n updateDefaultFormat() {\n this._defaultInputFormat = DateTimeUtil.getDefaultInputFormat(this.locale);\n }\n updateMask() {\n if (this._isFocused) {\n // store the cursor position as it will be moved during masking\n const cursor = this.selectionEnd;\n this.inputValue = this.getMaskedValue();\n this.setSelectionRange(cursor);\n }\n else {\n if (!this.dateValue || !DateTimeUtil.isValidDate(this.dateValue)) {\n this.inputValue = '';\n return;\n }\n if (this.displayValuePipe) {\n // TODO: remove when formatter func has been deleted\n this.inputValue = this.displayValuePipe.transform(this.value);\n return;\n }\n const format = this.displayFormat || this.inputFormat;\n if (format) {\n this.inputValue = DateTimeUtil.formatDate(this.dateValue, format.replace('tt', 'aa'), this.locale);\n }\n else {\n this.inputValue = this.dateValue.toLocaleString();\n }\n }\n }\n setMask(inputFormat) {\n var _a;\n const oldFormat = (_a = this._inputDateParts) === null || _a === void 0 ? void 0 : _a.map(p => p.format).join('');\n this._inputDateParts = DateTimeUtil.parseDateTimeFormat(inputFormat);\n inputFormat = this._inputDateParts.map(p => p.format).join('');\n const mask = (inputFormat || DateTimeUtil.DEFAULT_INPUT_FORMAT)\n .replace(new RegExp(/(?=[^t])[\\w]/, 'g'), '0');\n this.mask = mask.indexOf('tt') !== -1 ? mask.replace(new RegExp('tt', 'g'), 'LL') : mask;\n const placeholder = this.nativeElement.placeholder;\n if (!placeholder || oldFormat === placeholder) {\n this.renderer.setAttribute(this.nativeElement, 'placeholder', inputFormat);\n }\n }\n parseDate(val) {\n if (!val) {\n return null;\n }\n return DateTimeUtil.parseValueFromMask(val, this._inputDateParts, this.promptChar);\n }\n getMaskedValue() {\n let mask = this.emptyMask;\n if (DateTimeUtil.isValidDate(this.value)) {\n for (const part of this._inputDateParts) {\n if (part.type === DatePart.Literal) {\n continue;\n }\n const targetValue = this.getPartValue(part, part.format.length);\n mask = this.maskParser.replaceInMask(mask, targetValue, this.maskOptions, part.start, part.end).value;\n }\n return mask;\n }\n if (!this.inputIsComplete() || !this._onClear) {\n return this.inputValue;\n }\n return mask;\n }\n valueInRange(value) {\n if (!value) {\n return false;\n }\n let errors = {};\n const minValueDate = DateTimeUtil.isValidDate(this.minValue) ? this.minValue : this.parseDate(this.minValue);\n const maxValueDate = DateTimeUtil.isValidDate(this.maxValue) ? this.maxValue : this.parseDate(this.maxValue);\n if (minValueDate || maxValueDate) {\n errors = DateTimeUtil.validateMinMax(value, this.minValue, this.maxValue, this.hasTimeParts, this.hasDateParts);\n }\n return Object.keys(errors).length === 0;\n }\n spinValue(datePart, delta) {\n if (!this.dateValue || !DateTimeUtil.isValidDate(this.dateValue)) {\n return null;\n }\n const newDate = new Date(this.dateValue.getTime());\n switch (datePart) {\n case DatePart.Date:\n DateTimeUtil.spinDate(delta, newDate, this.spinLoop);\n break;\n case DatePart.Month:\n DateTimeUtil.spinMonth(delta, newDate, this.spinLoop);\n break;\n case DatePart.Year:\n DateTimeUtil.spinYear(delta, newDate);\n break;\n case DatePart.Hours:\n DateTimeUtil.spinHours(delta, newDate, this.spinLoop);\n break;\n case DatePart.Minutes:\n DateTimeUtil.spinMinutes(delta, newDate, this.spinLoop);\n break;\n case DatePart.Seconds:\n DateTimeUtil.spinSeconds(delta, newDate, this.spinLoop);\n break;\n case DatePart.AmPm:\n const formatPart = this._inputDateParts.find(dp => dp.type === DatePart.AmPm);\n const amPmFromMask = this.inputValue.substring(formatPart.start, formatPart.end);\n return DateTimeUtil.spinAmPm(newDate, this.dateValue, amPmFromMask);\n }\n return newDate;\n }\n trySpinValue(datePart, delta, negative = false) {\n if (!delta) {\n // default to 1 if a delta is set to 0 or any other falsy value\n delta = this.datePartDeltas[datePart] || 1;\n }\n const spinValue = negative ? -Math.abs(delta) : Math.abs(delta);\n return this.spinValue(datePart, spinValue) || new Date();\n }\n setDateValue(value) {\n this._dateValue = DateTimeUtil.isValidDate(value)\n ? value\n : DateTimeUtil.parseIsoDate(value);\n }\n updateValue(newDate) {\n this._oldValue = this.dateValue;\n this.value = newDate;\n // TODO: should we emit events here?\n if (this.inputIsComplete() || this.inputValue === this.emptyMask) {\n this.valueChange.emit(this.dateValue);\n }\n if (this.dateValue && !this.valueInRange(this.dateValue)) {\n this.validationFailed.emit({ oldValue: this._oldValue, newValue: this.dateValue, userInput: this.inputValue });\n }\n }\n toTwelveHourFormat(value) {\n let hour = parseInt(value.replace(new RegExp(this.promptChar, 'g'), '0'), 10);\n if (hour > 12) {\n hour -= 12;\n }\n else if (hour === 0) {\n hour = 12;\n }\n return hour;\n }\n getPartValue(datePartInfo, partLength) {\n let maskedValue;\n const datePart = datePartInfo.type;\n switch (datePart) {\n case DatePart.Date:\n maskedValue = this.dateValue.getDate();\n break;\n case DatePart.Month:\n // months are zero based\n maskedValue = this.dateValue.getMonth() + 1;\n break;\n case DatePart.Year:\n if (partLength === 2) {\n maskedValue = this.prependValue(parseInt(this.dateValue.getFullYear().toString().slice(-2), 10), partLength, '0');\n }\n else {\n maskedValue = this.dateValue.getFullYear();\n }\n break;\n case DatePart.Hours:\n if (datePartInfo.format.indexOf('h') !== -1) {\n maskedValue = this.prependValue(this.toTwelveHourFormat(this.dateValue.getHours().toString()), partLength, '0');\n }\n else {\n maskedValue = this.dateValue.getHours();\n }\n break;\n case DatePart.Minutes:\n maskedValue = this.dateValue.getMinutes();\n break;\n case DatePart.Seconds:\n maskedValue = this.dateValue.getSeconds();\n break;\n case DatePart.AmPm:\n maskedValue = this.dateValue.getHours() >= 12 ? 'PM' : 'AM';\n break;\n }\n if (datePartInfo.type !== DatePart.AmPm) {\n return this.prependValue(maskedValue, partLength, '0');\n }\n return maskedValue;\n }\n prependValue(value, partLength, prependChar) {\n return (prependChar + value.toString()).slice(-partLength);\n }\n spin(event) {\n event.preventDefault();\n switch (event.key) {\n case this.platform.KEYMAP.ARROW_UP:\n this.increment();\n break;\n case this.platform.KEYMAP.ARROW_DOWN:\n this.decrement();\n break;\n }\n }\n inputIsComplete() {\n return this.inputValue.indexOf(this.promptChar) === -1;\n }\n moveCursor(event) {\n const value = event.target.value;\n switch (event.key) {\n case this.platform.KEYMAP.ARROW_LEFT:\n if (event.ctrlKey) {\n event.preventDefault();\n this.setSelectionRange(this.getNewPosition(value));\n }\n break;\n case this.platform.KEYMAP.ARROW_RIGHT:\n if (event.ctrlKey) {\n event.preventDefault();\n this.setSelectionRange(this.getNewPosition(value, 1));\n }\n break;\n }\n }\n /**\n * Move the cursor in a specific direction until it reaches a date/time separator.\n * Then return its index.\n *\n * @param value The string it operates on.\n * @param direction 0 is left, 1 is right. Default is 0.\n */\n getNewPosition(value, direction = 0) {\n const literals = this._inputDateParts.filter(p => p.type === DatePart.Literal);\n let cursorPos = this.selectionStart;\n if (!direction) {\n do {\n cursorPos = cursorPos > 0 ? --cursorPos : cursorPos;\n } while (!literals.some(l => l.end === cursorPos) && cursorPos > 0);\n return cursorPos;\n }\n else {\n do {\n cursorPos++;\n } while (!literals.some(l => l.start === cursorPos) && cursorPos < value.length);\n return cursorPos;\n }\n }\n}\nIgxDateTimeEditorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateTimeEditorDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: MaskParsingService }, { token: PlatformUtil }, { token: DOCUMENT }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Directive });\nIgxDateTimeEditorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDateTimeEditorDirective, selector: \"[igxDateTimeEditor]\", inputs: { locale: \"locale\", minValue: \"minValue\", maxValue: \"maxValue\", spinLoop: \"spinLoop\", displayFormat: \"displayFormat\", inputFormat: [\"igxDateTimeEditor\", \"inputFormat\"], value: \"value\", spinDelta: \"spinDelta\" }, outputs: { valueChange: \"valueChange\", validationFailed: \"validationFailed\" }, host: { listeners: { \"wheel\": \"onWheel($event)\" } }, providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxDateTimeEditorDirective, multi: true },\n { provide: NG_VALIDATORS, useExisting: IgxDateTimeEditorDirective, multi: true }\n ], exportAs: [\"igxDateTimeEditor\"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateTimeEditorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxDateTimeEditor]',\n exportAs: 'igxDateTimeEditor',\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxDateTimeEditorDirective, multi: true },\n { provide: NG_VALIDATORS, useExisting: IgxDateTimeEditorDirective, multi: true }\n ]\n }]\n }], ctorParameters: function () {\n return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: MaskParsingService }, { type: PlatformUtil }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }];\n }, propDecorators: { locale: [{\n type: Input\n }], minValue: [{\n type: Input\n }], maxValue: [{\n type: Input\n }], spinLoop: [{\n type: Input\n }], displayFormat: [{\n type: Input\n }], inputFormat: [{\n type: Input,\n args: [`igxDateTimeEditor`]\n }], value: [{\n type: Input\n }], spinDelta: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], validationFailed: [{\n type: Output\n }], onWheel: [{\n type: HostListener,\n args: ['wheel', ['$event']]\n }] } });\nclass IgxDateTimeEditorModule {\n}\nIgxDateTimeEditorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateTimeEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxDateTimeEditorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateTimeEditorModule, declarations: [IgxDateTimeEditorDirective], exports: [IgxDateTimeEditorDirective] });\nIgxDateTimeEditorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateTimeEditorModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateTimeEditorModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxDateTimeEditorDirective],\n exports: [IgxDateTimeEditorDirective]\n }]\n }] });\n\nclass IgcFormControlDirective {\n constructor(elementRef, renderer) {\n this.elementRef = elementRef;\n this.renderer = renderer;\n /** @hidden @internal */\n this.onChange = () => { };\n /** @hidden @internal */\n this.onTouched = () => { };\n }\n /** @hidden @internal */\n onBlur() {\n this.onTouched();\n }\n /** @hidden @internal */\n listenForValueChange(value) {\n this.onChange(value);\n }\n /** @hidden @internal */\n writeValue(value) {\n if (value) {\n this.elementRef.nativeElement.value = value;\n }\n }\n /** @hidden @internal */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /** @hidden @internal */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /** @hidden @internal */\n setDisabledState(isDisabled) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\nIgcFormControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgcFormControlDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });\nIgcFormControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgcFormControlDirective, selector: \"igc-rating[ngModel],igc-rating[formControlName]\", host: { listeners: { \"blur\": \"onBlur()\", \"igcChange\": \"listenForValueChange($event.detail)\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => IgcFormControlDirective),\n multi: true\n }\n ], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgcFormControlDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igc-rating[ngModel],igc-rating[formControlName]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => IgcFormControlDirective),\n multi: true\n }\n ]\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { onBlur: [{\n type: HostListener,\n args: ['blur']\n }], listenForValueChange: [{\n type: HostListener,\n args: ['igcChange', ['$event.detail']]\n }] } });\nclass IgcFormsModule {\n}\nIgcFormsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgcFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgcFormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgcFormsModule, declarations: [IgcFormControlDirective], exports: [IgcFormControlDirective] });\nIgcFormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgcFormsModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgcFormsModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgcFormControlDirective],\n exports: [IgcFormControlDirective]\n }]\n }] });\n\n/**\n * Provides base filtering operations\n * Implementations should be Singleton\n *\n * @export\n */\nclass IgxFilteringOperand {\n constructor() {\n this.operations = [{\n name: 'null',\n isUnary: true,\n iconName: 'is-null',\n logic: (target) => target === null\n }, {\n name: 'notNull',\n isUnary: true,\n iconName: 'is-not-null',\n logic: (target) => target !== null\n }, {\n name: 'in',\n isUnary: false,\n iconName: 'is-in',\n hidden: true,\n logic: (target, searchVal) => this.findValueInSet(target, searchVal)\n }];\n }\n static instance() {\n return this._instance || (this._instance = new this());\n }\n /**\n * Returns an array of names of the conditions which are visible in the UI\n */\n conditionList() {\n return this.operations.filter(f => !f.hidden).map((element) => element.name);\n }\n /**\n * Returns an instance of the condition with the specified name.\n *\n * @param name The name of the condition.\n */\n condition(name) {\n return this.operations.find((element) => element.name === name);\n }\n /**\n * Adds a new condition to the filtering operations.\n *\n * @param operation The filtering operation.\n */\n append(operation) {\n this.operations.push(operation);\n }\n /**\n * @hidden\n */\n findValueInSet(target, searchVal) {\n return searchVal.has(target);\n }\n}\nIgxFilteringOperand._instance = null;\n/**\n * Provides filtering operations for booleans\n *\n * @export\n */\nclass IgxBooleanFilteringOperand extends IgxFilteringOperand {\n constructor() {\n super();\n this.operations = [{\n name: 'all',\n isUnary: true,\n iconName: 'select-all',\n logic: (_target) => true\n }, {\n name: 'true',\n isUnary: true,\n iconName: 'is-true',\n logic: (target) => !!(target && target !== null && target !== undefined)\n }, {\n name: 'false',\n isUnary: true,\n iconName: 'is-false',\n logic: (target) => !target && target !== null && target !== undefined\n }, {\n name: 'empty',\n isUnary: true,\n iconName: 'is-empty',\n logic: (target) => target === null || target === undefined\n }, {\n name: 'notEmpty',\n isUnary: true,\n iconName: 'not-empty',\n logic: (target) => target !== null && target !== undefined\n }].concat(this.operations);\n }\n}\n/**\n * @internal\n * @hidden\n */\nclass IgxBaseDateTimeFilteringOperand extends IgxFilteringOperand {\n constructor() {\n super();\n this.operations = [{\n name: 'empty',\n isUnary: true,\n iconName: 'is-empty',\n logic: (target) => target === null || target === undefined\n }, {\n name: 'notEmpty',\n isUnary: true,\n iconName: 'not-empty',\n logic: (target) => target !== null && target !== undefined\n }].concat(this.operations);\n }\n /**\n * Splits a Date object into parts\n *\n * @memberof IgxDateFilteringOperand\n */\n static getDateParts(date, dateFormat) {\n const res = {\n day: null,\n hours: null,\n milliseconds: null,\n minutes: null,\n month: null,\n seconds: null,\n year: null\n };\n if (!date || !dateFormat) {\n return res;\n }\n if (dateFormat.indexOf('y') >= 0) {\n res.year = date.getFullYear();\n }\n if (dateFormat.indexOf('M') >= 0) {\n res.month = date.getMonth();\n }\n if (dateFormat.indexOf('d') >= 0) {\n res.day = date.getDate();\n }\n if (dateFormat.indexOf('h') >= 0) {\n res.hours = date.getHours();\n }\n if (dateFormat.indexOf('m') >= 0) {\n res.minutes = date.getMinutes();\n }\n if (dateFormat.indexOf('s') >= 0) {\n res.seconds = date.getSeconds();\n }\n if (dateFormat.indexOf('f') >= 0) {\n res.milliseconds = date.getMilliseconds();\n }\n return res;\n }\n findValueInSet(target, searchVal) {\n if (!target) {\n return false;\n }\n return searchVal.has((target instanceof Date) ? target.toISOString() : target);\n }\n validateInputData(target) {\n if (!(target instanceof Date)) {\n throw new Error('Could not perform filtering on \\'date\\' column because the datasource object type is not \\'Date\\'.');\n }\n }\n}\n/**\n * Provides filtering operations for Dates\n *\n * @export\n */\nclass IgxDateFilteringOperand extends IgxBaseDateTimeFilteringOperand {\n constructor() {\n super();\n this.operations = [{\n name: 'equals',\n isUnary: false,\n iconName: 'equals',\n logic: (target, searchVal) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const targetp = IgxDateFilteringOperand.getDateParts(target, 'yMd');\n const searchp = IgxDateFilteringOperand.getDateParts(searchVal, 'yMd');\n return targetp.year === searchp.year &&\n targetp.month === searchp.month &&\n targetp.day === searchp.day;\n }\n }, {\n name: 'doesNotEqual',\n isUnary: false,\n iconName: 'not-equal',\n logic: (target, searchVal) => {\n if (!target) {\n return true;\n }\n this.validateInputData(target);\n const targetp = IgxDateFilteringOperand.getDateParts(target, 'yMd');\n const searchp = IgxDateFilteringOperand.getDateParts(searchVal, 'yMd');\n return targetp.year !== searchp.year ||\n targetp.month !== searchp.month ||\n targetp.day !== searchp.day;\n }\n }, {\n name: 'before',\n isUnary: false,\n iconName: 'is-before',\n logic: (target, searchVal) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n return target < searchVal;\n }\n }, {\n name: 'after',\n isUnary: false,\n iconName: 'is-after',\n logic: (target, searchVal) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n return target > searchVal;\n }\n }, {\n name: 'today',\n isUnary: true,\n iconName: 'today',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateFilteringOperand.getDateParts(target, 'yMd');\n const now = IgxDateFilteringOperand.getDateParts(new Date(), 'yMd');\n return d.year === now.year &&\n d.month === now.month &&\n d.day === now.day;\n }\n }, {\n name: 'yesterday',\n isUnary: true,\n iconName: 'yesterday',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const td = IgxDateFilteringOperand.getDateParts(target, 'yMd');\n const y = ((d) => new Date(d.setDate(d.getDate() - 1)))(new Date());\n const yesterday = IgxDateFilteringOperand.getDateParts(y, 'yMd');\n return td.year === yesterday.year &&\n td.month === yesterday.month &&\n td.day === yesterday.day;\n }\n }, {\n name: 'thisMonth',\n isUnary: true,\n iconName: 'this-month',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateFilteringOperand.getDateParts(target, 'yM');\n const now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM');\n return d.year === now.year &&\n d.month === now.month;\n }\n }, {\n name: 'lastMonth',\n isUnary: true,\n iconName: 'last-month',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateFilteringOperand.getDateParts(target, 'yM');\n const now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM');\n if (!now.month) {\n now.month = 11;\n now.year -= 1;\n }\n else {\n now.month--;\n }\n return d.year === now.year &&\n d.month === now.month;\n }\n }, {\n name: 'nextMonth',\n isUnary: true,\n iconName: 'next-month',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateFilteringOperand.getDateParts(target, 'yM');\n const now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM');\n if (now.month === 11) {\n now.month = 0;\n now.year += 1;\n }\n else {\n now.month++;\n }\n return d.year === now.year &&\n d.month === now.month;\n }\n }, {\n name: 'thisYear',\n isUnary: true,\n iconName: 'this-year',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateFilteringOperand.getDateParts(target, 'y');\n const now = IgxDateFilteringOperand.getDateParts(new Date(), 'y');\n return d.year === now.year;\n }\n }, {\n name: 'lastYear',\n isUnary: true,\n iconName: 'last-year',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateFilteringOperand.getDateParts(target, 'y');\n const now = IgxDateFilteringOperand.getDateParts(new Date(), 'y');\n return d.year === now.year - 1;\n }\n }, {\n name: 'nextYear',\n isUnary: true,\n iconName: 'next-year',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateFilteringOperand.getDateParts(target, 'y');\n const now = IgxDateFilteringOperand.getDateParts(new Date(), 'y');\n return d.year === now.year + 1;\n }\n }].concat(this.operations);\n }\n}\nclass IgxDateTimeFilteringOperand extends IgxBaseDateTimeFilteringOperand {\n constructor() {\n super();\n this.operations = [{\n name: 'equals',\n isUnary: false,\n iconName: 'equals',\n logic: (target, searchVal) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const targetp = IgxDateTimeFilteringOperand.getDateParts(target, 'yMdhms');\n const searchp = IgxDateTimeFilteringOperand.getDateParts(searchVal, 'yMdhms');\n return targetp.year === searchp.year &&\n targetp.month === searchp.month &&\n targetp.day === searchp.day &&\n targetp.hours === searchp.hours &&\n targetp.minutes === searchp.minutes &&\n targetp.seconds === searchp.seconds;\n }\n }, {\n name: 'doesNotEqual',\n isUnary: false,\n iconName: 'not-equal',\n logic: (target, searchVal) => {\n if (!target) {\n return true;\n }\n this.validateInputData(target);\n const targetp = IgxDateTimeFilteringOperand.getDateParts(target, 'yMdhms');\n const searchp = IgxDateTimeFilteringOperand.getDateParts(searchVal, 'yMdhms');\n return targetp.year !== searchp.year ||\n targetp.month !== searchp.month ||\n targetp.day !== searchp.day ||\n targetp.hours !== searchp.hours ||\n targetp.minutes !== searchp.minutes ||\n targetp.seconds !== searchp.seconds;\n }\n }, {\n name: 'before',\n isUnary: false,\n iconName: 'is-before',\n logic: (target, searchVal) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n return target < searchVal;\n }\n }, {\n name: 'after',\n isUnary: false,\n iconName: 'is-after',\n logic: (target, searchVal) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n return target > searchVal;\n }\n }, {\n name: 'today',\n isUnary: true,\n iconName: 'today',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yMd');\n const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yMd');\n return d.year === now.year &&\n d.month === now.month &&\n d.day === now.day;\n }\n }, {\n name: 'yesterday',\n isUnary: true,\n iconName: 'yesterday',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const td = IgxDateTimeFilteringOperand.getDateParts(target, 'yMd');\n const y = ((d) => new Date(d.setDate(d.getDate() - 1)))(new Date());\n const yesterday = IgxDateTimeFilteringOperand.getDateParts(y, 'yMd');\n return td.year === yesterday.year &&\n td.month === yesterday.month &&\n td.day === yesterday.day;\n }\n }, {\n name: 'thisMonth',\n isUnary: true,\n iconName: 'this-month',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yM');\n const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yM');\n return d.year === now.year &&\n d.month === now.month;\n }\n }, {\n name: 'lastMonth',\n isUnary: true,\n iconName: 'last-month',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yM');\n const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yM');\n if (!now.month) {\n now.month = 11;\n now.year -= 1;\n }\n else {\n now.month--;\n }\n return d.year === now.year &&\n d.month === now.month;\n }\n }, {\n name: 'nextMonth',\n isUnary: true,\n iconName: 'next-month',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yM');\n const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yM');\n if (now.month === 11) {\n now.month = 0;\n now.year += 1;\n }\n else {\n now.month++;\n }\n return d.year === now.year &&\n d.month === now.month;\n }\n }, {\n name: 'thisYear',\n isUnary: true,\n iconName: 'this-year',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateTimeFilteringOperand.getDateParts(target, 'y');\n const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'y');\n return d.year === now.year;\n }\n }, {\n name: 'lastYear',\n isUnary: true,\n iconName: 'last-year',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateTimeFilteringOperand.getDateParts(target, 'y');\n const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'y');\n return d.year === now.year - 1;\n }\n }, {\n name: 'nextYear',\n isUnary: true,\n iconName: 'next-year',\n logic: (target) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const d = IgxDateTimeFilteringOperand.getDateParts(target, 'y');\n const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'y');\n return d.year === now.year + 1;\n }\n }].concat(this.operations);\n }\n}\nclass IgxTimeFilteringOperand extends IgxBaseDateTimeFilteringOperand {\n constructor() {\n super();\n this.operations = [{\n name: 'at',\n isUnary: false,\n iconName: 'equals',\n logic: (target, searchVal) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const targetp = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n const searchp = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n return targetp.hours === searchp.hours &&\n targetp.minutes === searchp.minutes &&\n targetp.seconds === searchp.seconds;\n }\n }, {\n name: 'not_at',\n isUnary: false,\n iconName: 'not-equal',\n logic: (target, searchVal) => {\n if (!target) {\n return true;\n }\n this.validateInputData(target);\n const targetp = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n const searchp = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n return targetp.hours !== searchp.hours ||\n targetp.minutes !== searchp.minutes ||\n targetp.seconds !== searchp.seconds;\n }\n }, {\n name: 'before',\n isUnary: false,\n iconName: 'is-before',\n logic: (target, searchVal) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const targetn = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n const search = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n return targetn.hours < search.hours ? true : targetn.hours === search.hours && targetn.minutes < search.minutes ?\n true : targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds < search.seconds;\n }\n }, {\n name: 'after',\n isUnary: false,\n iconName: 'is-after',\n logic: (target, searchVal) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const targetn = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n const search = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n return targetn.hours > search.hours ? true : targetn.hours === search.hours && targetn.minutes > search.minutes ?\n true : targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds > search.seconds;\n }\n }, {\n name: 'at_before',\n isUnary: false,\n iconName: 'is-before',\n logic: (target, searchVal) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const targetn = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n const search = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n return (targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds === search.seconds) ||\n targetn.hours < search.hours ? true : targetn.hours === search.hours && targetn.minutes < search.minutes ?\n true : targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds < search.seconds;\n }\n }, {\n name: 'at_after',\n isUnary: false,\n iconName: 'is-after',\n logic: (target, searchVal) => {\n if (!target) {\n return false;\n }\n this.validateInputData(target);\n const targetn = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n const search = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n return (targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds === search.seconds) ||\n targetn.hours > search.hours ? true : targetn.hours === search.hours && targetn.minutes > search.minutes ?\n true : targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds > search.seconds;\n }\n }].concat(this.operations);\n }\n findValueInSet(target, searchVal) {\n if (!target) {\n return false;\n }\n return searchVal.has(target.toLocaleTimeString());\n }\n}\n/**\n * Provides filtering operations for numbers\n *\n * @export\n */\nclass IgxNumberFilteringOperand extends IgxFilteringOperand {\n constructor() {\n super();\n this.operations = [{\n name: 'equals',\n isUnary: false,\n iconName: 'equals',\n logic: (target, searchVal) => target === searchVal\n }, {\n name: 'doesNotEqual',\n isUnary: false,\n iconName: 'not-equal',\n logic: (target, searchVal) => target !== searchVal\n }, {\n name: 'greaterThan',\n isUnary: false,\n iconName: 'greater-than',\n logic: (target, searchVal) => target > searchVal\n }, {\n name: 'lessThan',\n isUnary: false,\n iconName: 'less-than',\n logic: (target, searchVal) => target < searchVal\n }, {\n name: 'greaterThanOrEqualTo',\n isUnary: false,\n iconName: 'greater-than-or-equal',\n logic: (target, searchVal) => target >= searchVal\n }, {\n name: 'lessThanOrEqualTo',\n isUnary: false,\n iconName: 'less-than-or-equal',\n logic: (target, searchVal) => target <= searchVal\n }, {\n name: 'empty',\n isUnary: true,\n iconName: 'is-empty',\n logic: (target) => target === null || target === undefined || isNaN(target)\n }, {\n name: 'notEmpty',\n isUnary: true,\n iconName: 'not-empty',\n logic: (target) => target !== null && target !== undefined && !isNaN(target)\n }].concat(this.operations);\n }\n}\n/**\n * Provides filtering operations for strings\n *\n * @export\n */\nclass IgxStringFilteringOperand extends IgxFilteringOperand {\n constructor() {\n super();\n this.operations = [{\n name: 'contains',\n isUnary: false,\n iconName: 'contains',\n logic: (target, searchVal, ignoreCase) => {\n const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n return target.indexOf(search) !== -1;\n }\n }, {\n name: 'doesNotContain',\n isUnary: false,\n iconName: 'does-not-contain',\n logic: (target, searchVal, ignoreCase) => {\n const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n return target.indexOf(search) === -1;\n }\n }, {\n name: 'startsWith',\n isUnary: false,\n iconName: 'starts-with',\n logic: (target, searchVal, ignoreCase) => {\n const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n return target.startsWith(search);\n }\n }, {\n name: 'endsWith',\n isUnary: false,\n iconName: 'ends-with',\n logic: (target, searchVal, ignoreCase) => {\n const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n return target.endsWith(search);\n }\n }, {\n name: 'equals',\n isUnary: false,\n iconName: 'equals',\n logic: (target, searchVal, ignoreCase) => {\n const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n return target === search;\n }\n }, {\n name: 'doesNotEqual',\n isUnary: false,\n iconName: 'not-equal',\n logic: (target, searchVal, ignoreCase) => {\n const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n return target !== search;\n }\n }, {\n name: 'empty',\n isUnary: true,\n iconName: 'is-empty',\n logic: (target) => target === null || target === undefined || target.length === 0\n }, {\n name: 'notEmpty',\n isUnary: true,\n iconName: 'not-empty',\n logic: (target) => target !== null && target !== undefined && target.length > 0\n }].concat(this.operations);\n }\n /**\n * Applies case sensitivity on strings if provided\n *\n * @memberof IgxStringFilteringOperand\n */\n static applyIgnoreCase(a, ignoreCase) {\n a = a !== null && a !== void 0 ? a : '';\n // bulletproof\n return ignoreCase ? ('' + a).toLowerCase() : a;\n }\n}\n\nconst clear = (el) => el === 0 || Boolean(el);\nconst first = (arr) => arr[0];\nconst last = (arr) => arr[arr.length - 1];\nclass IgxSummaryOperand {\n /**\n * Counts all the records in the data source.\n * If filtering is applied, counts only the filtered records.\n * ```typescript\n * IgxSummaryOperand.count(dataSource);\n * ```\n *\n * @memberof IgxSummaryOperand\n */\n static count(data) {\n return data.length;\n }\n /**\n * Executes the static `count` method and returns `IgxSummaryResult[]`.\n * ```typescript\n * interface IgxSummaryResult {\n * key: string;\n * label: string;\n * summaryResult: any;\n * }\n * ```\n * Can be overridden in the inherited classes to provide customization for the `summary`.\n * ```typescript\n * class CustomSummary extends IgxSummaryOperand {\n * constructor() {\n * super();\n * }\n * public operate(data: any[], allData: any[], fieldName: string, groupRecord: IGroupByRecord): IgxSummaryResult[] {\n * const result = [];\n * result.push({\n * key: \"test\",\n * label: \"Test\",\n * summaryResult: IgxSummaryOperand.count(data)\n * });\n * return result;\n * }\n * }\n * this.grid.getColumnByName('ColumnName').summaries = CustomSummary;\n * ```\n *\n * @memberof IgxSummaryOperand\n */\n operate(data = [], _allData = [], _fieldName, _groupRecord) {\n return [{\n key: 'count',\n label: 'Count',\n defaultFormatting: false,\n summaryResult: IgxSummaryOperand.count(data)\n }];\n }\n}\n// @dynamic\nclass IgxNumberSummaryOperand extends IgxSummaryOperand {\n /**\n * Returns the minimum numeric value in the provided data records.\n * If filtering is applied, returns the minimum value in the filtered data records.\n * ```typescript\n * IgxNumberSummaryOperand.min(data);\n * ```\n *\n * @memberof IgxNumberSummaryOperand\n */\n static min(data) {\n return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => Math.min(a, b)) : 0;\n }\n /**\n * Returns the maximum numeric value in the provided data records.\n * If filtering is applied, returns the maximum value in the filtered data records.\n * ```typescript\n * IgxNumberSummaryOperand.max(data);\n * ```\n *\n * @memberof IgxNumberSummaryOperand\n */\n static max(data) {\n return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => Math.max(a, b)) : 0;\n }\n /**\n * Returns the sum of the numeric values in the provided data records.\n * If filtering is applied, returns the sum of the numeric values in the data records.\n * ```typescript\n * IgxNumberSummaryOperand.sum(data);\n * ```\n *\n * @memberof IgxNumberSummaryOperand\n */\n static sum(data) {\n return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => +a + +b) : 0;\n }\n /**\n * Returns the average numeric value in the data provided data records.\n * If filtering is applied, returns the average numeric value in the filtered data records.\n * ```typescript\n * IgxSummaryOperand.average(data);\n * ```\n *\n * @memberof IgxNumberSummaryOperand\n */\n static average(data) {\n return data.length && data.filter(clear).length ? this.sum(data) / this.count(data) : 0;\n }\n /**\n * Executes the static methods and returns `IgxSummaryResult[]`.\n * ```typescript\n * interface IgxSummaryResult {\n * key: string;\n * label: string;\n * summaryResult: any;\n * }\n * ```\n * Can be overridden in the inherited classes to provide customization for the `summary`.\n * ```typescript\n * class CustomNumberSummary extends IgxNumberSummaryOperand {\n * constructor() {\n * super();\n * }\n * public operate(data: any[], allData: any[], fieldName: string, groupRecord: IGroupByRecord): IgxSummaryResult[] {\n * const result = super.operate(data, allData, fieldName, groupRecord);\n * result.push({\n * key: \"avg\",\n * label: \"Avg\",\n * summaryResult: IgxNumberSummaryOperand.average(data)\n * });\n * result.push({\n * key: 'mdn',\n * label: 'Median',\n * summaryResult: this.findMedian(data)\n * });\n * return result;\n * }\n * }\n * this.grid.getColumnByName('ColumnName').summaries = CustomNumberSummary;\n * ```\n *\n * @memberof IgxNumberSummaryOperand\n */\n operate(data = [], allData = [], fieldName, groupRecord) {\n const result = super.operate(data, allData, fieldName, groupRecord);\n result.push({\n key: 'min',\n label: 'Min',\n defaultFormatting: true,\n summaryResult: IgxNumberSummaryOperand.min(data)\n });\n result.push({\n key: 'max',\n label: 'Max',\n defaultFormatting: true,\n summaryResult: IgxNumberSummaryOperand.max(data)\n });\n result.push({\n key: 'sum',\n label: 'Sum',\n defaultFormatting: true,\n summaryResult: IgxNumberSummaryOperand.sum(data)\n });\n result.push({\n key: 'average',\n label: 'Avg',\n defaultFormatting: true,\n summaryResult: IgxNumberSummaryOperand.average(data)\n });\n return result;\n }\n}\n// @dynamic\nclass IgxDateSummaryOperand extends IgxSummaryOperand {\n /**\n * Returns the latest date value in the data records.\n * If filtering is applied, returns the latest date value in the filtered data records.\n * ```typescript\n * IgxDateSummaryOperand.latest(data);\n * ```\n *\n * @memberof IgxDateSummaryOperand\n */\n static latest(data) {\n return data.length && data.filter(clear).length ?\n first(data.filter(clear).sort((a, b) => new Date(b).valueOf() - new Date(a).valueOf())) : undefined;\n }\n /**\n * Returns the earliest date value in the data records.\n * If filtering is applied, returns the latest date value in the filtered data records.\n * ```typescript\n * IgxDateSummaryOperand.earliest(data);\n * ```\n *\n * @memberof IgxDateSummaryOperand\n */\n static earliest(data) {\n return data.length && data.filter(clear).length ?\n last(data.filter(clear).sort((a, b) => new Date(b).valueOf() - new Date(a).valueOf())) : undefined;\n }\n /**\n * Executes the static methods and returns `IgxSummaryResult[]`.\n * ```typescript\n * interface IgxSummaryResult {\n * key: string;\n * label: string;\n * summaryResult: any;\n * }\n * ```\n * Can be overridden in the inherited classes to provide customization for the `summary`.\n * ```typescript\n * class CustomDateSummary extends IgxDateSummaryOperand {\n * constructor() {\n * super();\n * }\n * public operate(data: any[], allData: any[], fieldName: string, groupRecord: IGroupByRecord): IgxSummaryResult[] {\n * const result = super.operate(data, allData, fieldName, groupRecord);\n * result.push({\n * key: \"deadline\",\n * label: \"Deadline Date\",\n * summaryResult: this.calculateDeadline(data);\n * });\n * return result;\n * }\n * }\n * this.grid.getColumnByName('ColumnName').summaries = CustomDateSummary;\n * ```\n *\n * @memberof IgxDateSummaryOperand\n */\n operate(data = [], allData = [], fieldName, groupRecord) {\n const result = super.operate(data, allData, fieldName, groupRecord);\n result.push({\n key: 'earliest',\n label: 'Earliest',\n defaultFormatting: true,\n summaryResult: IgxDateSummaryOperand.earliest(data)\n });\n result.push({\n key: 'latest',\n label: 'Latest',\n defaultFormatting: true,\n summaryResult: IgxDateSummaryOperand.latest(data)\n });\n return result;\n }\n}\n// @dynamic\nclass IgxTimeSummaryOperand extends IgxSummaryOperand {\n /**\n * Returns the latest time value in the data records. Compare only the time part of the date.\n * If filtering is applied, returns the latest time value in the filtered data records.\n * ```typescript\n * IgxTimeSummaryOperand.latestTime(data);\n * ```\n *\n * @memberof IgxTimeSummaryOperand\n */\n static latestTime(data) {\n return data.length && data.filter(clear).length ?\n first(data.filter(clear).map(v => new Date(v)).sort((a, b) => new Date().setHours(b.getHours(), b.getMinutes(), b.getSeconds()) -\n new Date().setHours(a.getHours(), a.getMinutes(), a.getSeconds()))) : undefined;\n }\n /**\n * Returns the earliest time value in the data records. Compare only the time part of the date.\n * If filtering is applied, returns the earliest time value in the filtered data records.\n * ```typescript\n * IgxTimeSummaryOperand.earliestTime(data);\n * ```\n *\n * @memberof IgxTimeSummaryOperand\n */\n static earliestTime(data) {\n return data.length && data.filter(clear).length ?\n last(data.filter(clear).map(v => new Date(v)).sort((a, b) => new Date().setHours(b.getHours(), b.getMinutes(), b.getSeconds()) -\n new Date().setHours(a.getHours(), a.getMinutes(), a.getSeconds()))) : undefined;\n }\n /**\n * @memberof IgxTimeSummaryOperand\n */\n operate(data = [], allData = [], fieldName, groupRecord) {\n const result = super.operate(data, allData, fieldName, groupRecord);\n result.push({\n key: 'earliest',\n label: 'Earliest',\n defaultFormatting: true,\n summaryResult: IgxTimeSummaryOperand.earliestTime(data)\n });\n result.push({\n key: 'latest',\n label: 'Latest',\n defaultFormatting: true,\n summaryResult: IgxTimeSummaryOperand.latestTime(data)\n });\n return result;\n }\n}\n\nclass IgxPivotAggregate {\n /**\n * Gets/Sets the resource strings.\n *\n * @remarks\n * By default it uses EN resources.\n */\n static set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n static get resourceStrings() {\n return this._resourceStrings;\n }\n /**\n * Gets array with default aggregator function for base aggregation.\n * ```typescript\n * IgxPivotAggregate.aggregators();\n * ```\n *\n * @memberof IgxPivotAggregate\n */\n static aggregators() {\n return [{\n key: 'COUNT',\n label: this.resourceStrings.igx_grid_pivot_aggregate_count,\n aggregator: IgxPivotAggregate.count\n }];\n }\n /**\n * Counts all the records in the data source.\n * If filtering is applied, counts only the filtered records.\n * ```typescript\n * IgxSummaryOperand.count(dataSource);\n * ```\n *\n * @memberof IgxPivotAggregate\n */\n static count(members) {\n return members.length;\n }\n}\nIgxPivotAggregate._resourceStrings = CurrentResourceStrings.GridResStrings;\nclass IgxPivotNumericAggregate extends IgxPivotAggregate {\n /**\n * Gets array with default aggregator function for numeric aggregation.\n * ```typescript\n * IgxPivotAggregate.aggregators();\n * ```\n *\n * @memberof IgxPivotAggregate\n */\n static aggregators() {\n let result = [];\n result = result.concat(super.aggregators());\n result.push({\n key: 'MIN',\n label: this.resourceStrings.igx_grid_pivot_aggregate_min,\n aggregator: IgxPivotNumericAggregate.min\n });\n result.push({\n key: 'MAX',\n label: this.resourceStrings.igx_grid_pivot_aggregate_max,\n aggregator: IgxPivotNumericAggregate.max\n });\n result.push({\n key: 'SUM',\n label: this.resourceStrings.igx_grid_pivot_aggregate_sum,\n aggregator: IgxPivotNumericAggregate.sum\n });\n result.push({\n key: 'AVG',\n label: this.resourceStrings.igx_grid_pivot_aggregate_avg,\n aggregator: IgxPivotNumericAggregate.average\n });\n return result;\n }\n /**\n * Returns the minimum numeric value in the provided data records.\n * If filtering is applied, returns the minimum value in the filtered data records.\n * ```typescript\n * IgxPivotNumericAggregate.min(members, data);\n * ```\n *\n * @memberof IgxPivotNumericAggregate\n */\n static min(members) {\n return IgxNumberSummaryOperand.min(members);\n }\n /**\n * Returns the maximum numeric value in the provided data records.\n * If filtering is applied, returns the maximum value in the filtered data records.\n * ```typescript\n * IgxPivotNumericAggregate.max(data);\n * ```\n *\n * @memberof IgxPivotNumericAggregate\n */\n static max(members) {\n return IgxNumberSummaryOperand.max(members);\n }\n /**\n * Returns the sum of the numeric values in the provided data records.\n * If filtering is applied, returns the sum of the numeric values in the data records.\n * ```typescript\n * IgxPivotNumericAggregate.sum(data);\n * ```\n *\n * @memberof IgxPivotNumericAggregate\n */\n static sum(members) {\n return IgxNumberSummaryOperand.sum(members);\n }\n /**\n * Returns the average numeric value in the data provided data records.\n * If filtering is applied, returns the average numeric value in the filtered data records.\n * ```typescript\n * IgxPivotNumericAggregate.average(data);\n * ```\n *\n * @memberof IgxPivotNumericAggregate\n */\n static average(members) {\n return IgxNumberSummaryOperand.average(members);\n }\n}\nclass IgxPivotDateAggregate extends IgxPivotAggregate {\n /**\n * Gets array with default aggregator function for date aggregation.\n * ```typescript\n * IgxPivotDateAggregate.aggregators();\n * ```\n *\n * @memberof IgxPivotAggregate\n */\n static aggregators() {\n let result = [];\n result = result.concat(super.aggregators());\n result.push({\n key: 'LATEST',\n label: this.resourceStrings.igx_grid_pivot_aggregate_date_latest,\n aggregator: IgxPivotDateAggregate.latest\n });\n result.push({\n key: 'EARLIEST',\n label: this.resourceStrings.igx_grid_pivot_aggregate_date_earliest,\n aggregator: IgxPivotDateAggregate.earliest\n });\n return result;\n }\n /**\n * Returns the latest date value in the data records.\n * If filtering is applied, returns the latest date value in the filtered data records.\n * ```typescript\n * IgxPivotDateAggregate.latest(data);\n * ```\n *\n * @memberof IgxPivotDateAggregate\n */\n static latest(members) {\n return IgxDateSummaryOperand.latest(members);\n }\n /**\n * Returns the earliest date value in the data records.\n * If filtering is applied, returns the latest date value in the filtered data records.\n * ```typescript\n * IgxPivotDateAggregate.earliest(data);\n * ```\n *\n * @memberof IgxPivotDateAggregate\n */\n static earliest(members) {\n return IgxDateSummaryOperand.earliest(members);\n }\n}\nclass IgxPivotTimeAggregate extends IgxPivotAggregate {\n /**\n * Gets array with default aggregator function for time aggregation.\n * ```typescript\n * IgxPivotTimeAggregate.aggregators();\n * ```\n *\n * @memberof IgxPivotAggregate\n */\n static aggregators() {\n let result = [];\n result = result.concat(super.aggregators());\n result.push({\n key: 'LATEST',\n label: this.resourceStrings.igx_grid_pivot_aggregate_time_latest,\n aggregator: IgxPivotTimeAggregate.latestTime\n });\n result.push({\n key: 'EARLIEST',\n label: this.resourceStrings.igx_grid_pivot_aggregate_time_earliest,\n aggregator: IgxPivotTimeAggregate.earliestTime\n });\n return result;\n }\n /**\n * Returns the latest time value in the data records. Compare only the time part of the date.\n * If filtering is applied, returns the latest time value in the filtered data records.\n * ```typescript\n * IgxPivotTimeAggregate.latestTime(data);\n * ```\n *\n * @memberof IgxPivotTimeAggregate\n */\n static latestTime(members) {\n return IgxTimeSummaryOperand.latestTime(members);\n }\n /**\n * Returns the earliest time value in the data records. Compare only the time part of the date.\n * If filtering is applied, returns the earliest time value in the filtered data records.\n * ```typescript\n * IgxPivotTimeAggregate.earliestTime(data);\n * ```\n *\n * @memberof IgxPivotTimeAggregate\n */\n static earliestTime(members) {\n return IgxTimeSummaryOperand.earliestTime(members);\n }\n}\n\n/**\n* Default pivot keys used for data processing in the pivot pipes.\n*/\nconst DEFAULT_PIVOT_KEYS = {\n aggregations: 'aggregations', records: 'records', children: 'children', level: 'level',\n rowDimensionSeparator: '_', columnDimensionSeparator: '-'\n};\n/** The dimension types - Row, Column or Filter. */\nvar PivotDimensionType;\n(function (PivotDimensionType) {\n PivotDimensionType[PivotDimensionType[\"Row\"] = 0] = \"Row\";\n PivotDimensionType[PivotDimensionType[\"Column\"] = 1] = \"Column\";\n PivotDimensionType[PivotDimensionType[\"Filter\"] = 2] = \"Filter\";\n})(PivotDimensionType || (PivotDimensionType = {}));\n\nclass PivotUtil {\n // go through all children and apply new dimension groups as child\n static processGroups(recs, dimension, pivotKeys) {\n for (const rec of recs) {\n // process existing children\n if (rec.children && rec.children.size > 0) {\n // process hierarchy in dept\n rec.children.forEach((values) => {\n this.processGroups(values, dimension, pivotKeys);\n });\n }\n // add children for current dimension\n const hierarchyFields = PivotUtil\n .getFieldsHierarchy(rec.records, [dimension], PivotDimensionType.Row, pivotKeys);\n const siblingData = PivotUtil\n .processHierarchy(hierarchyFields, pivotKeys, 0);\n rec.children.set(dimension.memberName, siblingData);\n }\n }\n static flattenGroups(data, dimension, expansionStates, defaultExpand, parent, parentRec) {\n for (let i = 0; i < data.length; i++) {\n const rec = data[i];\n const field = dimension.memberName;\n if (!field) {\n continue;\n }\n let recordsData = rec.children.get(field);\n if (!recordsData && parent) {\n // check parent\n recordsData = rec.children.get(parent.memberName);\n if (recordsData) {\n dimension = parent;\n }\n }\n if (parentRec) {\n parentRec.dimensionValues.forEach((value, key) => {\n if (parent.memberName !== key) {\n rec.dimensionValues.set(key, value);\n const dim = parentRec.dimensions.find(x => x.memberName === key);\n rec.dimensions.unshift(dim);\n }\n });\n }\n const expansionRowKey = PivotUtil.getRecordKey(rec, dimension);\n const isExpanded = expansionStates.get(expansionRowKey) === undefined ?\n defaultExpand :\n expansionStates.get(expansionRowKey);\n const shouldExpand = isExpanded || !dimension.childLevel || !rec.dimensionValues.get(dimension.memberName);\n if (shouldExpand && recordsData) {\n if (dimension.childLevel) {\n this.flattenGroups(recordsData, dimension.childLevel, expansionStates, defaultExpand, dimension, rec);\n }\n else {\n // copy parent values and dims in child\n recordsData.forEach(x => {\n rec.dimensionValues.forEach((value, key) => {\n if (dimension.memberName !== key) {\n x.dimensionValues.set(key, value);\n const dim = rec.dimensions.find(y => y.memberName === key);\n x.dimensions.unshift(dim);\n }\n });\n });\n }\n data.splice(i + 1, 0, ...recordsData);\n i += recordsData.length;\n }\n }\n }\n static assignLevels(dims) {\n for (const dim of dims) {\n let currDim = dim;\n let lvl = 0;\n while (currDim.childLevel) {\n currDim.level = lvl;\n currDim = currDim.childLevel;\n lvl++;\n }\n currDim.level = lvl;\n }\n }\n static getFieldsHierarchy(data, dimensions, dimensionType, pivotKeys) {\n const hierarchy = new Map();\n for (const rec of data) {\n const vals = dimensionType === PivotDimensionType.Column ?\n this.extractValuesForColumn(dimensions, rec, pivotKeys) :\n this.extractValuesForRow(dimensions, rec, pivotKeys);\n for (const [_key, val] of vals) { // this should go in depth also vals.children\n if (hierarchy.get(val.value) != null) {\n this.applyHierarchyChildren(hierarchy, val, rec, pivotKeys);\n }\n else {\n hierarchy.set(val.value, cloneValue(val));\n this.applyHierarchyChildren(hierarchy, val, rec, pivotKeys);\n }\n }\n }\n return hierarchy;\n }\n static sort(data, expressions, sorting = new IgxSorting()) {\n data.forEach(rec => {\n const children = rec.children;\n if (children) {\n children.forEach(x => {\n this.sort(x, expressions, sorting);\n });\n }\n });\n return DataUtil.sort(data, expressions, sorting);\n }\n static extractValueFromDimension(dim, recData) {\n return dim.memberFunction ? dim.memberFunction.call(null, recData) : recData[dim.memberName];\n }\n static getDimensionDepth(dim) {\n let lvl = 0;\n while (dim.childLevel) {\n lvl++;\n dim = dim.childLevel;\n }\n return lvl;\n }\n static extractValuesForRow(dims, recData, pivotKeys) {\n const values = new Map();\n for (const col of dims) {\n if (recData[pivotKeys.level] && recData[pivotKeys.level] > 0) {\n const childData = recData[pivotKeys.records];\n return this.getFieldsHierarchy(childData, [col], PivotDimensionType.Row, pivotKeys);\n }\n const value = this.extractValueFromDimension(col, recData);\n const objValue = {};\n objValue['value'] = value;\n objValue['dimension'] = col;\n if (col.childLevel) {\n const childValues = this.extractValuesForRow([col.childLevel], recData, pivotKeys);\n objValue[pivotKeys.children] = childValues;\n }\n values.set(value, objValue);\n }\n return values;\n }\n static extractValuesForColumn(dims, recData, pivotKeys, path = []) {\n const vals = new Map();\n let lvlCollection = vals;\n const flattenedDims = this.flatten(dims);\n for (const col of flattenedDims) {\n const value = this.extractValueFromDimension(col, recData);\n path.push(value);\n const newValue = path.join(pivotKeys.columnDimensionSeparator);\n const newObj = { value: newValue, expandable: col.expandable, children: null, dimension: col };\n if (!newObj.children) {\n newObj.children = new Map();\n }\n lvlCollection.set(newValue, newObj);\n lvlCollection = newObj.children;\n }\n return vals;\n }\n static flatten(arr, lvl = 0) {\n const newArr = arr.reduce((acc, item) => {\n item.level = lvl;\n acc.push(item);\n if (item.childLevel) {\n item.expandable = true;\n acc = acc.concat(this.flatten([item.childLevel], lvl + 1));\n }\n return acc;\n }, []);\n return newArr;\n }\n static applyAggregations(rec, hierarchies, values, pivotKeys) {\n if (hierarchies.size === 0) {\n // no column groups\n const aggregationResult = this.aggregate(rec.records, values);\n this.applyAggregationRecordData(aggregationResult, undefined, rec, pivotKeys);\n return;\n }\n hierarchies.forEach((hierarchy) => {\n const children = hierarchy[pivotKeys.children];\n if (children && children.size > 0) {\n this.applyAggregations(rec, children, values, pivotKeys);\n const childRecords = this.collectRecords(children, pivotKeys);\n hierarchy[pivotKeys.aggregations] = this.aggregate(childRecords, values);\n this.applyAggregationRecordData(hierarchy[pivotKeys.aggregations], hierarchy.value, rec, pivotKeys);\n }\n else if (hierarchy[pivotKeys.records]) {\n hierarchy[pivotKeys.aggregations] = this.aggregate(hierarchy[pivotKeys.records], values);\n this.applyAggregationRecordData(hierarchy[pivotKeys.aggregations], hierarchy.value, rec, pivotKeys);\n }\n });\n }\n static applyAggregationRecordData(aggregationData, groupName, rec, pivotKeys) {\n const aggregationKeys = Object.keys(aggregationData);\n if (aggregationKeys.length > 1) {\n aggregationKeys.forEach((key) => {\n const aggregationKey = groupName ? groupName + pivotKeys.columnDimensionSeparator + key : key;\n rec.aggregationValues.set(aggregationKey, aggregationData[key]);\n });\n }\n else if (aggregationKeys.length === 1) {\n const aggregationKey = aggregationKeys[0];\n rec.aggregationValues.set(groupName || aggregationKey, aggregationData[aggregationKey]);\n }\n }\n static aggregate(records, values) {\n const result = {};\n for (const pivotValue of values) {\n const aggregator = PivotUtil.getAggregatorForType(pivotValue.aggregate, pivotValue.dataType);\n if (!aggregator) {\n throw CurrentResourceStrings.GridResStrings.igx_grid_pivot_no_aggregator.replace(\"{0}\", pivotValue.member);\n }\n result[pivotValue.member] = aggregator(records.map(r => r[pivotValue.member]), records);\n }\n return result;\n }\n static getAggregatorForType(aggregate, dataType) {\n var _a;\n let aggregator = aggregate.aggregator;\n if (aggregate.aggregatorName) {\n let aggregators = IgxPivotNumericAggregate.aggregators();\n if (!dataType || dataType === 'date' || dataType === 'dateTime') {\n aggregators = aggregators.concat(IgxPivotDateAggregate.aggregators());\n }\n else if (dataType === 'time') {\n aggregators = aggregators.concat(IgxPivotTimeAggregate.aggregators());\n }\n aggregator = (_a = aggregators.find(x => x.key === aggregate.aggregatorName)) === null || _a === void 0 ? void 0 : _a.aggregator;\n }\n return aggregator;\n }\n static processHierarchy(hierarchies, pivotKeys, level = 0, rootData = false) {\n const flatData = [];\n hierarchies.forEach((h, key) => {\n const field = h.dimension.memberName;\n const rec = {\n dimensionValues: new Map(),\n aggregationValues: new Map(),\n children: new Map(),\n dimensions: [h.dimension]\n };\n rec.dimensionValues.set(field, key);\n if (h[pivotKeys.records]) {\n rec.records = this.getDirectLeafs(h[pivotKeys.records]);\n }\n rec.level = level;\n flatData.push(rec);\n if (h[pivotKeys.children] && h[pivotKeys.children].size > 0) {\n const nestedData = this.processHierarchy(h[pivotKeys.children], pivotKeys, level + 1, rootData);\n rec.records = this.getDirectLeafs(nestedData);\n rec.children.set(field, nestedData);\n }\n });\n return flatData;\n }\n static getDirectLeafs(records) {\n let leafs = [];\n for (const rec of records) {\n if (rec.records) {\n const data = rec.records.filter(x => !x.records && leafs.indexOf(x) === -1);\n leafs = leafs.concat(data);\n }\n else {\n leafs.push(rec);\n }\n }\n return leafs;\n }\n static getRecordKey(rec, currentDim) {\n const parentFields = [];\n const currentDimIndex = rec.dimensions.findIndex(x => x.memberName === currentDim.memberName) + 1;\n const prevDims = rec.dimensions.slice(0, currentDimIndex);\n for (const prev of prevDims) {\n const prevValue = rec.dimensionValues.get(prev.memberName);\n parentFields.push(prevValue);\n }\n return parentFields.join('-');\n }\n static buildExpressionTree(config) {\n const allDimensions = ((config === null || config === void 0 ? void 0 : config.rows) || []).concat(((config === null || config === void 0 ? void 0 : config.columns) || [])).concat((config === null || config === void 0 ? void 0 : config.filters) || []).filter(x => x !== null && x !== undefined);\n const enabledDimensions = allDimensions.filter(x => x && x.enabled);\n const expressionsTree = new FilteringExpressionsTree(FilteringLogic.And);\n // add expression trees from all filters\n PivotUtil.flatten(enabledDimensions).forEach((x) => {\n if (x.filter && x.filter.filteringOperands) {\n expressionsTree.filteringOperands.push(...x.filter.filteringOperands);\n }\n });\n return expressionsTree;\n }\n static collectRecords(children, pivotKeys) {\n let result = [];\n children.forEach(value => result = result.concat(value[pivotKeys.records]));\n return result;\n }\n static applyHierarchyChildren(hierarchy, val, rec, pivotKeys) {\n const recordsKey = pivotKeys.records;\n const childKey = pivotKeys.children;\n const childCollection = val[childKey];\n const hierarchyValue = hierarchy.get(val.value);\n if (Array.isArray(hierarchyValue[childKey])) {\n hierarchyValue[childKey] = new Map();\n }\n if (!childCollection || childCollection.size === 0) {\n const dim = hierarchyValue.dimension;\n const isValid = this.extractValueFromDimension(dim, rec) === val.value;\n if (isValid) {\n if (hierarchyValue[recordsKey]) {\n hierarchyValue[recordsKey].push(rec);\n }\n else {\n hierarchyValue[recordsKey] = [rec];\n }\n }\n }\n else {\n const hierarchyChild = hierarchyValue[childKey];\n for (const [_key, child] of childCollection) {\n let hierarchyChildValue = hierarchyChild.get(child.value);\n if (!hierarchyChildValue) {\n hierarchyChild.set(child.value, child);\n hierarchyChildValue = child;\n }\n if (hierarchyChildValue[recordsKey]) {\n const copy = Object.assign({}, rec);\n if (rec[recordsKey]) {\n // not all nested children are valid\n const nestedValue = hierarchyChildValue.value;\n const dimension = hierarchyChildValue.dimension;\n const validRecs = rec[recordsKey].filter(x => this.extractValueFromDimension(dimension, x) === nestedValue);\n copy[recordsKey] = validRecs;\n }\n hierarchyChildValue[recordsKey].push(copy);\n }\n else {\n hierarchyChildValue[recordsKey] = [rec];\n }\n if (child[childKey] && child[childKey].size > 0) {\n this.applyHierarchyChildren(hierarchyChild, child, rec, pivotKeys);\n }\n }\n }\n }\n static getAggregateList(val, grid) {\n if (!val.aggregateList) {\n let defaultAggr = this.getAggregatorsForValue(val, grid);\n const isDefault = defaultAggr.find((x) => x.key === val.aggregate.key);\n // resolve custom aggregations\n if (!isDefault && grid.data[0][val.member] !== undefined) {\n // if field exists, then we can apply default aggregations and add the custom one.\n defaultAggr.unshift(val.aggregate);\n }\n else if (!isDefault) {\n // otherwise this is a custom aggregation that is not compatible\n // with the defaults, since it operates on field that is not in the data\n // leave only the custom one.\n defaultAggr = [val.aggregate];\n }\n val.aggregateList = defaultAggr;\n }\n return val.aggregateList;\n }\n static getAggregatorsForValue(value, grid) {\n const dataType = value.dataType || grid.resolveDataTypes(grid.data[0][value.member]);\n switch (dataType) {\n case GridColumnDataType.Number:\n case GridColumnDataType.Currency:\n return IgxPivotNumericAggregate.aggregators();\n case GridColumnDataType.Date:\n case GridColumnDataType.DateTime:\n return IgxPivotDateAggregate.aggregators();\n case GridColumnDataType.Time:\n return IgxPivotTimeAggregate.aggregators();\n default:\n return IgxPivotAggregate.aggregators();\n }\n }\n}\n\nclass DefaultPivotGridRecordSortingStrategy extends DefaultSortingStrategy {\n static instance() {\n return this._instance || (this._instance = new this());\n }\n sort(data, fieldName, dir, ignoreCase, valueResolver, isDate, isTime, _grid) {\n const reverse = (dir === SortingDirection.Desc ? -1 : 1);\n const cmpFunc = (obj1, obj2) => this.compareObjects(obj1, obj2, fieldName, reverse, ignoreCase, this.getFieldValue, isDate, isTime);\n return this.arraySort(data, cmpFunc);\n }\n getFieldValue(obj, key, _isDate = false, _isTime = false) {\n return obj.aggregationValues.get(key);\n }\n}\nDefaultPivotGridRecordSortingStrategy._instance = null;\nclass DefaultPivotSortingStrategy extends DefaultSortingStrategy {\n static instance() {\n return this._instance || (this._instance = new this());\n }\n sort(data, fieldName, dir, ignoreCase, valueResolver, isDate, isTime, grid) {\n const key = fieldName;\n const allDimensions = grid.allDimensions;\n const enabledDimensions = allDimensions.filter(x => x && x.enabled);\n this.dimension = PivotUtil.flatten(enabledDimensions).find(x => x.memberName === key);\n const reverse = (dir === SortingDirection.Desc ? -1 : 1);\n const cmpFunc = (obj1, obj2) => this.compareObjects(obj1, obj2, key, reverse, ignoreCase, this.getFieldValue, isDate, isTime);\n return this.arraySort(data, cmpFunc);\n }\n getFieldValue(obj, key, _isDate = false, isTime = false) {\n let resolvedValue = PivotUtil.extractValueFromDimension(this.dimension, obj) || obj[0];\n const formatAsDate = this.dimension.dataType === GridColumnDataType.Date || this.dimension.dataType === GridColumnDataType.DateTime;\n if (formatAsDate) {\n const date = parseDate(resolvedValue);\n resolvedValue = isTime && date ?\n new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()) : date;\n }\n return resolvedValue;\n }\n}\nDefaultPivotSortingStrategy._instance = null;\n\nclass NoopPivotDimensionsStrategy {\n static instance() {\n return this._instance || (this._instance = new NoopPivotDimensionsStrategy());\n }\n process(collection, _, __) {\n return collection;\n }\n}\nNoopPivotDimensionsStrategy._instance = null;\nclass PivotRowDimensionsStrategy {\n static instance() {\n return this._instance || (this._instance = new PivotRowDimensionsStrategy());\n }\n process(collection, rows, values, pivotKeys = DEFAULT_PIVOT_KEYS) {\n let hierarchies;\n let data;\n const prevRowDims = [];\n const currRows = cloneArray(rows, true);\n PivotUtil.assignLevels(currRows);\n if (currRows.length === 0) {\n hierarchies = PivotUtil.getFieldsHierarchy(collection, [{ memberName: '', enabled: true }], PivotDimensionType.Row, pivotKeys);\n // generate flat data from the hierarchies\n data = PivotUtil.processHierarchy(hierarchies, pivotKeys, 0, true);\n return data;\n }\n for (const row of currRows) {\n if (!data) {\n // build hierarchies - groups and subgroups\n hierarchies = PivotUtil.getFieldsHierarchy(collection, [row], PivotDimensionType.Row, pivotKeys);\n // generate flat data from the hierarchies\n data = PivotUtil.processHierarchy(hierarchies, pivotKeys, 0, true);\n prevRowDims.push(row);\n }\n else {\n PivotUtil.processGroups(data, row, pivotKeys);\n }\n }\n return data;\n }\n}\nPivotRowDimensionsStrategy._instance = null;\nclass PivotColumnDimensionsStrategy {\n static instance() {\n return this._instance || (this._instance = new PivotColumnDimensionsStrategy());\n }\n process(collection, columns, values, pivotKeys = DEFAULT_PIVOT_KEYS) {\n const res = this.processHierarchy(collection, columns, values, pivotKeys);\n return res;\n }\n processHierarchy(collection, columns, values, pivotKeys) {\n const result = [];\n collection.forEach(rec => {\n // apply aggregations based on the created groups and generate column fields based on the hierarchies\n this.groupColumns(rec, columns, values, pivotKeys);\n result.push(rec);\n });\n return result;\n }\n groupColumns(rec, columns, values, pivotKeys) {\n const children = rec.children;\n if (children && children.size > 0) {\n children.forEach((childRecs) => {\n if (childRecs) {\n childRecs.forEach(child => {\n this.groupColumns(child, columns, values, pivotKeys);\n });\n }\n });\n }\n this.applyAggregates(rec, columns, values, pivotKeys);\n }\n applyAggregates(rec, columns, values, pivotKeys) {\n const leafRecords = this.getLeafs(rec.records, pivotKeys);\n const hierarchy = PivotUtil.getFieldsHierarchy(leafRecords, columns, PivotDimensionType.Column, pivotKeys);\n PivotUtil.applyAggregations(rec, hierarchy, values, pivotKeys);\n }\n getLeafs(records, pivotKeys) {\n let leafs = [];\n for (const rec of records) {\n if (rec[pivotKeys.records]) {\n leafs = leafs.concat(this.getLeafs(rec[pivotKeys.records], pivotKeys));\n }\n else {\n leafs.push(rec);\n }\n }\n return leafs;\n }\n}\nPivotColumnDimensionsStrategy._instance = null;\nclass DimensionValuesFilteringStrategy extends FilteringStrategy {\n /**\n * Creates a new instance of FormattedValuesFilteringStrategy.\n *\n * @param fields An array of column field names that should be formatted.\n * If omitted the values of all columns which has formatter will be formatted.\n */\n constructor(fields) {\n super();\n this.fields = fields;\n }\n getFieldValue(rec, fieldName, _isDate = false, _isTime = false, grid) {\n const allDimensions = grid.allDimensions;\n const enabledDimensions = allDimensions.filter(x => x && x.enabled);\n const dim = PivotUtil.flatten(enabledDimensions).find(x => x.memberName === fieldName);\n const value = dim.childLevel ? this._getDimensionValueHierarchy(dim, rec).map(x => `[` + x + `]`).join('.') : PivotUtil.extractValueFromDimension(dim, rec);\n return value;\n }\n getFilterItems(column, tree) {\n const grid = column.grid;\n const enabledDimensions = grid.allDimensions.filter(x => x && x.enabled);\n let data = column.grid.gridAPI.filterDataByExpressions(tree);\n const dim = enabledDimensions.find(x => x.memberName === column.field);\n const allValuesHierarchy = PivotUtil.getFieldsHierarchy(data, [dim], PivotDimensionType.Column, grid.pivotKeys);\n const isNoop = grid.pivotConfiguration.columnStrategy instanceof NoopPivotDimensionsStrategy || grid.pivotConfiguration.rowStrategy instanceof NoopPivotDimensionsStrategy;\n const items = !isNoop ? this._getFilterItems(allValuesHierarchy, grid.pivotKeys) : [{ value: '' }];\n return Promise.resolve(items);\n }\n _getFilterItems(hierarchy, pivotKeys) {\n const items = [];\n hierarchy.forEach((value) => {\n const val = value.value;\n const path = val.split(pivotKeys.columnDimensionSeparator);\n const hierarchicalValue = path.length > 1 ? path.map(x => `[` + x + `]`).join('.') : val;\n const text = path[path.length - 1];\n items.push({\n value: hierarchicalValue,\n label: text,\n children: this._getFilterItems(value.children, pivotKeys)\n });\n });\n return items;\n }\n _getDimensionValueHierarchy(dim, rec) {\n let path = [];\n let value = PivotUtil.extractValueFromDimension(dim, rec);\n path.push(value);\n if (dim.childLevel) {\n const childVals = this._getDimensionValueHierarchy(dim.childLevel, rec);\n path = path.concat(childVals);\n }\n return path;\n }\n}\n\n/**\n * @hidden\n */\nclass GroupedRecords extends Array {\n}\n\nclass IgxGridActionButtonComponent {\n constructor() {\n /**\n * Event emitted when action button is clicked.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.actionClick = new EventEmitter();\n /**\n * Whether button action is rendered in menu and should container text label.\n */\n this.asMenuItem = false;\n }\n /** @hidden @internal */\n get containerClass() {\n return 'igx-action-strip__menu-button ' + (this.classNames || '');\n }\n /**\n * @hidden\n * @internal\n */\n handleClick(event) {\n this.actionClick.emit(event);\n }\n /**\n * @hidden @internal\n */\n preventEvent(event) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n }\n}\nIgxGridActionButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridActionButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxGridActionButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridActionButtonComponent, selector: \"igx-grid-action-button\", inputs: { asMenuItem: \"asMenuItem\", iconName: \"iconName\", classNames: \"classNames\", iconSet: \"iconSet\", labelText: \"labelText\" }, outputs: { actionClick: \"actionClick\" }, viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true }, { propertyName: \"templateRef\", first: true, predicate: [\"menuItemTemplate\"], descendants: true }], ngImport: i0, template: \"\\n \\n\\n\\n\\n \\n
    \\n {{iconName}}\\n {{iconName}}\\n \\n
    \\n
    \\n
    \", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridActionButtonComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-grid-action-button', template: \"\\n \\n\\n\\n\\n \\n
    \\n {{iconName}}\\n {{iconName}}\\n \\n
    \\n
    \\n
    \" }]\n }], propDecorators: { container: [{\n type: ViewChild,\n args: ['container']\n }], actionClick: [{\n type: Output\n }], templateRef: [{\n type: ViewChild,\n args: ['menuItemTemplate']\n }], asMenuItem: [{\n type: Input\n }], iconName: [{\n type: Input\n }], classNames: [{\n type: Input\n }], iconSet: [{\n type: Input\n }], labelText: [{\n type: Input\n }] } });\n\nconst LabelPosition = mkenum({\n BEFORE: 'before',\n AFTER: 'after'\n});\nlet nextId$1 = 0;\n/**\n * Allows users to make a binary choice for a certain condition.\n *\n * @igxModule IgxCheckboxModule\n *\n * @igxTheme igx-checkbox-theme\n *\n * @igxKeywords checkbox, label\n *\n * @igxGroup Data entry and display\n *\n * @remarks\n * The Ignite UI Checkbox is a selection control that allows users to make a binary choice for a certain condition.It behaves similarly\n * to the native browser checkbox.\n *\n * @example\n * ```html\n * \n * simple checkbox\n * \n * ```\n */\nclass IgxCheckboxComponent {\n /**\n * Returns reference to the `nativeElement` of the igx-checkbox.\n *\n * @example\n * ```typescript\n * let nativeElement = this.checkbox.nativeElement;\n * ```\n */\n get nativeElement() {\n return this.nativeCheckbox.nativeElement;\n }\n /**\n * Sets/gets whether the checkbox is required.\n * If not set, `required` will have value `false`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let isRequired = this.checkbox.required;\n * ```\n */\n get required() {\n return this._required || this.nativeElement.hasAttribute('required');\n }\n set required(value) {\n this._required = (value === '') || value;\n }\n /**\n * Sets/gets whether the checkbox is checked.\n * Default value is `false`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let isChecked = this.checkbox.checked;\n * ```\n */\n get checked() {\n return this._checked;\n }\n set checked(value) {\n if (this._checked !== value) {\n this._checked = value;\n this._onChangeCallback(this._checked);\n }\n }\n /**\n * Sets/gets whether the checkbox is disabled.\n * Default value is `false`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let isDisabled = this.checkbox.disabled;\n * ```\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = (value === '') || value;\n }\n /**\n * Sets/gets whether the checkbox is invalid.\n * Default value is `false`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let isInvalid = this.checkbox.invalid;\n * ```\n */\n get invalid() {\n return this._invalid || false;\n }\n set invalid(value) {\n this._invalid = !!value;\n }\n constructor(cdr, renderer, ngControl) {\n this.cdr = cdr;\n this.renderer = renderer;\n this.ngControl = ngControl;\n /**\n * An event that is emitted after the checkbox state is changed.\n * Provides references to the `IgxCheckboxComponent` and the `checked` property as event arguments.\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n this.change = new EventEmitter();\n /**\n * @hidden\n * @internal\n */\n this.destroy$ = new Subject();\n /**\n * Sets/gets the `id` of the checkbox component.\n * If not set, the `id` of the first checkbox component will be `\"igx-checkbox-0\"`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let checkboxId = this.checkbox.id;\n * ```\n */\n this.id = `igx-checkbox-${nextId$1++}`;\n /**\n * Sets/gets the id of the `label` element.\n * If not set, the id of the `label` in the first checkbox component will be `\"igx-checkbox-0-label\"`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let labelId = this.checkbox.labelId;\n * ```\n */\n this.labelId = `${this.id}-label`;\n /**\n * Sets/gets the value of the `tabindex` attribute.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let tabIndex = this.checkbox.tabindex;\n * ```\n */\n this.tabindex = null;\n /**\n * Sets/gets the position of the `label`.\n * If not set, the `labelPosition` will have value `\"after\"`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let labelPosition = this.checkbox.labelPosition;\n * ```\n */\n this.labelPosition = LabelPosition.AFTER;\n /**\n * Enables/Disables the ripple effect.\n * If not set, `disableRipple` will have value `false`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let isRippleDisabled = this.checkbox.desableRipple;\n * ```\n */\n this.disableRipple = false;\n /**\n * Sets/gets the `aria-labelledby` attribute.\n * If not set, the `aria-labelledby` will be equal to the value of `labelId` attribute.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let ariaLabelledBy = this.checkbox.ariaLabelledBy;\n * ```\n */\n this.ariaLabelledBy = this.labelId;\n /**\n * Sets/gets the value of the `aria-label` attribute.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let ariaLabel = this.checkbox.ariaLabel;\n * ```\n */\n this.ariaLabel = null;\n /**\n * Returns the class of the checkbox component.\n *\n * @example\n * ```typescript\n * let class = this.checkbox.cssClass;\n * ```\n */\n this.cssClass = 'igx-checkbox';\n /**\n * Sets/gets whether the checkbox component is on focus.\n * Default value is `false`.\n *\n * @example\n * ```typescript\n * this.checkbox.focused = true;\n * ```\n * ```typescript\n * let isFocused = this.checkbox.focused;\n * ```\n */\n this.focused = false;\n /**\n * Sets/gets the checkbox indeterminate visual state.\n * Default value is `false`;\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let isIndeterminate = this.checkbox.indeterminate;\n * ```\n */\n this.indeterminate = false;\n /**\n * Sets/gets whether the checkbox is readonly.\n * Default value is `false`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let readonly = this.checkbox.readonly;\n * ```\n */\n this.readonly = false;\n /**\n * Sets/gets whether the checkbox should disable all css transitions.\n * Default value is `false`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let disableTransitions = this.checkbox.disableTransitions;\n * ```\n */\n this.disableTransitions = false;\n /**\n * @hidden\n * @internal\n */\n this.inputId = `${this.id}-input`;\n /**\n * @hidden\n * @internal\n */\n this._checked = false;\n /**\n * @hidden\n * @internal\n */\n this._required = false;\n /**\n * @hidden\n * @internal\n */\n this._disabled = false;\n /**\n * @hidden\n * @internal\n */\n this._invalid = false;\n /**\n * @hidden\n */\n this._onTouchedCallback = noop;\n /**\n * @hidden\n */\n this._onChangeCallback = noop;\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n /**\n * @hidden\n * @internal\n */\n ngAfterViewInit() {\n var _a, _b;\n if (this.ngControl) {\n this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.updateValidityState.bind(this));\n if (this.ngControl.control.validator || this.ngControl.control.asyncValidator) {\n this._required = (_b = (_a = this.ngControl) === null || _a === void 0 ? void 0 : _a.control) === null || _b === void 0 ? void 0 : _b.hasValidator(Validators.required);\n this.cdr.detectChanges();\n }\n }\n }\n /** @hidden @internal */\n onKeyUp(event) {\n event.stopPropagation();\n this.focused = true;\n }\n /** @hidden @internal */\n _onCheckboxClick(event) {\n // Since the original checkbox is hidden and the label\n // is used for styling and to change the checked state of the checkbox,\n // we need to prevent the checkbox click event from bubbling up\n // as it gets triggered on label click\n // NOTE: The above is no longer valid, as the native checkbox is not labeled\n // by the SVG anymore.\n if (this.disabled || this.readonly) {\n // readonly prevents the component from changing state (see toggle() method).\n // However, the native checkbox can still be activated through user interaction (focus + space, label click)\n // Prevent the native change so the input remains in sync\n event.preventDefault();\n return;\n }\n this.nativeCheckbox.nativeElement.focus();\n this.indeterminate = false;\n this.checked = !this.checked;\n this.updateValidityState();\n // K.D. March 23, 2021 Emitting on click and not on the setter because otherwise every component\n // bound on change would have to perform self checks for weather the value has changed because\n // of the initial set on initialization\n this.change.emit({ checked: this._checked, checkbox: this });\n }\n /**\n * @hidden\n * @internal\n */\n get ariaChecked() {\n if (this.indeterminate) {\n return 'mixed';\n }\n else {\n return this.checked;\n }\n }\n /** @hidden @internal */\n _onCheckboxChange(event) {\n // We have to stop the original checkbox change event\n // from bubbling up since we emit our own change event\n event.stopPropagation();\n }\n /** @hidden @internal */\n onBlur() {\n this.focused = false;\n this._onTouchedCallback();\n this.updateValidityState();\n }\n /** @hidden @internal */\n writeValue(value) {\n this._checked = value;\n }\n /** @hidden @internal */\n get labelClass() {\n switch (this.labelPosition) {\n case LabelPosition.BEFORE:\n return `${this.cssClass}__label--before`;\n case LabelPosition.AFTER:\n default:\n return `${this.cssClass}__label`;\n }\n }\n /** @hidden @internal */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /** @hidden @internal */\n registerOnTouched(fn) {\n this._onTouchedCallback = fn;\n }\n /** @hidden @internal */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /** @hidden @internal */\n getEditElement() {\n return this.nativeCheckbox.nativeElement;\n }\n /**\n * @hidden\n * @internal\n */\n updateValidityState() {\n if (this.ngControl) {\n if (!this.disabled && !this.readonly &&\n (this.ngControl.control.touched || this.ngControl.control.dirty)) {\n // the control is not disabled and is touched or dirty\n this._invalid = this.ngControl.invalid;\n }\n else {\n // if the control is untouched, pristine, or disabled, its state is initial. This is when the user did not interact\n // with the checkbox or when the form/control is reset\n this._invalid = false;\n }\n }\n else {\n this.checkNativeValidity();\n }\n }\n /**\n * A function to assign a native validity property of a checkbox.\n * This should be used when there's no ngControl\n *\n * @hidden\n * @internal\n */\n checkNativeValidity() {\n if (!this.disabled && this._required && !this.checked && !this.readonly) {\n this._invalid = true;\n }\n else {\n this._invalid = false;\n }\n }\n}\nIgxCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i5.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCheckboxComponent, selector: \"igx-checkbox\", inputs: { id: \"id\", labelId: \"labelId\", value: \"value\", name: \"name\", tabindex: \"tabindex\", labelPosition: \"labelPosition\", disableRipple: \"disableRipple\", required: \"required\", ariaLabelledBy: [\"aria-labelledby\", \"ariaLabelledBy\"], ariaLabel: [\"aria-label\", \"ariaLabel\"], indeterminate: \"indeterminate\", checked: \"checked\", disabled: \"disabled\", invalid: \"invalid\", readonly: \"readonly\", disableTransitions: \"disableTransitions\" }, outputs: { change: \"change\" }, host: { listeners: { \"keyup\": \"onKeyUp($event)\", \"click\": \"_onCheckboxClick($event)\", \"blur\": \"onBlur()\" }, properties: { \"attr.id\": \"this.id\", \"class.igx-checkbox\": \"this.cssClass\", \"class.igx-checkbox--focused\": \"this.focused\", \"class.igx-checkbox--indeterminate\": \"this.indeterminate\", \"class.igx-checkbox--checked\": \"this.checked\", \"class.igx-checkbox--disabled\": \"this.disabled\", \"class.igx-checkbox--invalid\": \"this.invalid\", \"class.igx-checkbox--plain\": \"this.disableTransitions\" } }, providers: [{\n provide: EDITOR_PROVIDER,\n useExisting: IgxCheckboxComponent,\n multi: true\n }], viewQueries: [{ propertyName: \"nativeCheckbox\", first: true, predicate: [\"checkbox\"], descendants: true, static: true }, { propertyName: \"nativeLabel\", first: true, predicate: [\"label\"], descendants: true, static: true }, { propertyName: \"placeholderLabel\", first: true, predicate: [\"placeholderLabel\"], descendants: true, static: true }], ngImport: i0, template: \"\\n\\n\\n \\n \\n \\n \\n \\n\\n
    \\n\\n\\n\\n \\n\\n\", dependencies: [{ kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCheckboxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-checkbox', providers: [{\n provide: EDITOR_PROVIDER,\n useExisting: IgxCheckboxComponent,\n multi: true\n }], preserveWhitespaces: false, template: \"\\n\\n\\n \\n \\n \\n \\n \\n\\n
    \\n\\n\\n\\n \\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i5.NgControl, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }];\n }, propDecorators: { change: [{\n type: Output\n }], nativeCheckbox: [{\n type: ViewChild,\n args: ['checkbox', { static: true }]\n }], nativeLabel: [{\n type: ViewChild,\n args: ['label', { static: true }]\n }], placeholderLabel: [{\n type: ViewChild,\n args: ['placeholderLabel', { static: true }]\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], labelId: [{\n type: Input\n }], value: [{\n type: Input\n }], name: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], disableRipple: [{\n type: Input\n }], required: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input,\n args: ['aria-labelledby']\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-checkbox']\n }], focused: [{\n type: HostBinding,\n args: ['class.igx-checkbox--focused']\n }], indeterminate: [{\n type: HostBinding,\n args: ['class.igx-checkbox--indeterminate']\n }, {\n type: Input\n }], checked: [{\n type: HostBinding,\n args: ['class.igx-checkbox--checked']\n }, {\n type: Input\n }], disabled: [{\n type: HostBinding,\n args: ['class.igx-checkbox--disabled']\n }, {\n type: Input\n }], invalid: [{\n type: HostBinding,\n args: ['class.igx-checkbox--invalid']\n }, {\n type: Input\n }], readonly: [{\n type: Input\n }], disableTransitions: [{\n type: HostBinding,\n args: ['class.igx-checkbox--plain']\n }, {\n type: Input\n }], onKeyUp: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }], _onCheckboxClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], onBlur: [{\n type: HostListener,\n args: ['blur']\n }] } });\n/**\n * @hidden\n */\nclass IgxCheckboxModule {\n}\nIgxCheckboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxCheckboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCheckboxModule, declarations: [IgxCheckboxComponent], imports: [IgxRippleModule], exports: [IgxCheckboxComponent] });\nIgxCheckboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCheckboxModule, imports: [IgxRippleModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCheckboxModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxCheckboxComponent],\n exports: [IgxCheckboxComponent],\n imports: [IgxRippleModule]\n }]\n }] });\n\nclass IgxEditRow {\n constructor(id, index, data, grid) {\n this.id = id;\n this.index = index;\n this.data = data;\n this.grid = grid;\n this.rowFormGroup = new FormGroup({});\n this.rowFormGroup = this.grid.validation.create(id, data);\n }\n createEditEventArgs(includeNewValue = true, event) {\n var _a;\n const args = {\n rowID: this.id,\n primaryKey: this.id,\n rowData: this.data,\n oldValue: this.data,\n cancel: false,\n owner: this.grid,\n isAddRow: false,\n valid: this.rowFormGroup.valid,\n event\n };\n if (includeNewValue) {\n args.newValue = (_a = this.newData) !== null && _a !== void 0 ? _a : this.data;\n }\n return args;\n }\n createDoneEditEventArgs(cachedRowData, event) {\n const updatedData = this.grid.transactions.enabled ?\n this.grid.transactions.getAggregatedValue(this.id, true) : this.grid.gridAPI.getRowData(this.id);\n const rowData = updatedData !== null && updatedData !== void 0 ? updatedData : this.grid.gridAPI.getRowData(this.id);\n const args = {\n rowID: this.id,\n primaryKey: this.id,\n rowData,\n oldValue: cachedRowData,\n newValue: updatedData,\n owner: this.grid,\n isAddRow: false,\n valid: true,\n event\n };\n return args;\n }\n getClassName() {\n return this.constructor.name;\n }\n}\nclass IgxAddRow extends IgxEditRow {\n constructor(id, index, data, recordRef, grid) {\n super(id, index, data, grid);\n this.recordRef = recordRef;\n this.isAddRow = true;\n }\n createEditEventArgs(includeNewValue = true, event) {\n const args = super.createEditEventArgs(includeNewValue, event);\n args.oldValue = null;\n args.isAddRow = true;\n return args;\n }\n createDoneEditEventArgs(cachedRowData, event) {\n const args = super.createDoneEditEventArgs(null, event);\n args.isAddRow = true;\n return args;\n }\n}\nclass IgxCell {\n constructor(id, rowIndex, column, value, _editValue, rowData, grid) {\n this.id = id;\n this.rowIndex = rowIndex;\n this.column = column;\n this.value = value;\n this._editValue = _editValue;\n this.rowData = rowData;\n this.grid = grid;\n this.grid.validation.create(id.rowID, rowData);\n }\n get editValue() {\n const formControl = this.grid.validation.getFormControl(this.id.rowID, this.column.field);\n if (formControl) {\n return formControl.value;\n }\n }\n set editValue(value) {\n const formControl = this.grid.validation.getFormControl(this.id.rowID, this.column.field);\n if (this.grid.validationTrigger === 'change') {\n // in case trigger is change, mark as touched.\n formControl.setValue(value);\n formControl.markAsTouched();\n }\n else {\n this.pendingValue = value;\n }\n }\n castToNumber(value) {\n if (this.column.dataType === 'number' && !this.column.inlineEditorTemplate) {\n const v = parseFloat(value);\n return !isNaN(v) && isFinite(v) ? v : 0;\n }\n return value;\n }\n createEditEventArgs(includeNewValue = true, event) {\n const formControl = this.grid.validation.getFormControl(this.id.rowID, this.column.field);\n const args = {\n rowID: this.id.rowID,\n primaryKey: this.id.rowID,\n cellID: this.id,\n rowData: this.rowData,\n oldValue: this.value,\n cancel: false,\n column: this.column,\n owner: this.grid,\n valid: formControl ? formControl.valid : true,\n event\n };\n if (includeNewValue) {\n args.newValue = this.castToNumber(this.editValue);\n }\n return args;\n }\n createDoneEditEventArgs(value, event) {\n const updatedData = this.grid.transactions.enabled ?\n this.grid.transactions.getAggregatedValue(this.id.rowID, true) : this.rowData;\n const rowData = updatedData === null ? this.grid.gridAPI.getRowData(this.id.rowID) : updatedData;\n const formControl = this.grid.validation.getFormControl(this.id.rowID, this.column.field);\n const args = {\n rowID: this.id.rowID,\n primaryKey: this.id.rowID,\n cellID: this.id,\n // rowData - should be the updated/committed rowData - this effectively should be the newValue\n // the only case we use this.rowData directly, is when there is no rowEditing or transactions enabled\n rowData,\n oldValue: this.value,\n valid: formControl ? formControl.valid : true,\n newValue: value,\n column: this.column,\n owner: this.grid,\n event\n };\n return args;\n }\n}\nclass IgxCellCrudState {\n constructor() {\n this.cell = null;\n this.row = null;\n this.isInCompositionMode = false;\n }\n createCell(cell) {\n return this.cell = new IgxCell(cell.cellID || cell.id, cell.row.index, cell.column, cell.value, cell.value, cell.row.data, cell.grid);\n }\n createRow(cell) {\n return this.row = new IgxEditRow(cell.id.rowID, cell.rowIndex, cell.rowData, cell.grid);\n }\n sameRow(rowID) {\n return this.row && this.row.id === rowID;\n }\n sameCell(cell) {\n return (this.cell.id.rowID === cell.id.rowID &&\n this.cell.id.columnID === cell.id.columnID);\n }\n get cellInEditMode() {\n return !!this.cell;\n }\n beginCellEdit(event) {\n const args = this.cell.createEditEventArgs(false, event);\n this.grid.cellEditEnter.emit(args);\n if (args.cancel) {\n this.endCellEdit();\n }\n }\n cellEdit(event) {\n const args = this.cell.createEditEventArgs(true, event);\n this.grid.cellEdit.emit(args);\n return args;\n }\n updateCell(exit, event) {\n if (!this.cell) {\n return;\n }\n const formControl = this.grid.validation.getFormControl(this.cell.id.rowID, this.cell.column.field);\n if (this.grid.validationTrigger === 'blur' && this.cell.pendingValue !== undefined) {\n // in case trigger is blur, update value if there's a pending one and mark as touched.\n formControl.setValue(this.cell.pendingValue);\n formControl.markAsTouched();\n }\n if (this.grid.validationTrigger === 'blur') {\n this.grid.tbody.nativeElement.focus({ preventScroll: true });\n }\n let doneArgs;\n if (this.cell.column.dataType === 'date' && !isDate(this.cell.value)) {\n if (isEqual(DateTimeUtil.parseIsoDate(this.cell.value), this.cell.editValue)) {\n doneArgs = this.exitCellEdit(event);\n return doneArgs;\n }\n }\n if (isEqual(this.cell.value, this.cell.editValue)) {\n doneArgs = this.exitCellEdit(event);\n return doneArgs;\n }\n const args = this.cellEdit(event);\n if (args.cancel) {\n return args;\n }\n this.grid.gridAPI.update_cell(this.cell);\n doneArgs = this.cellEditDone(event, false);\n if (exit) {\n doneArgs = this.exitCellEdit(event);\n }\n return Object.assign(Object.assign({}, args), doneArgs);\n }\n cellEditDone(event, addRow) {\n const newValue = this.cell.castToNumber(this.cell.editValue);\n const doneArgs = this.cell.createDoneEditEventArgs(newValue, event);\n this.grid.cellEditDone.emit(doneArgs);\n if (addRow) {\n doneArgs.rowData = this.row.data;\n }\n return doneArgs;\n }\n /** Exit cell edit mode */\n exitCellEdit(event) {\n var _a;\n if (!this.cell) {\n return;\n }\n const newValue = this.cell.castToNumber(this.cell.editValue);\n const args = (_a = this.cell) === null || _a === void 0 ? void 0 : _a.createDoneEditEventArgs(newValue, event);\n this.cell.value = newValue;\n this.grid.cellEditExit.emit(args);\n this.endCellEdit();\n return args;\n }\n /** Clears cell editing state */\n endCellEdit() {\n this.cell = null;\n }\n /** Returns whether the targeted cell is in edit mode */\n targetInEdit(rowIndex, columnIndex) {\n if (!this.cell) {\n return false;\n }\n const res = this.cell.column.index === columnIndex && this.cell.rowIndex === rowIndex;\n return res;\n }\n}\nclass IgxRowCrudState extends IgxCellCrudState {\n constructor() {\n super(...arguments);\n this.closeRowEditingOverlay = new Subject();\n this._rowEditingBlocked = false;\n this._rowEditingStarted = false;\n }\n get primaryKey() {\n return this.grid.primaryKey;\n }\n get rowInEditMode() {\n const editRowState = this.row;\n return editRowState !== null ? this.grid.rowList.find(e => e.key === editRowState.id) : null;\n }\n get rowEditing() {\n return this.grid.rowEditable;\n }\n get nonEditable() {\n return this.grid.rowEditable && (this.grid.primaryKey === undefined || this.grid.primaryKey === null);\n }\n get rowEditingBlocked() {\n return this._rowEditingBlocked;\n }\n set rowEditingBlocked(val) {\n this._rowEditingBlocked = val;\n }\n /** Enters row edit mode */\n beginRowEdit(event) {\n if (!this.row || !(this.row.getClassName() === IgxEditRow.name)) {\n if (!this.row) {\n this.createRow(this.cell);\n }\n if (!this._rowEditingStarted) {\n const rowArgs = this.row.createEditEventArgs(false, event);\n this.grid.rowEditEnter.emit(rowArgs);\n if (rowArgs.cancel) {\n this.endEditMode();\n return true;\n }\n this._rowEditingStarted = true;\n }\n this.row.transactionState = this.grid.transactions.getAggregatedValue(this.row.id, true);\n this.grid.transactions.startPending();\n this.grid.openRowOverlay(this.row.id);\n }\n }\n rowEdit(event) {\n const args = this.row.createEditEventArgs(true, event);\n this.grid.rowEdit.emit(args);\n return args;\n }\n updateRow(commit, event) {\n if (!this.grid.rowEditable ||\n this.grid.rowEditingOverlay &&\n this.grid.rowEditingOverlay.collapsed || !this.row) {\n return {};\n }\n let args;\n if (commit) {\n this.row.newData = this.grid.transactions.getAggregatedValue(this.row.id, true);\n this.updateRowEditData(this.row, this.row.newData);\n args = this.rowEdit(event);\n if (args.cancel) {\n return args;\n }\n }\n args = this.endRowTransaction(commit, event);\n return args;\n }\n /**\n * @hidden @internal\n */\n endRowTransaction(commit, event) {\n var _a;\n this.row.newData = this.grid.transactions.getAggregatedValue(this.row.id, true);\n let rowEditArgs = this.row.createEditEventArgs(true, event);\n let nonCancelableArgs;\n if (!commit) {\n this.grid.transactions.endPending(false);\n const isAddRow = this.row && this.row.getClassName() === IgxAddRow.name;\n const id = this.row ? this.row.id : this.cell.id.rowID;\n if (isAddRow) {\n this.grid.validation.clear(id);\n }\n else {\n this.grid.validation.update(id, rowEditArgs.oldValue);\n }\n }\n else if (this.row.getClassName() === IgxEditRow.name) {\n rowEditArgs = this.grid.gridAPI.update_row(this.row, this.row.newData, event);\n nonCancelableArgs = this.rowEditDone(rowEditArgs.oldValue, event);\n }\n else {\n const rowAddArgs = this.row.createEditEventArgs(true, event);\n this.grid.rowAdd.emit(rowAddArgs);\n if (rowAddArgs.cancel) {\n return rowAddArgs;\n }\n this.grid.transactions.endPending(false);\n const parentId = this.getParentRowId();\n this.grid.gridAPI.addRowToData((_a = this.row.newData) !== null && _a !== void 0 ? _a : this.row.data, parentId);\n this.grid.triggerPipes();\n nonCancelableArgs = this.rowEditDone(null, event);\n }\n nonCancelableArgs = this.exitRowEdit(rowEditArgs.oldValue, event);\n return Object.assign(Object.assign({}, nonCancelableArgs), rowEditArgs);\n }\n rowEditDone(cachedRowData, event) {\n const doneArgs = this.row.createDoneEditEventArgs(cachedRowData, event);\n this.grid.rowEditDone.emit(doneArgs);\n return doneArgs;\n }\n /** Exit row edit mode */\n exitRowEdit(cachedRowData, event) {\n const nonCancelableArgs = this.row.createDoneEditEventArgs(cachedRowData, event);\n this.grid.rowEditExit.emit(nonCancelableArgs);\n this.grid.closeRowEditingOverlay();\n this.endRowEdit();\n return nonCancelableArgs;\n }\n /** Clears row editing state */\n endRowEdit() {\n this.row = null;\n this.rowEditingBlocked = false;\n this._rowEditingStarted = false;\n }\n /** Clears cell and row editing state and closes row editing template if it is open */\n endEditMode() {\n this.endCellEdit();\n if (this.grid.rowEditable) {\n this.endRowEdit();\n this.grid.closeRowEditingOverlay();\n }\n }\n updateRowEditData(row, value) {\n const grid = this.grid;\n const rowInEditMode = grid.gridAPI.crudService.row;\n row.newData = value !== null && value !== void 0 ? value : rowInEditMode.transactionState;\n if (rowInEditMode && row.id === rowInEditMode.id) {\n // do not use spread operator here as it will copy everything over an empty object with no descriptors\n row.data = Object.assign(copyDescriptors(row.data), row.data, rowInEditMode.transactionState);\n // TODO: Workaround for updating a row in edit mode through the API\n }\n else if (this.grid.transactions.enabled) {\n const state = grid.transactions.getState(row.id);\n row.data = state ? Object.assign({}, row.data, state.value) : row.data;\n }\n }\n getParentRowId() {\n return null;\n }\n}\nclass IgxRowAddCrudState extends IgxRowCrudState {\n constructor() {\n super(...arguments);\n this.addRowParent = null;\n }\n /**\n * @hidden @internal\n */\n createAddRow(parentRow, asChild) {\n this.createAddRowParent(parentRow, asChild);\n const newRec = this.grid.getEmptyRecordObjectFor(parentRow);\n const addRowIndex = this.addRowParent.index + 1;\n return this.row = new IgxAddRow(newRec.rowID, addRowIndex, newRec.data, newRec.recordRef, this.grid);\n }\n /**\n * @hidden @internal\n */\n createAddRowParent(row, newRowAsChild) {\n const rowIndex = row ? row.index : -1;\n const rowId = row ? row.key : (rowIndex >= 0 ? this.grid.rowList.last.key : null);\n const isInPinnedArea = this.grid.isRecordPinnedByViewIndex(rowIndex);\n const pinIndex = this.grid.pinnedRecords.findIndex(x => x[this.primaryKey] === rowId);\n const unpinIndex = this.grid.getUnpinnedIndexById(rowId);\n this.addRowParent = {\n rowID: rowId,\n index: isInPinnedArea ? pinIndex : unpinIndex,\n asChild: newRowAsChild,\n isPinned: isInPinnedArea\n };\n }\n /**\n * @hidden @internal\n */\n endRowTransaction(commit, event) {\n const isAddRow = this.row && this.row.getClassName() === IgxAddRow.name;\n if (isAddRow) {\n this.grid.rowAdded.pipe(first$1()).subscribe((addRowArgs) => {\n const rowData = addRowArgs.data;\n const pinnedIndex = this.grid.pinnedRecords.findIndex(x => x[this.primaryKey] === rowData[this.primaryKey]);\n // A check whether the row is in the current view\n const viewIndex = pinnedIndex !== -1 ? pinnedIndex : this._findRecordIndexInView(rowData);\n const dataIndex = this.grid.filteredSortedData.findIndex(data => data[this.primaryKey] === rowData[this.primaryKey]);\n const isInView = viewIndex !== -1 && !this.grid.navigation.shouldPerformVerticalScroll(viewIndex, 0);\n const showIndex = isInView ? -1 : dataIndex;\n this.grid.showSnackbarFor(showIndex);\n });\n }\n const args = super.endRowTransaction(commit, event);\n if (args.cancel) {\n return args;\n }\n if (isAddRow) {\n this.endAddRow();\n if (commit) {\n // this.grid.rowAddedNotifier.next({ data: args.newValue, owner: this.grid });\n // this.grid.rowAdded.emit({ data: args.newValue, owner: this.grid });\n const rowAddedEventArgs = { data: args.newValue, owner: this.grid, primaryKey: args.newValue[this.grid.primaryKey] };\n this.grid.rowAddedNotifier.next(rowAddedEventArgs);\n this.grid.rowAdded.emit(rowAddedEventArgs);\n }\n }\n return args;\n }\n /**\n * @hidden @internal\n */\n endAddRow() {\n this.addRowParent = null;\n this.grid.triggerPipes();\n }\n /**\n * @hidden\n * @internal\n * TODO: consider changing modifier\n */\n _findRecordIndexInView(rec) {\n return this.grid.dataView.findIndex(data => data[this.primaryKey] === rec[this.primaryKey]);\n }\n getParentRowId() {\n var _a;\n if (this.addRowParent.asChild) {\n return this.addRowParent.asChild ? this.addRowParent.rowID : undefined;\n }\n else if (this.addRowParent.rowID !== null && this.addRowParent.rowID !== undefined) {\n const spawnedForRecord = this.grid.gridAPI.get_rec_by_id(this.addRowParent.rowID);\n return (_a = spawnedForRecord === null || spawnedForRecord === void 0 ? void 0 : spawnedForRecord.parent) === null || _a === void 0 ? void 0 : _a.rowID;\n }\n }\n}\nclass IgxGridCRUDService extends IgxRowAddCrudState {\n enterEditMode(cell, event) {\n var _a;\n if (this.isInCompositionMode) {\n return;\n }\n if (this.nonEditable) {\n console.warn('The grid must have a `primaryKey` specified when using `rowEditable`!');\n return;\n }\n if (this.cellInEditMode) {\n // TODO: case solely for f2/enter nav that uses enterEditMode as toggle. Refactor.\n const canceled = this.endEdit(true, event);\n if (!canceled || !this.cell) {\n this.grid.tbody.nativeElement.focus();\n }\n }\n else {\n if (this.rowEditing) {\n // TODO rowData\n if (this.row && !this.sameRow((_a = cell === null || cell === void 0 ? void 0 : cell.cellID) === null || _a === void 0 ? void 0 : _a.rowID)) {\n this.rowEditingBlocked = this.endEdit(true, event);\n if (this.rowEditingBlocked) {\n return true;\n }\n this.rowEditingBlocked = false;\n this.endRowEdit();\n }\n this.createCell(cell);\n const canceled = this.beginRowEdit(event);\n if (!canceled) {\n this.beginCellEdit(event);\n }\n }\n else {\n this.createCell(cell);\n this.beginCellEdit(event);\n }\n }\n }\n /**\n * Enters add row mode by creating temporary dummy so the user can fill in new row cells.\n *\n * @param parentRow Parent row after which the Add Row UI will be rendered.\n * If `null` will show it at the bottom after all rows (or top if there are not rows).\n * @param asChild Specifies if the new row should be added as a child to a tree row.\n * @param event Base event that triggered the add row mode.\n */\n enterAddRowMode(parentRow, asChild, event) {\n if (!this.rowEditing && (this.grid.primaryKey === undefined || this.grid.primaryKey === null)) {\n console.warn('The grid must use row edit mode to perform row adding! Please set rowEditable to true.');\n return;\n }\n this.endEdit(true, event);\n if (parentRow != null && this.grid.expansionStates.get(parentRow.key)) {\n this.grid.collapseRow(parentRow.key);\n }\n this.createAddRow(parentRow, asChild);\n this.grid.transactions.startPending();\n if (this.addRowParent.isPinned) {\n // If parent is pinned, add the new row to pinned records\n this.grid._pinnedRecordIDs.splice(this.row.index, 0, this.row.id);\n }\n this.grid.triggerPipes();\n this.grid.notifyChanges(true);\n this.grid.navigateTo(this.row.index, -1);\n // when selecting the dummy row we need to adjust for top pinned rows\n const indexAdjust = this.grid.isRowPinningToTop ?\n (!this.addRowParent.isPinned ? this.grid.pinnedRows.length : 0) :\n (!this.addRowParent.isPinned ? 0 : this.grid.unpinnedRecords.length);\n // TODO: Type this without shoving a bunch of internal properties in the row type\n const dummyRow = this.grid.gridAPI.get_row_by_index(this.row.index + indexAdjust);\n dummyRow.triggerAddAnimation();\n dummyRow.cdr.detectChanges();\n dummyRow.addAnimationEnd.pipe(first$1()).subscribe(() => {\n const cell = dummyRow.cells.find(c => c.editable);\n if (cell) {\n this.grid.gridAPI.update_cell(this.cell);\n this.enterEditMode(cell, event);\n cell.activate();\n }\n });\n }\n /**\n * Finishes the row transactions on the current row.\n *\n * @remarks\n * If `commit === true`, passes them from the pending state to the data (or transaction service)\n * @example\n * ```html\n * \n * ```\n * @param commit\n */\n // TODO: Implement the same representation of the method without evt emission.\n endEdit(commit = true, event) {\n if (!this.row && !this.cell) {\n return;\n }\n let args;\n if (commit) {\n args = this.updateCell(true, event);\n if (args && args.cancel) {\n return args.cancel;\n }\n }\n else {\n // needede because this.cell is null after exitCellEdit\n // thus the next if is always false\n const cell = this.cell;\n this.exitCellEdit(event);\n if (!this.grid.rowEditable && cell) {\n const value = this.grid.transactions.getAggregatedValue(cell.id.rowID, true) || cell.rowData;\n this.grid.validation.update(cell.id.rowID, value);\n }\n }\n args = this.updateRow(commit, event);\n this.rowEditingBlocked = args.cancel;\n if (args.cancel) {\n return true;\n }\n const activeCell = this.grid.selectionService.activeElement;\n if (event && activeCell) {\n const rowIndex = activeCell.row;\n const visibleColIndex = activeCell.layout ? activeCell.layout.columnVisibleIndex : activeCell.column;\n this.grid.navigateTo(rowIndex, visibleColIndex);\n }\n return false;\n }\n}\nIgxGridCRUDService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCRUDService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\nIgxGridCRUDService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCRUDService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCRUDService, decorators: [{\n type: Injectable\n }] });\n\nconst IGX_GRID_BASE = new InjectionToken('IgxGridBaseToken');\nconst IGX_GRID_SERVICE_BASE = new InjectionToken('IgxGridServiceBaseToken');\n\nclass IgxGridSelectionService {\n /**\n * Returns the current selected ranges in the grid from both\n * keyboard and pointer interactions\n */\n get ranges() {\n // The last action was keyboard + shift selection -> add it\n this.addKeyboardRange();\n const ranges = Array.from(this._ranges).map(range => JSON.parse(range));\n // No ranges but we have a focused cell -> add it\n if (!ranges.length && this.activeElement && this.grid.isCellSelectable) {\n ranges.push(this.generateRange(this.activeElement));\n }\n return ranges;\n }\n get primaryButton() {\n return this.pointerState.primaryButton;\n }\n set primaryButton(value) {\n this.pointerState.primaryButton = value;\n }\n constructor(zone, platform) {\n this.zone = zone;\n this.platform = platform;\n this.dragMode = false;\n this.keyboardState = {};\n this.pointerState = {};\n this.columnsState = {};\n this.selection = new Map();\n this.temp = new Map();\n this.rowSelection = new Set();\n this.indeterminateRows = new Set();\n this.columnSelection = new Set();\n /**\n * @hidden @internal\n */\n this.selectedRowsChange = new Subject();\n /**\n * Toggled when a pointerdown event is triggered inside the grid body (cells).\n * When `false` the drag select behavior is disabled.\n */\n this.pointerEventInGridBody = false;\n this._ranges = new Set();\n this.pointerOriginHandler = (event) => {\n this.pointerEventInGridBody = false;\n document.body.removeEventListener('pointerup', this.pointerOriginHandler);\n const targetTagName = event.target.tagName.toLowerCase();\n if (targetTagName !== 'igx-grid-cell' && targetTagName !== 'igx-tree-grid-cell') {\n this.pointerUp(this._lastSelectedNode, this.grid.rangeSelected, true);\n }\n };\n this.initPointerState();\n this.initKeyboardState();\n this.initColumnsState();\n }\n /**\n * Resets the keyboard state\n */\n initKeyboardState() {\n this.keyboardState.node = null;\n this.keyboardState.shift = false;\n this.keyboardState.range = null;\n this.keyboardState.active = false;\n }\n /**\n * Resets the pointer state\n */\n initPointerState() {\n this.pointerState.node = null;\n this.pointerState.ctrl = false;\n this.pointerState.shift = false;\n this.pointerState.range = null;\n this.pointerState.primaryButton = true;\n }\n /**\n * Resets the columns state\n */\n initColumnsState() {\n this.columnsState.field = null;\n this.columnsState.range = [];\n }\n /**\n * Adds a single node.\n * Single clicks | Ctrl + single clicks on cells is the usual case.\n */\n add(node, addToRange = true) {\n if (this.selection.has(node.row)) {\n this.selection.get(node.row).add(node.column);\n }\n else {\n this.selection.set(node.row, new Set()).get(node.row).add(node.column);\n }\n if (addToRange) {\n this._ranges.add(JSON.stringify(this.generateRange(node)));\n }\n }\n /**\n * Adds the active keyboard range selection (if any) to the `ranges` meta.\n */\n addKeyboardRange() {\n if (this.keyboardState.range) {\n this._ranges.add(JSON.stringify(this.keyboardState.range));\n }\n }\n remove(node) {\n if (this.selection.has(node.row)) {\n this.selection.get(node.row).delete(node.column);\n }\n if (this.isActiveNode(node)) {\n this.activeElement = null;\n }\n this._ranges.delete(JSON.stringify(this.generateRange(node)));\n }\n isInMap(node) {\n return (this.selection.has(node.row) && this.selection.get(node.row).has(node.column)) ||\n (this.temp.has(node.row) && this.temp.get(node.row).has(node.column));\n }\n selected(node) {\n return (this.isActiveNode(node) && this.grid.isCellSelectable) || this.isInMap(node);\n }\n isActiveNode(node) {\n if (this.activeElement) {\n const isActive = this.activeElement.column === node.column && this.activeElement.row === node.row;\n if (this.grid.hasColumnLayouts) {\n const layout = this.activeElement.layout;\n return isActive && this.isActiveLayout(layout, node.layout);\n }\n return isActive;\n }\n return false;\n }\n isActiveLayout(current, target) {\n return current.columnVisibleIndex === target.columnVisibleIndex;\n }\n addRangeMeta(node, state) {\n this._ranges.add(JSON.stringify(this.generateRange(node, state)));\n }\n removeRangeMeta(node, state) {\n this._ranges.delete(JSON.stringify(this.generateRange(node, state)));\n }\n /**\n * Generates a new selection range from the given `node`.\n * If `state` is passed instead it will generate the range based on the passed `node`\n * and the start node of the `state`.\n */\n generateRange(node, state) {\n this._lastSelectedNode = node;\n if (!state) {\n return {\n rowStart: node.row,\n rowEnd: node.row,\n columnStart: node.column,\n columnEnd: node.column\n };\n }\n const { row, column } = state.node;\n const rowStart = Math.min(node.row, row);\n const rowEnd = Math.max(node.row, row);\n const columnStart = Math.min(node.column, column);\n const columnEnd = Math.max(node.column, column);\n return { rowStart, rowEnd, columnStart, columnEnd };\n }\n /**\n *\n */\n keyboardStateOnKeydown(node, shift, shiftTab) {\n this.keyboardState.active = true;\n this.initPointerState();\n this.keyboardState.shift = shift && !shiftTab;\n if (!this.grid.navigation.isDataRow(node.row)) {\n return;\n }\n // Kb navigation with shift and no previous node.\n // Clear the current selection init the start node.\n if (this.keyboardState.shift && !this.keyboardState.node) {\n this.clear();\n this.keyboardState.node = Object.assign({}, node);\n }\n }\n keyboardStateOnFocus(node, emitter, dom) {\n const kbState = this.keyboardState;\n // Focus triggered by keyboard navigation\n if (kbState.active) {\n if (this.platform.isChromium) {\n this._moveSelectionChrome(dom);\n }\n // Start generating a range if shift is hold\n if (kbState.shift) {\n this.dragSelect(node, kbState);\n kbState.range = this.generateRange(node, kbState);\n emitter.emit(this.generateRange(node, kbState));\n return;\n }\n this.initKeyboardState();\n this.clear();\n this.add(node);\n }\n }\n pointerDown(node, shift, ctrl) {\n this.addKeyboardRange();\n this.initKeyboardState();\n this.pointerState.ctrl = ctrl;\n this.pointerState.shift = shift;\n this.pointerEventInGridBody = true;\n document.body.addEventListener('pointerup', this.pointerOriginHandler);\n // No ctrl key pressed - no multiple selection\n if (!ctrl) {\n this.clear();\n }\n if (shift) {\n // No previously 'clicked' node. Use the last active node.\n if (!this.pointerState.node) {\n this.pointerState.node = this.activeElement || node;\n }\n this.pointerDownShiftKey(node);\n this.clearTextSelection();\n return;\n }\n this.removeRangeMeta(node);\n this.pointerState.node = node;\n }\n pointerDownShiftKey(node) {\n this.clear();\n this.selectRange(node, this.pointerState);\n }\n mergeMap(target, source) {\n const iterator = source.entries();\n let pair = iterator.next();\n let key;\n let value;\n while (!pair.done) {\n [key, value] = pair.value;\n if (target.has(key)) {\n const newValue = target.get(key);\n value.forEach(record => newValue.add(record));\n target.set(key, newValue);\n }\n else {\n target.set(key, value);\n }\n pair = iterator.next();\n }\n }\n pointerEnter(node, event) {\n // https://www.w3.org/TR/pointerevents/#the-button-property\n this.dragMode = (event.buttons === 1 && (event.button === -1 || event.button === 0)) && this.pointerEventInGridBody;\n if (!this.dragMode) {\n return false;\n }\n this.clearTextSelection();\n // If the users triggers a drag-like event by first clicking outside the grid cells\n // and then enters in the grid body we may not have a initial pointer starting node.\n // Assume the first pointerenter node is where we start.\n if (!this.pointerState.node) {\n this.pointerState.node = node;\n }\n if (this.pointerState.ctrl) {\n this.selectRange(node, this.pointerState, this.temp);\n }\n else {\n this.dragSelect(node, this.pointerState);\n }\n return true;\n }\n pointerUp(node, emitter, firedOutsideGrid) {\n if (this.dragMode || firedOutsideGrid) {\n this.restoreTextSelection();\n this.addRangeMeta(node, this.pointerState);\n this.mergeMap(this.selection, this.temp);\n this.zone.runTask(() => emitter.emit(this.generateRange(node, this.pointerState)));\n this.temp.clear();\n this.dragMode = false;\n return true;\n }\n if (this.pointerState.shift) {\n this.clearTextSelection();\n this.restoreTextSelection();\n this.addRangeMeta(node, this.pointerState);\n emitter.emit(this.generateRange(node, this.pointerState));\n return true;\n }\n if (this.pointerEventInGridBody && this.isActiveNode(node)) {\n this.add(node);\n }\n return false;\n }\n selectRange(node, state, collection = this.selection) {\n if (collection === this.temp) {\n collection.clear();\n }\n const { rowStart, rowEnd, columnStart, columnEnd } = this.generateRange(node, state);\n for (let i = rowStart; i <= rowEnd; i++) {\n for (let j = columnStart; j <= columnEnd; j++) {\n if (collection.has(i)) {\n collection.get(i).add(j);\n }\n else {\n collection.set(i, new Set()).get(i).add(j);\n }\n }\n }\n }\n dragSelect(node, state) {\n if (!this.pointerState.ctrl) {\n this.selection.clear();\n }\n this.selectRange(node, state);\n }\n clear(clearAcriveEl = false) {\n if (clearAcriveEl) {\n this.activeElement = null;\n }\n this.selection.clear();\n this.temp.clear();\n this._ranges.clear();\n }\n clearTextSelection() {\n const selection = window.getSelection();\n if (selection.rangeCount) {\n this._selectionRange = selection.getRangeAt(0);\n this._selectionRange.collapse(true);\n selection.removeAllRanges();\n }\n }\n restoreTextSelection() {\n const selection = window.getSelection();\n if (!selection.rangeCount) {\n selection.addRange(this._selectionRange || document.createRange());\n }\n }\n getSelectedRowsData() {\n if (this.grid.isPivot) {\n return this.grid.dataView.filter(r => {\n const keys = r.dimensions.map(d => PivotUtil.getRecordKey(r, d));\n return keys.some(k => this.isPivotRowSelected(k));\n });\n }\n if (this.rowSelection.size && this.grid.totalItemCount || this.grid.pagingMode === GridPagingMode.Remote) {\n if (!this.grid.primaryKey) {\n return Array.from(this.rowSelection);\n }\n const selection = [];\n this.rowSelection.forEach(rID => {\n const rData = this.grid.gridAPI.get_all_data(true).find(row => this.getRecordKey(row) === rID);\n const partialRowData = {};\n partialRowData[this.grid.primaryKey] = rID;\n selection.push(rData ? rData : partialRowData);\n });\n return selection;\n }\n return this.rowSelection.size ? this.grid.gridAPI.get_all_data(true).filter(row => this.rowSelection.has(this.getRecordKey(row))) : [];\n }\n /** Returns array of the selected row id's. */\n getSelectedRows() {\n return this.rowSelection.size ? Array.from(this.rowSelection.keys()) : [];\n }\n /** Returns array of the rows in indeterminate state. */\n getIndeterminateRows() {\n return this.indeterminateRows.size ? Array.from(this.indeterminateRows.keys()) : [];\n }\n /** Clears row selection, if filtering is applied clears only selected rows from filtered data. */\n clearRowSelection(event) {\n const selectedRows = this.getSelectedRowsData();\n const removedRec = this.isFilteringApplied() ?\n this.allData.filter(row => this.isRowSelected(this.getRecordKey(row))) : selectedRows;\n const newSelection = this.isFilteringApplied() ? selectedRows.filter(x => !removedRec.includes(x)) : [];\n this.emitRowSelectionEvent(newSelection, [], removedRec, event, selectedRows);\n }\n /** Select all rows, if filtering is applied select only from filtered data. */\n selectAllRows(event) {\n const addedRows = this.allData.filter((row) => !this.isRowSelected(this.getRecordKey(row)));\n const selectedRows = this.getSelectedRowsData();\n const newSelection = this.rowSelection.size ? selectedRows.concat(addedRows) : addedRows;\n this.indeterminateRows.clear();\n this.emitRowSelectionEvent(newSelection, addedRows, [], event, selectedRows);\n }\n /** Select the specified row and emit event. */\n selectRowById(rowID, clearPrevSelection, event) {\n if (!(this.grid.isRowSelectable || this.grid.isPivot) || this.isRowDeleted(rowID)) {\n return;\n }\n clearPrevSelection = !this.grid.isMultiRowSelectionEnabled || clearPrevSelection;\n if (this.grid.isPivot) {\n this.selectPivotRowById(rowID, clearPrevSelection, event);\n return;\n }\n const selectedRows = this.getSelectedRowsData();\n const newSelection = clearPrevSelection ? [this.getRowDataById(rowID)] : this.rowSelection.has(rowID) ?\n selectedRows : [...selectedRows, this.getRowDataById(rowID)];\n const removed = clearPrevSelection ? selectedRows : [];\n this.emitRowSelectionEvent(newSelection, [this.getRowDataById(rowID)], removed, event, selectedRows);\n }\n selectPivotRowById(rowID, clearPrevSelection, event) {\n const selectedRows = this.getSelectedRows();\n const newSelection = clearPrevSelection ? [rowID] : this.rowSelection.has(rowID) ? selectedRows : [...selectedRows, rowID];\n const added = this.getPivotRowsByIds([rowID]);\n const removed = this.getPivotRowsByIds(clearPrevSelection ? selectedRows : []);\n this.emitRowSelectionEventPivotGrid(selectedRows, newSelection, added, removed, event);\n }\n /** Deselect the specified row and emit event. */\n deselectRow(rowID, event) {\n if (!this.isRowSelected(rowID)) {\n return;\n }\n if (this.grid.isPivot) {\n this.deselectPivotRowByID(rowID, event);\n return;\n }\n const selectedRows = this.getSelectedRowsData();\n const newSelection = selectedRows.filter(r => this.getRecordKey(r) !== rowID);\n if (this.rowSelection.size && this.rowSelection.has(rowID)) {\n this.emitRowSelectionEvent(newSelection, [], [this.getRowDataById(rowID)], event, selectedRows);\n }\n }\n deselectPivotRowByID(rowID, event) {\n if (this.rowSelection.size && this.rowSelection.has(rowID)) {\n const currSelection = this.getSelectedRows();\n const newSelection = currSelection.filter(r => r !== rowID);\n const removed = this.getPivotRowsByIds([rowID]);\n this.emitRowSelectionEventPivotGrid(currSelection, newSelection, [], removed, event);\n }\n }\n emitRowSelectionEventPivotGrid(currSelection, newSelection, added, removed, event) {\n if (this.areEqualCollections(currSelection, newSelection)) {\n return;\n }\n const currSelectedRows = this.getSelectedRowsData();\n const args = {\n owner: this.grid,\n oldSelection: currSelectedRows,\n newSelection: this.getPivotRowsByIds(newSelection),\n added,\n removed,\n event,\n cancel: false,\n allRowsSelected: this.areAllRowSelected(newSelection)\n };\n this.grid.rowSelectionChanging.emit(args);\n if (args.cancel) {\n this.clearHeaderCBState();\n return;\n }\n this.selectRowsWithNoEvent(newSelection, true);\n }\n /** Select the specified rows and emit event. */\n selectRows(keys, clearPrevSelection, event) {\n if (!this.grid.isMultiRowSelectionEnabled) {\n return;\n }\n let rowsToSelect = keys.filter(x => !this.isRowDeleted(x) && !this.rowSelection.has(x));\n if (!rowsToSelect.length && !clearPrevSelection) {\n // no valid/additional rows to select and no clear\n return;\n }\n const selectedRows = this.getSelectedRowsData();\n rowsToSelect = this.grid.primaryKey ? rowsToSelect.map(r => this.getRowDataById(r)) : rowsToSelect;\n const newSelection = clearPrevSelection ? rowsToSelect : [...selectedRows, ...rowsToSelect];\n const keysAsSet = new Set(rowsToSelect);\n const removed = clearPrevSelection ? selectedRows.filter(x => !keysAsSet.has(x)) : [];\n this.emitRowSelectionEvent(newSelection, rowsToSelect, removed, event, selectedRows);\n }\n deselectRows(keys, event) {\n if (!this.rowSelection.size) {\n return;\n }\n let rowsToDeselect = keys.filter(x => this.rowSelection.has(x));\n if (!rowsToDeselect.length) {\n return;\n }\n const selectedRows = this.getSelectedRowsData();\n rowsToDeselect = this.grid.primaryKey ? rowsToDeselect.map(r => this.getRowDataById(r)) : rowsToDeselect;\n const keysAsSet = new Set(rowsToDeselect);\n const newSelection = selectedRows.filter(r => !keysAsSet.has(r));\n this.emitRowSelectionEvent(newSelection, [], rowsToDeselect, event, selectedRows);\n }\n /** Select specified rows. No event is emitted. */\n selectRowsWithNoEvent(rowIDs, clearPrevSelection) {\n if (clearPrevSelection) {\n this.rowSelection.clear();\n }\n rowIDs.forEach(rowID => this.rowSelection.add(rowID));\n this.clearHeaderCBState();\n this.selectedRowsChange.next();\n }\n /** Deselect specified rows. No event is emitted. */\n deselectRowsWithNoEvent(rowIDs) {\n this.clearHeaderCBState();\n rowIDs.forEach(rowID => this.rowSelection.delete(rowID));\n this.selectedRowsChange.next();\n }\n isRowSelected(rowID) {\n return this.rowSelection.size > 0 && this.rowSelection.has(rowID);\n }\n isPivotRowSelected(rowID) {\n let contains = false;\n this.rowSelection.forEach(x => {\n const correctRowId = rowID.replace(x, '');\n if (rowID.includes(x) && (correctRowId === '' || correctRowId.startsWith('_'))) {\n contains = true;\n return;\n }\n });\n return this.rowSelection.size > 0 && contains;\n }\n isRowInIndeterminateState(rowID) {\n return this.indeterminateRows.size > 0 && this.indeterminateRows.has(rowID);\n }\n /** Select range from last selected row to the current specified row. */\n selectMultipleRows(rowID, rowData, event) {\n this.clearHeaderCBState();\n if (!this.rowSelection.size || this.isRowDeleted(rowID)) {\n this.selectRowById(rowID);\n return;\n }\n const gridData = this.allData;\n const lastRowID = this.getSelectedRows()[this.rowSelection.size - 1];\n const currIndex = gridData.indexOf(this.getRowDataById(lastRowID));\n const newIndex = gridData.indexOf(rowData);\n const rows = gridData.slice(Math.min(currIndex, newIndex), Math.max(currIndex, newIndex) + 1);\n const currSelection = this.getSelectedRowsData();\n const added = rows.filter(r => !this.isRowSelected(this.getRecordKey(r)));\n const newSelection = currSelection.concat(added);\n this.emitRowSelectionEvent(newSelection, added, [], event, currSelection);\n }\n areAllRowSelected(newSelection) {\n if (!this.grid.data && !newSelection) {\n return false;\n }\n if (this.allRowsSelected !== undefined && !newSelection) {\n return this.allRowsSelected;\n }\n const selectedData = newSelection ? newSelection : [...this.rowSelection];\n const allData = this.getRowIDs(this.allData);\n const unSelectedRows = allData.filter(row => !selectedData.includes(row));\n return this.allRowsSelected = this.allData.length > 0 && unSelectedRows.length === 0;\n }\n hasSomeRowSelected() {\n const filteredData = this.isFilteringApplied() ?\n this.getRowIDs(this.grid.filteredData).some(rID => this.isRowSelected(rID)) : true;\n return this.rowSelection.size > 0 && filteredData && !this.areAllRowSelected();\n }\n get filteredSelectedRowIds() {\n return this.isFilteringApplied() ?\n this.getRowIDs(this.allData).filter(rowID => this.isRowSelected(rowID)) :\n this.getSelectedRows().filter(rowID => !this.isRowDeleted(rowID));\n }\n emitRowSelectionEvent(newSelection, added, removed, event, currSelection) {\n currSelection = currSelection !== null && currSelection !== void 0 ? currSelection : this.getSelectedRowsData();\n if (this.areEqualCollections(currSelection, newSelection)) {\n return;\n }\n const args = {\n owner: this.grid,\n oldSelection: currSelection,\n newSelection,\n added, removed,\n event, cancel: false,\n allRowsSelected: this.areAllRowSelected(newSelection.map(r => this.getRecordKey(r)))\n };\n this.grid.rowSelectionChanging.emit(args);\n if (args.cancel) {\n this.clearHeaderCBState();\n return;\n }\n this.selectRowsWithNoEvent(args.newSelection.map(r => this.getRecordKey(r)), true);\n }\n getPivotRowsByIds(ids) {\n return this.grid.dataView.filter(r => {\n const keys = r.dimensions.map(d => PivotUtil.getRecordKey(r, d));\n return new Set(ids.concat(keys)).size < ids.length + keys.length;\n });\n }\n getRowDataById(rowID) {\n if (!this.grid.primaryKey) {\n return rowID;\n }\n const rowIndex = this.getRowIDs(this.grid.gridAPI.get_all_data(true)).indexOf(rowID);\n return rowIndex < 0 ? rowID : this.grid.gridAPI.get_all_data(true)[rowIndex];\n }\n clearHeaderCBState() {\n this.allRowsSelected = undefined;\n }\n getRowIDs(data) {\n return this.grid.primaryKey && data.length ? data.map(rec => rec[this.grid.primaryKey]) : data;\n }\n getRecordKey(record) {\n return this.grid.primaryKey ? record[this.grid.primaryKey] : record;\n }\n /** Clear rowSelection and update checkbox state */\n clearAllSelectedRows() {\n this.rowSelection.clear();\n this.indeterminateRows.clear();\n this.clearHeaderCBState();\n this.selectedRowsChange.next();\n }\n /** Returns all data in the grid, with applied filtering and sorting and without deleted rows. */\n get allData() {\n let allData;\n if (this.isFilteringApplied() || this.grid.sortingExpressions.length) {\n allData = this.grid.pinnedRecordsCount ? this.grid._filteredSortedUnpinnedData : this.grid.filteredSortedData;\n }\n else {\n allData = this.grid.gridAPI.get_all_data(true);\n }\n return allData.filter(rData => !this.isRowDeleted(this.grid.gridAPI.get_row_id(rData)));\n }\n /** Returns array of the selected columns fields. */\n getSelectedColumns() {\n return this.columnSelection.size ? Array.from(this.columnSelection.keys()) : [];\n }\n isColumnSelected(field) {\n return this.columnSelection.size > 0 && this.columnSelection.has(field);\n }\n /** Select the specified column and emit event. */\n selectColumn(field, clearPrevSelection, selectColumnsRange, event) {\n const stateColumn = this.columnsState.field ? this.grid.getColumnByName(this.columnsState.field) : null;\n if (!event || !stateColumn || stateColumn.visibleIndex < 0 || !selectColumnsRange) {\n this.columnsState.field = field;\n this.columnsState.range = [];\n const newSelection = clearPrevSelection ? [field] : this.getSelectedColumns().indexOf(field) !== -1 ?\n this.getSelectedColumns() : [...this.getSelectedColumns(), field];\n const removed = clearPrevSelection ? this.getSelectedColumns().filter(colField => colField !== field) : [];\n const added = this.isColumnSelected(field) ? [] : [field];\n this.emitColumnSelectionEvent(newSelection, added, removed, event);\n }\n else if (selectColumnsRange) {\n this.selectColumnsRange(field, event);\n }\n }\n /** Select specified columns. And emit event. */\n selectColumns(fields, clearPrevSelection, selectColumnsRange, event) {\n const columns = fields.map(f => this.grid.getColumnByName(f)).sort((a, b) => a.visibleIndex - b.visibleIndex);\n const stateColumn = this.columnsState.field ? this.grid.getColumnByName(this.columnsState.field) : null;\n if (!stateColumn || stateColumn.visibleIndex < 0 || !selectColumnsRange) {\n this.columnsState.field = columns[0] ? columns[0].field : null;\n this.columnsState.range = [];\n const added = fields.filter(colField => !this.isColumnSelected(colField));\n const removed = clearPrevSelection ? this.getSelectedColumns().filter(colField => fields.indexOf(colField) === -1) : [];\n const newSelection = clearPrevSelection ? fields : this.getSelectedColumns().concat(added);\n this.emitColumnSelectionEvent(newSelection, added, removed, event);\n }\n else {\n const filedStart = stateColumn.visibleIndex >\n columns[columns.length - 1].visibleIndex ? columns[0].field : columns[columns.length - 1].field;\n this.selectColumnsRange(filedStart, event);\n }\n }\n /** Select range from last clicked column to the current specified column. */\n selectColumnsRange(field, event) {\n const currIndex = this.grid.getColumnByName(this.columnsState.field).visibleIndex;\n const newIndex = this.grid.columnToVisibleIndex(field);\n const columnsFields = this.grid.visibleColumns\n .filter(c => !c.columnGroup)\n .sort((a, b) => a.visibleIndex - b.visibleIndex)\n .slice(Math.min(currIndex, newIndex), Math.max(currIndex, newIndex) + 1)\n .filter(col => col.selectable).map(col => col.field);\n const removed = [];\n const oldAdded = [];\n const added = columnsFields.filter(colField => !this.isColumnSelected(colField));\n this.columnsState.range.forEach(f => {\n if (columnsFields.indexOf(f) === -1) {\n removed.push(f);\n }\n else {\n oldAdded.push(f);\n }\n });\n this.columnsState.range = columnsFields.filter(colField => !this.isColumnSelected(colField) || oldAdded.indexOf(colField) > -1);\n const newSelection = this.getSelectedColumns().concat(added).filter(c => removed.indexOf(c) === -1);\n this.emitColumnSelectionEvent(newSelection, added, removed, event);\n }\n /** Select specified columns. No event is emitted. */\n selectColumnsWithNoEvent(fields, clearPrevSelection) {\n if (clearPrevSelection) {\n this.columnSelection.clear();\n }\n fields.forEach(field => {\n this.columnSelection.add(field);\n });\n }\n /** Deselect the specified column and emit event. */\n deselectColumn(field, event) {\n this.initColumnsState();\n const newSelection = this.getSelectedColumns().filter(c => c !== field);\n this.emitColumnSelectionEvent(newSelection, [], [field], event);\n }\n /** Deselect specified columns. No event is emitted. */\n deselectColumnsWithNoEvent(fields) {\n fields.forEach(field => this.columnSelection.delete(field));\n }\n /** Deselect specified columns. And emit event. */\n deselectColumns(fields, event) {\n const removed = this.getSelectedColumns().filter(colField => fields.indexOf(colField) > -1);\n const newSelection = this.getSelectedColumns().filter(colField => fields.indexOf(colField) === -1);\n this.emitColumnSelectionEvent(newSelection, [], removed, event);\n }\n emitColumnSelectionEvent(newSelection, added, removed, event) {\n const currSelection = this.getSelectedColumns();\n if (this.areEqualCollections(currSelection, newSelection)) {\n return;\n }\n const args = {\n oldSelection: currSelection, newSelection,\n added, removed, event, cancel: false\n };\n this.grid.columnSelectionChanging.emit(args);\n if (args.cancel) {\n return;\n }\n this.selectColumnsWithNoEvent(args.newSelection, true);\n }\n /** Clear columnSelection */\n clearAllSelectedColumns() {\n this.columnSelection.clear();\n }\n areEqualCollections(first, second) {\n return first.length === second.length && new Set(first.concat(second)).size === first.length;\n }\n /**\n * (╯°□°)╯︵ ┻━┻\n * Chrome and Chromium don't care about the active\n * range after keyboard navigation, thus this.\n */\n _moveSelectionChrome(node) {\n const selection = window.getSelection();\n selection.removeAllRanges();\n const range = new Range();\n range.selectNode(node);\n range.collapse(true);\n selection.addRange(range);\n }\n isFilteringApplied() {\n return !FilteringExpressionsTree.empty(this.grid.filteringExpressionsTree) ||\n !FilteringExpressionsTree.empty(this.grid.advancedFilteringExpressionsTree);\n }\n isRowDeleted(rowID) {\n return this.grid.gridAPI.row_deleted_transaction(rowID);\n }\n}\nIgxGridSelectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridSelectionService, deps: [{ token: i0.NgZone }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Injectable });\nIgxGridSelectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridSelectionService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridSelectionService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: PlatformUtil }]; } });\n\nclass IgxRowDirective {\n /**\n * The data passed to the row component.\n *\n * ```typescript\n * // get the row data for the first selected row\n * let selectedRowData = this.grid.selectedRows[0].data;\n * ```\n */\n get data() {\n if (this.inEditMode) {\n return mergeWith(this.grid.dataCloneStrategy.clone(this._data), this.grid.transactions.getAggregatedValue(this.key, false), (objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return objValue = srcValue;\n }\n });\n }\n return this._data;\n }\n set data(v) {\n this._data = v;\n }\n /**\n * Sets whether the row is pinned.\n * Default value is `false`.\n * ```typescript\n * this.grid.selectedRows[0].pinned = true;\n * ```\n */\n set pinned(value) {\n if (value) {\n this.grid.pinRow(this.key);\n }\n else {\n this.grid.unpinRow(this.key);\n }\n }\n /**\n * Gets whether the row is pinned.\n * ```typescript\n * let isPinned = row.pinned;\n * ```\n */\n get pinned() {\n return this.grid.isRecordPinned(this.data);\n }\n /**\n * Gets the expanded state of the row.\n * ```typescript\n * let isExpanded = row.expanded;\n * ```\n */\n get expanded() {\n return this.grid.gridAPI.get_row_expansion_state(this.data);\n }\n /**\n * Expands/collapses the current row.\n *\n * ```typescript\n * this.grid.selectedRows[2].expanded = true;\n * ```\n */\n set expanded(val) {\n this.grid.gridAPI.set_row_expansion_state(this.key, val);\n }\n get addRowUI() {\n return !!this.grid.crudService.row &&\n this.grid.crudService.row.getClassName() === IgxAddRow.name &&\n this.grid.crudService.row.id === this.key;\n }\n get rowHeight() {\n let height = this.grid.rowHeight || 32;\n if (this.grid.hasColumnLayouts) {\n const maxRowSpan = this.grid.multiRowLayoutRowSize;\n height = height * maxRowSpan;\n }\n return this.addRowUI ? height : null;\n }\n get cellHeight() {\n return this.addRowUI && !this.inEditMode ? null : this.grid.rowHeight || 32;\n }\n get virtDirRow() {\n return this._virtDirRow ? this._virtDirRow.first : null;\n }\n /**\n * Gets the rendered cells in the row component.\n *\n * ```typescript\n * // get the cells of the third selected row\n * let selectedRowCells = this.grid.selectedRows[2].cells;\n * ```\n */\n get cells() {\n const res = new QueryList();\n if (!this._cells) {\n return res;\n }\n const cList = this._cells.filter((item) => item.nativeElement.parentElement !== null)\n .sort((item1, item2) => item1.column.visibleIndex - item2.column.visibleIndex);\n res.reset(cList);\n return res;\n }\n get dataRowIndex() {\n return this.index;\n }\n /**\n * @hidden\n */\n get selected() {\n return this.selectionService.isRowSelected(this.key);\n }\n set selected(value) {\n if (value) {\n this.selectionService.selectRowsWithNoEvent([this.key]);\n }\n else {\n this.selectionService.deselectRowsWithNoEvent([this.key]);\n }\n this.grid.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n get columns() {\n return this.grid.visibleColumns;\n }\n /**\n * @hidden\n * @internal\n */\n get viewIndex() {\n if (this.grid.groupingExpressions.length) {\n return this.grid.filteredSortedData.indexOf(this.data);\n }\n return this.index + this.grid.page * this.grid.perPage;\n }\n /**\n * @hidden\n */\n get pinnedColumns() {\n return this.grid.pinnedColumns;\n }\n /**\n * @hidden\n */\n get isRoot() {\n return true;\n }\n /**\n * @hidden\n */\n get hasChildren() {\n return false;\n }\n /**\n * @hidden\n */\n get unpinnedColumns() {\n return this.grid.unpinnedColumns;\n }\n /**\n * @hidden\n */\n get showRowSelectors() {\n return this.grid.showRowSelectors;\n }\n /** @hidden */\n get dirty() {\n const row = this.grid.transactions.getState(this.key);\n if (row) {\n return row.type === TransactionType.ADD || row.type === TransactionType.UPDATE;\n }\n return false;\n }\n /**\n * @hidden\n */\n get rowDraggable() {\n return this.grid.rowDraggable;\n }\n /** @hidden */\n get added() {\n const row = this.grid.transactions.getState(this.key);\n if (row) {\n return row.type === TransactionType.ADD;\n }\n return false;\n }\n /** @hidden */\n get deleted() {\n return this.grid.gridAPI.row_deleted_transaction(this.key);\n }\n /**\n * @hidden\n */\n get dragging() {\n return this.grid.dragRowID === this.key;\n }\n // TODO: Refactor\n get inEditMode() {\n if (this.grid.rowEditable) {\n const editRowState = this.grid.crudService.row;\n return (editRowState && editRowState.id === this.key) || false;\n }\n else {\n return false;\n }\n }\n /**\n * Gets the ID of the row.\n * A row in the grid is identified either by:\n * - primaryKey data value,\n * - the whole data, if the primaryKey is omitted.\n *\n * ```typescript\n * let rowID = this.grid.selectedRows[2].key;\n * ```\n */\n get key() {\n const primaryKey = this.grid.primaryKey;\n if (this._data) {\n return primaryKey ? this._data[primaryKey] : this._data;\n }\n else {\n return undefined;\n }\n }\n /**\n * The native DOM element representing the row. Could be null in certain environments.\n *\n * ```typescript\n * // get the nativeElement of the second selected row\n * let selectedRowNativeElement = this.grid.selectedRows[1].nativeElement;\n * ```\n */\n get nativeElement() {\n return this.element.nativeElement;\n }\n constructor(grid, selectionService, element, cdr) {\n this.grid = grid;\n this.selectionService = selectionService;\n this.element = element;\n this.cdr = cdr;\n /**\n * @hidden\n */\n this.addAnimationEnd = new EventEmitter();\n /**\n * @hidden\n */\n this.role = 'row';\n /**\n * Sets whether this specific row has disabled functionality for editing and row selection.\n * Default value is `false`.\n * ```typescript\n * this.grid.selectedRows[0].pinned = true;\n * ```\n */\n this.disabled = false;\n /**\n * @hidden\n */\n this.focused = false;\n /**\n * @hidden\n * @internal\n */\n this.defaultCssClass = 'igx-grid__tr';\n /**\n * @hidden\n */\n this.triggerAddAnimationClass = false;\n this.destroy$ = new Subject();\n }\n /**\n * @hidden\n * @internal\n */\n onClick(event) {\n if (this.grid.rowSelection === 'none' || this.deleted || !this.grid.selectRowOnClick) {\n return;\n }\n if (event.shiftKey && this.grid.isMultiRowSelectionEnabled) {\n this.selectionService.selectMultipleRows(this.key, this.data, event);\n return;\n }\n // eslint-disable-next-line no-bitwise\n const clearSelection = !(+event.ctrlKey ^ +event.metaKey);\n if (this.selected && !clearSelection) {\n this.selectionService.deselectRow(this.key, event);\n }\n else {\n this.selectionService.selectRowById(this.key, clearSelection, event);\n }\n }\n /**\n * @hidden\n * @internal\n */\n showActionStrip() {\n if (this.grid.actionStrip) {\n this.grid.actionStrip.show(this);\n }\n }\n /**\n * @hidden\n * @internal\n */\n hideActionStrip() {\n if (this.grid.actionStrip && this.grid.actionStrip.hideOnRowLeave) {\n this.grid.actionStrip.hide();\n }\n }\n /**\n * @hidden\n * @internal\n */\n ngAfterViewInit() {\n // If the template of the row changes, the forOf in it is recreated and is not detected by the grid and rows can't be scrolled.\n this._virtDirRow.changes.pipe(takeUntil(this.destroy$)).subscribe(() => this.grid.resetHorizontalVirtualization());\n }\n /**\n * @hidden\n * @internal\n */\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n /**\n * @hidden\n */\n onRowSelectorClick(event) {\n event.stopPropagation();\n if (event.shiftKey && this.grid.isMultiRowSelectionEnabled) {\n this.selectionService.selectMultipleRows(this.key, this.data, event);\n return;\n }\n if (this.selected) {\n this.selectionService.deselectRow(this.key, event);\n }\n else {\n this.selectionService.selectRowById(this.key, false, event);\n }\n }\n /**\n * Updates the specified row object and the data source record with the passed value.\n *\n * ```typescript\n * // update the second selected row's value\n * let newValue = \"Apple\";\n * this.grid.selectedRows[1].update(newValue);\n * ```\n */\n update(value) {\n const crudService = this.grid.crudService;\n if (crudService.cellInEditMode && crudService.cell.id.key === this.key) {\n this.grid.transactions.endPending(false);\n }\n const row = new IgxEditRow(this.key, this.index, this.data, this.grid);\n this.grid.gridAPI.update_row(row, value);\n this.cdr.markForCheck();\n }\n /**\n * Removes the specified row from the grid's data source.\n * This method emits `rowDeleted` event.\n *\n * ```typescript\n * // delete the third selected row from the grid\n * this.grid.selectedRows[2].delete();\n * ```\n */\n delete() {\n this.grid.deleteRowById(this.key);\n }\n isCellActive(visibleColumnIndex) {\n const node = this.grid.navigation.activeNode;\n return node ? node.row === this.index && node.column === visibleColumnIndex : false;\n }\n /**\n * Pins the specified row.\n * This method emits `rowPinning`\\`rowPinned` event.\n *\n * ```typescript\n * // pin the selected row from the grid\n * this.grid.selectedRows[0].pin();\n * ```\n */\n pin() {\n return this.grid.pinRow(this.key);\n }\n /**\n * Unpins the specified row.\n * This method emits `rowPinning`\\`rowPinned` event.\n *\n * ```typescript\n * // unpin the selected row from the grid\n * this.grid.selectedRows[0].unpin();\n * ```\n */\n unpin() {\n return this.grid.unpinRow(this.key);\n }\n /**\n * @hidden\n */\n get rowCheckboxAriaLabel() {\n return this.grid.primaryKey ?\n this.selected ? 'Deselect row with key ' + this.key : 'Select row with key ' + this.key :\n this.selected ? 'Deselect row' : 'Select row';\n }\n /**\n * @hidden\n */\n ngDoCheck() {\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n shouldDisplayPinnedChip(visibleColumnIndex) {\n return this.pinned && this.disabled && visibleColumnIndex === 0;\n }\n /**\n * Spawns the add row UI for the specific row.\n *\n * @example\n * ```typescript\n * const row = this.grid1.getRowByIndex(1);\n * row.beginAddRow();\n * ```\n */\n beginAddRow() {\n this.grid.crudService.enterAddRowMode(this);\n }\n /**\n * @hidden\n */\n triggerAddAnimation() {\n this.triggerAddAnimationClass = true;\n }\n /**\n * @hidden\n */\n animationEndHandler() {\n this.triggerAddAnimationClass = false;\n this.addAnimationEnd.emit(this);\n }\n /**\n * @hidden\n */\n get resolveDragIndicatorClasses() {\n const defaultDragIndicatorCssClass = 'igx-grid__drag-indicator';\n const dragIndicatorOff = this.grid.rowDragging && !this.dragging ? 'igx-grid__drag-indicator--off' : '';\n return `${defaultDragIndicatorCssClass} ${dragIndicatorOff}`;\n }\n}\nIgxRowDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowDirective, deps: [{ token: IGX_GRID_BASE }, { token: IgxGridSelectionService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxRowDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowDirective, selector: \"[igxRowBaseComponent]\", inputs: { data: \"data\", index: \"index\", disabled: \"disabled\", gridID: \"gridID\", selected: \"selected\" }, outputs: { addAnimationEnd: \"addAnimationEnd\" }, host: { listeners: { \"click\": \"onClick($event)\", \"mouseenter\": \"showActionStrip()\", \"mouseleave\": \"hideActionStrip()\" }, properties: { \"attr.role\": \"this.role\", \"attr.aria-disabled\": \"this.disabled\", \"class.igx-grid__tr--disabled\": \"this.disabled\", \"style.min-height.px\": \"this.rowHeight\", \"attr.data-rowIndex\": \"this.dataRowIndex\", \"attr.aria-selected\": \"this.selected\" } }, viewQueries: [{ propertyName: \"checkboxElement\", first: true, predicate: i0.forwardRef(function () { return IgxCheckboxComponent; }), descendants: true, read: IgxCheckboxComponent }, { propertyName: \"_virtDirRow\", predicate: [\"igxDirRef\"], descendants: true, read: IgxGridForOfDirective }, { propertyName: \"_cells\", predicate: [\"cell\"], descendants: true }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxRowBaseComponent]' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }, { type: IgxGridSelectionService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }];\n }, propDecorators: { addAnimationEnd: [{\n type: Output\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], data: [{\n type: Input\n }], index: [{\n type: Input\n }], disabled: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.igx-grid__tr--disabled']\n }], rowHeight: [{\n type: HostBinding,\n args: ['style.min-height.px']\n }], gridID: [{\n type: Input\n }], _virtDirRow: [{\n type: ViewChildren,\n args: ['igxDirRef', { read: IgxGridForOfDirective }]\n }], checkboxElement: [{\n type: ViewChild,\n args: [forwardRef(() => IgxCheckboxComponent), { read: IgxCheckboxComponent }]\n }], _cells: [{\n type: ViewChildren,\n args: ['cell']\n }], dataRowIndex: [{\n type: HostBinding,\n args: ['attr.data-rowIndex']\n }], selected: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.aria-selected']\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], showActionStrip: [{\n type: HostListener,\n args: ['mouseenter']\n }], hideActionStrip: [{\n type: HostListener,\n args: ['mouseleave']\n }] } });\n\nclass IgxGridActionsBaseDirective {\n /**\n * @hidden\n * @internal\n */\n get grid() {\n return this.strip.context.grid;\n }\n /**\n * Getter to be used in template\n *\n * @hidden\n * @internal\n */\n get isRowContext() {\n return this.isRow(this.strip.context) && !this.strip.context.inEditMode;\n }\n constructor(iconService, differs) {\n this.iconService = iconService;\n this.differs = differs;\n /**\n * Gets/Sets if the action buttons will be rendered as menu items. When in menu, items will be rendered with text label.\n *\n * @example\n * ```html\n * \n * \n * ```\n */\n this.asMenuItems = false;\n }\n /**\n * @hidden\n * @internal\n */\n ngAfterViewInit() {\n if (this.asMenuItems) {\n this.buttons.changes.subscribe(() => {\n this.strip.cdr.detectChanges();\n });\n }\n }\n /**\n * Check if the param is a row from a grid\n *\n * @hidden\n * @internal\n * @param context\n */\n isRow(context) {\n return context && context instanceof IgxRowDirective;\n }\n}\nIgxGridActionsBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridActionsBaseDirective, deps: [{ token: IgxIconService }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Directive });\nIgxGridActionsBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridActionsBaseDirective, selector: \"[igxGridActionsBase]\", inputs: { asMenuItems: \"asMenuItems\" }, viewQueries: [{ propertyName: \"buttons\", predicate: IgxGridActionButtonComponent, descendants: true }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridActionsBaseDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxGridActionsBase]'\n }]\n }], ctorParameters: function () { return [{ type: IgxIconService }, { type: i0.IterableDiffers }]; }, propDecorators: { buttons: [{\n type: ViewChildren,\n args: [IgxGridActionButtonComponent]\n }], asMenuItems: [{\n type: Input\n }] } });\n\nclass IgxGridEditingActionsComponent extends IgxGridActionsBaseDirective {\n constructor() {\n super(...arguments);\n /**\n * Host `class.igx-action-strip` binding.\n *\n * @hidden\n * @internal\n */\n this.cssClass = 'igx-action-strip__editing-actions';\n /**\n * An input to enable/disable action strip row editing button\n */\n this.editRow = true;\n /**\n * An input to enable/disable action strip row deleting button\n */\n this.deleteRow = true;\n /**\n * An input to enable/disable action strip child row adding button\n */\n this.addChild = false;\n this.isMessageShown = false;\n this._addRow = false;\n this.iconsRendered = false;\n }\n /**\n * An input to enable/disable action strip row adding button\n */\n set addRow(value) {\n this._addRow = value;\n }\n get addRow() {\n if (!this.iconsRendered) {\n this.registerIcons();\n this.iconsRendered = true;\n }\n return this._addRow;\n }\n /**\n * Getter if the row is disabled\n *\n * @hidden\n * @internal\n */\n get disabled() {\n if (!this.isRow(this.strip.context)) {\n return;\n }\n return this.strip.context.disabled;\n }\n /**\n * Getter if the row is root.\n *\n * @hidden\n * @internal\n */\n get isRootRow() {\n if (!this.isRow(this.strip.context)) {\n return false;\n }\n return this.strip.context.isRoot;\n }\n get hasChildren() {\n if (!this.isRow(this.strip.context)) {\n return false;\n }\n return this.strip.context.hasChildren;\n }\n /**\n * Enter row or cell edit mode depending the grid rowEditable option\n *\n * @example\n * ```typescript\n * this.gridEditingActions.startEdit();\n * ```\n */\n startEdit(event) {\n if (event) {\n event.stopPropagation();\n }\n if (!this.isRow(this.strip.context)) {\n return;\n }\n const row = this.strip.context;\n const firstEditable = row.cells.filter(cell => cell.editable)[0];\n const grid = row.grid;\n if (!grid.hasEditableColumns) {\n this.isMessageShown = showMessage('The grid should be editable in order to use IgxGridEditingActionsComponent', this.isMessageShown);\n return;\n }\n // be sure row is in view\n if (grid.rowList.filter(r => r === row).length !== 0) {\n grid.gridAPI.crudService.enterEditMode(firstEditable, event);\n if (!grid.gridAPI.crudService.nonEditable) {\n firstEditable.activate(event);\n }\n }\n this.strip.hide();\n }\n /**\n * Delete a row according to the context\n *\n * @example\n * ```typescript\n * this.gridEditingActions.deleteRowHandler();\n * ```\n */\n deleteRowHandler(event) {\n if (event) {\n event.stopPropagation();\n }\n if (!this.isRow(this.strip.context)) {\n return;\n }\n const context = this.strip.context;\n const grid = context.grid;\n grid.deleteRow(context.key);\n this.strip.hide();\n }\n addRowHandler(event, asChild) {\n if (event) {\n event.stopPropagation();\n }\n if (!this.isRow(this.strip.context)) {\n return;\n }\n const context = this.strip.context;\n const grid = context.grid;\n if (!grid.rowEditable) {\n console.warn('The grid must use row edit mode to perform row adding! Please set rowEditable to true.');\n return;\n }\n grid.gridAPI.crudService.enterAddRowMode(context, asChild, event);\n this.strip.hide();\n }\n /**\n * @hidden\n * @internal\n */\n registerIcons() {\n this.iconService.addSvgIconFromText(addRow.name, addRow.value, 'imx-icons', true);\n this.iconService.addSvgIconFromText(addChild.name, addChild.value, 'imx-icons', true);\n }\n}\nIgxGridEditingActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridEditingActionsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxGridEditingActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridEditingActionsComponent, selector: \"igx-grid-editing-actions\", inputs: { addRow: \"addRow\", editRow: \"editRow\", deleteRow: \"deleteRow\", addChild: \"addChild\" }, host: { properties: { \"class.igx-action-strip__editing-actions\": \"this.cssClass\" } }, providers: [{ provide: IgxGridActionsBaseDirective, useExisting: IgxGridEditingActionsComponent }], usesInheritance: true, ngImport: i0, template: \"\\n\\n \\n \\n \\n \\n\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxGridActionButtonComponent, selector: \"igx-grid-action-button\", inputs: [\"asMenuItem\", \"iconName\", \"classNames\", \"iconSet\", \"labelText\"], outputs: [\"actionClick\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridEditingActionsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-grid-editing-actions', providers: [{ provide: IgxGridActionsBaseDirective, useExisting: IgxGridEditingActionsComponent }], template: \"\\n\\n \\n \\n \\n \\n\\n\\n\" }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-action-strip__editing-actions']\n }], addRow: [{\n type: Input\n }], editRow: [{\n type: Input\n }], deleteRow: [{\n type: Input\n }], addChild: [{\n type: Input\n }] } });\n\nclass IgxGridPinningActionsComponent extends IgxGridActionsBaseDirective {\n constructor() {\n super(...arguments);\n /**\n * Host `class.igx-action-strip` binding.\n *\n * @hidden\n * @internal\n */\n this.cssClass = 'igx-action-strip__pinning-actions';\n this.iconsRendered = false;\n }\n /**\n * Getter to know if the row is pinned\n *\n * @hidden\n * @internal\n */\n get pinned() {\n if (!this.isRow(this.strip.context)) {\n return;\n }\n const context = this.strip.context;\n if (context && !this.iconsRendered) {\n this.registerSVGIcons();\n this.iconsRendered = true;\n }\n return context && context.pinned;\n }\n /**\n * Getter to know if the row is in pinned and ghost\n *\n * @hidden\n * @internal\n */\n get inPinnedArea() {\n if (!this.isRow(this.strip.context)) {\n return;\n }\n const context = this.strip.context;\n return this.pinned && !context.disabled;\n }\n /**\n * Getter to know if the row pinning is set to top or bottom\n *\n * @hidden\n * @internal\n */\n get pinnedTop() {\n if (!this.isRow(this.strip.context)) {\n return;\n }\n return this.strip.context.grid.isRowPinningToTop;\n }\n /**\n * Pin the row according to the context.\n *\n * @example\n * ```typescript\n * this.gridPinningActions.pin();\n * ```\n */\n pin(event) {\n if (event) {\n event.stopPropagation();\n }\n if (!this.isRow(this.strip.context)) {\n return;\n }\n const row = this.strip.context;\n const grid = row.grid;\n grid.pinRow(row.key, grid.pinnedRecords.length);\n this.strip.hide();\n }\n /**\n * Unpin the row according to the context.\n *\n * @example\n * ```typescript\n * this.gridPinningActions.unpin();\n * ```\n */\n unpin(event) {\n if (event) {\n event.stopPropagation();\n }\n if (!this.isRow(this.strip.context)) {\n return;\n }\n const row = this.strip.context;\n const grid = row.grid;\n grid.unpinRow(row.key);\n this.strip.hide();\n }\n scrollToRow(event) {\n if (event) {\n event.stopPropagation();\n }\n const context = this.strip.context;\n const grid = context.grid;\n grid.scrollTo(context.data, 0);\n this.strip.hide();\n }\n registerSVGIcons() {\n if (!this.isRow(this.strip.context)) {\n return;\n }\n const context = this.strip.context;\n const grid = context.grid;\n if (grid) {\n this.iconService.addSvgIconFromText(pinLeft.name, pinLeft.value, 'imx-icons', true);\n this.iconService.addSvgIconFromText(unpinLeft.name, unpinLeft.value, 'imx-icons', true);\n this.iconService.addSvgIconFromText(jumpDown.name, jumpDown.value, 'imx-icons', true);\n this.iconService.addSvgIconFromText(jumpUp.name, jumpDown.value, 'imx-icons', true);\n }\n }\n}\nIgxGridPinningActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridPinningActionsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxGridPinningActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridPinningActionsComponent, selector: \"igx-grid-pinning-actions\", host: { properties: { \"class.igx-action-strip__pinning-actions\": \"this.cssClass\" } }, providers: [{ provide: IgxGridActionsBaseDirective, useExisting: IgxGridPinningActionsComponent }], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n \\n \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxGridActionButtonComponent, selector: \"igx-grid-action-button\", inputs: [\"asMenuItem\", \"iconName\", \"classNames\", \"iconSet\", \"labelText\"], outputs: [\"actionClick\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridPinningActionsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-grid-pinning-actions', providers: [{ provide: IgxGridActionsBaseDirective, useExisting: IgxGridPinningActionsComponent }], template: \"\\n \\n \\n \\n \\n\" }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-action-strip__pinning-actions']\n }] } });\n\nclass IgxActionStripMenuItemDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nIgxActionStripMenuItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxActionStripMenuItemDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxActionStripMenuItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxActionStripMenuItemDirective, selector: \"[igxActionStripMenuItem]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxActionStripMenuItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxActionStripMenuItem]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * Action Strip provides templatable area for one or more actions.\n *\n * @igxModule IgxActionStripModule\n *\n * @igxTheme igx-action-strip-theme\n *\n * @igxKeywords action, strip, actionStrip, pinning, editing\n *\n * @igxGroup Data Entry & Display\n *\n * @remarks\n * The Ignite UI Action Strip is a container, overlaying its parent container,\n * and displaying action buttons with action applicable to the parent component the strip is instantiated or shown for.\n *\n * @example\n * ```html\n * \n * \n * \n */\nclass IgxActionStripComponent extends DisplayDensityBase {\n /**\n * An @Input property that set the visibility of the Action Strip.\n * Could be used to set if the Action Strip will be initially hidden.\n *\n * @example\n * ```html\n * \n * ```\n */\n set hidden(value) {\n this._hidden = value;\n }\n get hidden() {\n return this._hidden;\n }\n /**\n * Gets/Sets the resource strings.\n *\n * @remarks\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n get resourceStrings() {\n if (!this._resourceStrings) {\n this._resourceStrings = CurrentResourceStrings.ActionStripResourceStrings;\n }\n return this._resourceStrings;\n }\n /**\n * Hide or not the Action Strip based on if it is a menu.\n *\n * @hidden\n * @internal\n */\n get hideOnRowLeave() {\n if (this.menu.items.length === 0) {\n return true;\n }\n else if (this.menu.items.length > 0) {\n if (this.menu.collapsed) {\n return true;\n }\n else {\n return false;\n }\n }\n }\n constructor(_viewContainer, renderer, _displayDensityOptions, cdr) {\n super(_displayDensityOptions);\n this._viewContainer = _viewContainer;\n this.renderer = renderer;\n this._displayDensityOptions = _displayDensityOptions;\n this.cdr = cdr;\n /**\n * Getter for menu overlay settings\n *\n * @hidden\n * @internal\n */\n this.menuOverlaySettings = { scrollStrategy: new CloseScrollStrategy() };\n this._hidden = false;\n }\n /**\n * Menu Items list.\n *\n * @hidden\n * @internal\n */\n get menuItems() {\n const actions = [];\n this.actionButtons.forEach(button => {\n if (button.asMenuItems) {\n const children = button.buttons;\n if (children) {\n children.toArray().forEach(x => actions.push(x));\n }\n }\n });\n return [...this._menuItems.toArray(), ...actions];\n }\n /**\n * Getter for the 'display' property of the current `IgxActionStrip`\n */\n get display() {\n return this._hidden ? 'none' : 'flex';\n }\n /**\n * Host `attr.class` binding.\n */\n get hostClasses() {\n let hostClass = this.getComponentDensityClass('igx-action-strip');\n if (hostClass !== 'igx-action-strip') {\n // action strip requires the base class to be always present:\n hostClass = `igx-action-strip ${hostClass}`;\n }\n return hostClass;\n }\n /**\n * @hidden\n * @internal\n */\n ngAfterContentInit() {\n this.actionButtons.forEach(button => {\n button.strip = this;\n });\n this.actionButtons.changes.subscribe(() => {\n this.actionButtons.forEach(button => {\n button.strip = this;\n });\n });\n }\n /**\n * @hidden\n * @internal\n */\n ngAfterViewInit() {\n this.menu.selectionChanging.subscribe(($event) => {\n const newSelection = $event.newSelection.elementRef.nativeElement;\n let allButtons = [];\n this.actionButtons.forEach(actionButtons => {\n if (actionButtons.asMenuItems) {\n allButtons = [...allButtons, ...actionButtons.buttons.toArray()];\n }\n });\n const button = allButtons.find(x => newSelection.contains(x.container.nativeElement));\n if (button) {\n button.actionClick.emit();\n }\n });\n }\n /**\n * Showing the Action Strip and appending it the specified context element.\n *\n * @param context\n * @example\n * ```typescript\n * this.actionStrip.show(row);\n * ```\n */\n show(context) {\n this.hidden = false;\n if (!context) {\n return;\n }\n // when shown for different context make sure the menu won't stay opened\n if (this.context !== context) {\n this.closeMenu();\n }\n this.context = context;\n if (this.context && this.context.element) {\n this.renderer.appendChild(context.element.nativeElement, this._viewContainer.element.nativeElement);\n }\n this.cdr.detectChanges();\n }\n /**\n * Hiding the Action Strip and removing it from its current context element.\n *\n * @example\n * ```typescript\n * this.actionStrip.hide();\n * ```\n */\n hide() {\n this.hidden = true;\n this.closeMenu();\n if (this.context && this.context.element) {\n this.renderer.removeChild(this.context.element.nativeElement, this._viewContainer.element.nativeElement);\n }\n }\n /**\n * Close the menu if opened\n *\n * @hidden\n * @internal\n */\n closeMenu() {\n if (this.menu && !this.menu.collapsed) {\n this.menu.close();\n }\n }\n}\nIgxActionStripComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxActionStripComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.Renderer2 }, { token: DisplayDensityToken, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxActionStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxActionStripComponent, selector: \"igx-action-strip\", inputs: { context: \"context\", hidden: \"hidden\", resourceStrings: \"resourceStrings\" }, host: { properties: { \"style.display\": \"this.display\", \"class\": \"this.hostClasses\" } }, queries: [{ propertyName: \"_menuItems\", predicate: IgxActionStripMenuItemDirective }, { propertyName: \"actionButtons\", predicate: IgxGridActionsBaseDirective }], viewQueries: [{ propertyName: \"menu\", first: true, predicate: [\"dropdown\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"
    \\n \\n 0\\\">\\n \\n more_vert\\n \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: IgxDropDownComponent, selector: \"igx-drop-down\", inputs: [\"allowItemsFocus\", \"labelledBy\"], outputs: [\"opening\", \"opened\", \"closing\", \"closed\"] }, { kind: \"component\", type: IgxDropDownItemComponent, selector: \"igx-drop-down-item\" }, { kind: \"directive\", type: IgxDropDownItemNavigationDirective, selector: \"[igxDropDownItemNavigation]\", inputs: [\"igxDropDownItemNavigation\"] }, { kind: \"directive\", type: IgxToggleActionDirective, selector: \"[igxToggleAction]\", inputs: [\"overlaySettings\", \"igxToggleOutlet\", \"igxToggleAction\"], exportAs: [\"toggle-action\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxActionStripComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-action-strip', template: \"
    \\n \\n 0\\\">\\n \\n more_vert\\n \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ViewContainerRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: i0.ChangeDetectorRef }];\n }, propDecorators: { context: [{\n type: Input\n }], _menuItems: [{\n type: ContentChildren,\n args: [IgxActionStripMenuItemDirective]\n }], actionButtons: [{\n type: ContentChildren,\n args: [IgxGridActionsBaseDirective]\n }], hidden: [{\n type: Input\n }], resourceStrings: [{\n type: Input\n }], menu: [{\n type: ViewChild,\n args: ['dropdown']\n }], display: [{\n type: HostBinding,\n args: ['style.display']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class']\n }] } });\n\n/**\n * @hidden\n */\nclass IgxActionStripModule {\n}\nIgxActionStripModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxActionStripModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxActionStripModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxActionStripModule, declarations: [IgxActionStripComponent,\n IgxActionStripMenuItemDirective,\n IgxGridPinningActionsComponent,\n IgxGridEditingActionsComponent,\n IgxGridActionsBaseDirective,\n IgxGridActionButtonComponent], imports: [CommonModule, IgxDropDownModule, IgxToggleModule, IgxButtonModule, IgxIconModule, IgxRippleModule], exports: [IgxActionStripComponent,\n IgxActionStripMenuItemDirective,\n IgxGridPinningActionsComponent,\n IgxGridEditingActionsComponent,\n IgxGridActionsBaseDirective,\n IgxGridActionButtonComponent] });\nIgxActionStripModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxActionStripModule, imports: [CommonModule, IgxDropDownModule, IgxToggleModule, IgxButtonModule, IgxIconModule, IgxRippleModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxActionStripModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxActionStripComponent,\n IgxActionStripMenuItemDirective,\n IgxGridPinningActionsComponent,\n IgxGridEditingActionsComponent,\n IgxGridActionsBaseDirective,\n IgxGridActionButtonComponent\n ],\n exports: [\n IgxActionStripComponent,\n IgxActionStripMenuItemDirective,\n IgxGridPinningActionsComponent,\n IgxGridEditingActionsComponent,\n IgxGridActionsBaseDirective,\n IgxGridActionButtonComponent\n ],\n imports: [CommonModule, IgxDropDownModule, IgxToggleModule, IgxButtonModule, IgxIconModule, IgxRippleModule]\n }]\n }] });\n\nlet NEXT_ID$p = 0;\nconst IgxAvatarSize = mkenum({\n SMALL: 'small',\n MEDIUM: 'medium',\n LARGE: 'large'\n});\nconst IgxAvatarType = mkenum({\n INITIALS: 'initials',\n IMAGE: 'image',\n ICON: 'icon',\n CUSTOM: 'custom'\n});\n/**\n * Avatar provides a way to display an image, icon or initials to the user.\n *\n * @igxModule IgxAvatarModule\n *\n * @igxTheme igx-avatar-theme, igx-icon-theme\n *\n * @igxKeywords avatar, profile, picture, initials\n *\n * @igxGroup Layouts\n *\n * @remarks\n *\n * The Ignite UI Avatar provides an easy way to add an avatar icon to your application. This icon can be an\n * image, someone's initials or a material icon from the Google Material icon set.\n *\n * @example\n * ```html\n * \n * \n * ```\n */\nclass IgxAvatarComponent {\n /**\n * @deprecated in version 15.1.0.\n * Sets a circular shape to the avatar, if `[roundShape]` is set to `true`.\n * By default the shape of the avatar is a square.\n *\n * @example\n * ```html\n * \n * ```\n */\n /** @hidden @internal */\n get roundShape() {\n return this.shape === 'circle';\n }\n set roundShape(value) {\n this.shape = value === true ? 'circle' : 'square';\n }\n /** @hidden @internal */\n get isRounded() {\n return this.shape === 'rounded';\n }\n /**\n * Returns the size of the avatar.\n *\n * @example\n * ```typescript\n * let avatarSize = this.avatar.size;\n * ```\n */\n get size() {\n return this._size;\n }\n /**\n * Sets the size of the avatar.\n * By default, the size is `\"small\"`. It can be set to `\"medium\"` or `\"large\"`.\n *\n * @example\n * ```html\n * \n * ```\n */\n set size(value) {\n switch (value) {\n case 'small':\n case 'medium':\n case 'large':\n this._size = value;\n break;\n default:\n this._size = 'small';\n }\n }\n /** @hidden @internal */\n get _isSmallSize() {\n return this.size === 'small';\n }\n /** @hidden @internal */\n get _isMediumSize() {\n return this.size === 'medium';\n }\n /** @hidden @internal */\n get _isLargeSize() {\n return this.size === 'large';\n }\n /**\n * Returns the type of the avatar.\n *\n * @example\n * ```typescript\n * let avatarType = this.avatar.type;\n * ```\n */\n get type() {\n if (this.src) {\n return IgxAvatarType.IMAGE;\n }\n if (this.icon) {\n return IgxAvatarType.ICON;\n }\n if (this.initials) {\n return IgxAvatarType.INITIALS;\n }\n return IgxAvatarType.CUSTOM;\n }\n /** @hidden @internal */\n get _isImageType() {\n return this.type === IgxAvatarType.IMAGE;\n }\n /** @hidden @internal */\n get _isIconType() {\n return this.type === IgxAvatarType.ICON;\n }\n /** @hidden @internal */\n get _isInitialsType() {\n return this.type === IgxAvatarType.INITIALS;\n }\n /**\n * Returns the template of the avatar.\n *\n * @hidden\n * @internal\n */\n get template() {\n switch (this.type) {\n case IgxAvatarType.IMAGE:\n return this.imageTemplate;\n case IgxAvatarType.INITIALS:\n return this.initialsTemplate;\n case IgxAvatarType.ICON:\n return this.iconTemplate;\n default:\n return this.defaultTemplate;\n }\n }\n constructor(elementRef) {\n this.elementRef = elementRef;\n /**\n * Returns the `aria-label` attribute of the avatar.\n *\n * @example\n * ```typescript\n * let ariaLabel = this.avatar.ariaLabel;\n * ```\n *\n */\n this.ariaLabel = 'avatar';\n /**\n * Returns the `role` attribute of the avatar.\n *\n * @example\n * ```typescript\n * let avatarRole = this.avatar.role;\n * ```\n */\n this.role = 'img';\n /**\n * Host `class.igx-avatar` binding.\n *\n * @hidden\n * @internal\n */\n this.cssClass = 'igx-avatar';\n /**\n * Sets the `id` of the avatar. If not set, the first avatar component will have `id` = `\"igx-avatar-0\"`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.id = `igx-avatar-${NEXT_ID$p++}`;\n /**\n * Sets square, rounded or circular shape to the avatar.\n * By default the shape of the avatar is square.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.shape = 'square';\n /**\n * @hidden\n * @internal\n */\n this._size = IgxAvatarSize.SMALL;\n }\n /**\n * Returns the css url of the image.\n *\n * @hidden\n * @internal\n */\n getSrcUrl() {\n return `url(${this.src})`;\n }\n /** @hidden @internal */\n ngOnInit() {\n this.roleDescription = this.getRole();\n }\n /** @hidden @internal */\n getRole() {\n switch (this.type) {\n case IgxAvatarType.IMAGE:\n return 'image avatar';\n case IgxAvatarType.ICON:\n return 'icon avatar';\n case IgxAvatarType.INITIALS:\n return 'initials avatar';\n default:\n return 'custom avatar';\n }\n }\n}\nIgxAvatarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAvatarComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxAvatarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxAvatarComponent, selector: \"igx-avatar\", inputs: { id: \"id\", roundShape: \"roundShape\", shape: \"shape\", color: \"color\", bgColor: \"bgColor\", initials: \"initials\", icon: \"icon\", src: \"src\", size: \"size\" }, host: { properties: { \"attr.aria-label\": \"this.ariaLabel\", \"attr.role\": \"this.role\", \"class.igx-avatar\": \"this.cssClass\", \"attr.aria-roledescription\": \"this.roleDescription\", \"attr.id\": \"this.id\", \"class.igx-avatar--circle\": \"this.roundShape\", \"class.igx-avatar--rounded\": \"this.isRounded\", \"style.color\": \"this.color\", \"style.background\": \"this.bgColor\", \"class.igx-avatar--small\": \"this._isSmallSize\", \"class.igx-avatar--medium\": \"this._isMediumSize\", \"class.igx-avatar--large\": \"this._isLargeSize\", \"class.igx-avatar--image\": \"this._isImageType\", \"class.igx-avatar--icon\": \"this._isIconType\", \"class.igx-avatar--initials\": \"this._isInitialsType\" } }, viewQueries: [{ propertyName: \"defaultTemplate\", first: true, predicate: [\"defaultTemplate\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"imageTemplate\", first: true, predicate: [\"imageTemplate\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"initialsTemplate\", first: true, predicate: [\"initialsTemplate\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"iconTemplate\", first: true, predicate: [\"iconTemplate\"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: \"\\n \\n\\n\\n\\n
    \\n
    \\n\\n\\n {{initials.substring(0, 2)}}\\n\\n\\n\\n {{icon}}\\n\\n\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAvatarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-avatar', template: \"\\n \\n\\n\\n\\n
    \\n
    \\n\\n\\n {{initials.substring(0, 2)}}\\n\\n\\n\\n {{icon}}\\n\\n\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { ariaLabel: [{\n type: HostBinding,\n args: ['attr.aria-label']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-avatar']\n }], roleDescription: [{\n type: HostBinding,\n args: ['attr.aria-roledescription']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], roundShape: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.igx-avatar--circle']\n }], shape: [{\n type: Input\n }], isRounded: [{\n type: HostBinding,\n args: ['class.igx-avatar--rounded']\n }], color: [{\n type: HostBinding,\n args: ['style.color']\n }, {\n type: Input\n }], bgColor: [{\n type: HostBinding,\n args: ['style.background']\n }, {\n type: Input\n }], initials: [{\n type: Input\n }], icon: [{\n type: Input\n }], src: [{\n type: Input\n }], defaultTemplate: [{\n type: ViewChild,\n args: ['defaultTemplate', { read: TemplateRef, static: true }]\n }], imageTemplate: [{\n type: ViewChild,\n args: ['imageTemplate', { read: TemplateRef, static: true }]\n }], initialsTemplate: [{\n type: ViewChild,\n args: ['initialsTemplate', { read: TemplateRef, static: true }]\n }], iconTemplate: [{\n type: ViewChild,\n args: ['iconTemplate', { read: TemplateRef, static: true }]\n }], size: [{\n type: Input\n }], _isSmallSize: [{\n type: HostBinding,\n args: ['class.igx-avatar--small']\n }], _isMediumSize: [{\n type: HostBinding,\n args: ['class.igx-avatar--medium']\n }], _isLargeSize: [{\n type: HostBinding,\n args: ['class.igx-avatar--large']\n }], _isImageType: [{\n type: HostBinding,\n args: ['class.igx-avatar--image']\n }], _isIconType: [{\n type: HostBinding,\n args: ['class.igx-avatar--icon']\n }], _isInitialsType: [{\n type: HostBinding,\n args: ['class.igx-avatar--initials']\n }] } });\n/**\n * @hidden\n */\nclass IgxAvatarModule {\n}\nIgxAvatarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAvatarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxAvatarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAvatarModule, declarations: [IgxAvatarComponent], imports: [CommonModule, IgxIconModule], exports: [IgxAvatarComponent] });\nIgxAvatarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAvatarModule, imports: [CommonModule, IgxIconModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAvatarModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxAvatarComponent],\n exports: [IgxAvatarComponent],\n imports: [CommonModule, IgxIconModule]\n }]\n }] });\n\n/** @hidden */\nconst IGX_EXPANSION_PANEL_COMPONENT = new InjectionToken('IgxExpansionPanelToken');\n\nclass IgxExpansionPanelBodyComponent {\n constructor(panel, element, cdr) {\n this.panel = panel;\n this.element = element;\n this.cdr = cdr;\n /**\n * @hidden\n */\n this.cssClass = `igx-expansion-panel__body`;\n /**\n * Gets/sets the `role` attribute of the panel body\n * Default is 'region';\n * Get\n * ```typescript\n * const currentRole = this.panel.body.role;\n * ```\n * Set\n * ```typescript\n * this.panel.body.role = 'content';\n * ```\n * ```html\n * \n * ```\n */\n this.role = 'region';\n this._labelledBy = '';\n this._label = '';\n }\n /**\n * Gets the `aria-label` attribute of the panel body\n * Defaults to the panel id with '-region' in the end;\n * Get\n * ```typescript\n * const currentLabel = this.panel.body.label;\n * ```\n */\n get label() {\n return this._label || this.panel.id + '-region';\n }\n /**\n * Sets the `aria-label` attribute of the panel body\n * ```typescript\n * this.panel.body.label = 'my-custom-label';\n * ```\n * ```html\n * \n * ```\n */\n set label(val) {\n this._label = val;\n }\n /**\n * Gets the `aria-labelledby` attribute of the panel body\n * Defaults to the panel header id;\n * Get\n * ```typescript\n * const currentLabel = this.panel.body.labelledBy;\n * ```\n */\n get labelledBy() {\n return this._labelledBy;\n }\n /**\n * Sets the `aria-labelledby` attribute of the panel body\n * ```typescript\n * this.panel.body.labelledBy = 'my-custom-id';\n * ```\n * ```html\n * \n * ```\n */\n set labelledBy(val) {\n this._labelledBy = val;\n }\n}\nIgxExpansionPanelBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelBodyComponent, deps: [{ token: IGX_EXPANSION_PANEL_COMPONENT }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxExpansionPanelBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExpansionPanelBodyComponent, selector: \"igx-expansion-panel-body\", inputs: { role: \"role\", label: \"label\", labelledBy: \"labelledBy\" }, host: { properties: { \"class.igx-expansion-panel__body\": \"this.cssClass\", \"attr.role\": \"this.role\", \"attr.aria-label\": \"this.label\", \"attr.aria-labelledby\": \"this.labelledBy\" } }, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelBodyComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'igx-expansion-panel-body',\n template: ``\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_EXPANSION_PANEL_COMPONENT]\n }] }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }];\n }, propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-expansion-panel__body']\n }], role: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.role']\n }], label: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.aria-label']\n }], labelledBy: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.aria-labelledby']\n }] } });\n\n/**\n * @hidden @internal\n */\nclass IgxExpansionPanelTitleDirective {\n constructor() {\n this.cssClass = `igx-expansion-panel__header-title`;\n }\n}\nIgxExpansionPanelTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxExpansionPanelTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExpansionPanelTitleDirective, selector: \"igx-expansion-panel-title\", host: { properties: { \"class.igx-expansion-panel__header-title\": \"this.cssClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelTitleDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'igx-expansion-panel-title'\n }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-expansion-panel__header-title']\n }] } });\n/**\n * @hidden @internal\n */\nclass IgxExpansionPanelDescriptionDirective {\n constructor() {\n this.cssClass = `igx-expansion-panel__header-description`;\n }\n}\nIgxExpansionPanelDescriptionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelDescriptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxExpansionPanelDescriptionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExpansionPanelDescriptionDirective, selector: \"igx-expansion-panel-description\", host: { properties: { \"class.igx-expansion-panel__header-description\": \"this.cssClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelDescriptionDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'igx-expansion-panel-description'\n }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-expansion-panel__header-description']\n }] } });\n/**\n * @hidden @internal\n */\nclass IgxExpansionPanelIconDirective {\n}\nIgxExpansionPanelIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxExpansionPanelIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExpansionPanelIconDirective, selector: \"igx-expansion-panel-icon\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelIconDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'igx-expansion-panel-icon'\n }]\n }] });\n\n/**\n * @hidden\n */\nconst ExpansionPanelHeaderIconPosition = mkenum({\n LEFT: 'left',\n NONE: 'none',\n RIGHT: 'right'\n});\nclass IgxExpansionPanelHeaderComponent {\n /**\n * Returns a reference to the `igx-expansion-panel-icon` element;\n * If `iconPosition` is `NONE` - return null;\n */\n get iconRef() {\n var _a;\n const renderedTemplate = (_a = this.customIconRef) !== null && _a !== void 0 ? _a : this.defaultIconRef;\n return this.iconPosition !== ExpansionPanelHeaderIconPosition.NONE ? renderedTemplate : null;\n }\n /**\n * @hidden\n */\n set iconTemplate(val) {\n this._iconTemplate = val;\n }\n /**\n * @hidden\n */\n get iconTemplate() {\n return this._iconTemplate;\n }\n /**\n * @hidden\n */\n get controls() {\n return this.panel.id;\n }\n /**\n * @hidden @internal\n */\n get innerElement() {\n return this.elementRef.nativeElement.children[0];\n }\n /**\n * @hidden\n */\n get isExpanded() {\n return !this.panel.collapsed;\n }\n /**\n * Gets/sets the whether the header is disabled\n * When disabled, the header will not handle user events and will stop their propagation\n *\n * ```typescript\n * const isDisabled = this.panel.header.disabled;\n * ```\n * Set\n * ```typescript\n * this.panel.header.disabled = true;\n * ```\n * ```html\n * \n * ...\n * \n * ```\n */\n get disabled() {\n return this._disabled;\n }\n ;\n set disabled(val) {\n this._disabled = val;\n if (val) {\n // V.S. June 11th, 2021: #9696 TabIndex should be removed when panel is disabled\n delete this.tabIndex;\n }\n else {\n this.tabIndex = 0;\n }\n }\n ;\n constructor(panel, cdr, elementRef) {\n this.panel = panel;\n this.cdr = cdr;\n this.elementRef = elementRef;\n /**\n * Gets/sets the `aria-level` attribute of the header\n * Get\n * ```typescript\n * const currentAriaLevel = this.panel.header.lv;\n * ```\n * Set\n * ```typescript\n * this.panel.header.lv = '5';\n * ```\n * ```html\n * \n * ```\n */\n this.lv = '3';\n /**\n * Gets/sets the `role` attribute of the header\n * Get\n * ```typescript\n * const currentRole = this.panel.header.role;\n * ```\n * Set\n * ```typescript\n * this.panel.header.role = '5';\n * ```\n * ```html\n * \n * ```\n */\n this.role = 'heading';\n /**\n * Gets/sets the position of the expansion-panel-header expand/collapse icon\n * Accepts `left`, `right` or `none`\n * ```typescript\n * const currentIconPosition = this.panel.header.iconPosition;\n * ```\n * Set\n * ```typescript\n * this.panel.header.iconPosition = 'left';\n * ```\n * ```html\n * \n * ```\n */\n this.iconPosition = ExpansionPanelHeaderIconPosition.LEFT;\n /**\n * Emitted whenever a user interacts with the header host\n * ```typescript\n * handleInteraction(event: IExpansionPanelCancelableEventArgs) {\n * ...\n * }\n * ```\n * ```html\n * \n * ...\n * \n * ```\n */\n this.interaction = new EventEmitter();\n /**\n * @hidden\n */\n this.cssClass = 'igx-expansion-panel__header';\n /**\n * Sets/gets the `id` of the expansion panel header.\n * ```typescript\n * let panelHeaderId = this.panel.header.id;\n * ```\n *\n * @memberof IgxExpansionPanelComponent\n */\n this.id = '';\n /** @hidden @internal */\n this.tabIndex = 0;\n // properties section\n this._iconTemplate = false;\n this._disabled = false;\n this.id = `${this.panel.id}-header`;\n }\n /**\n * @hidden\n */\n onAction(evt) {\n if (this.disabled) {\n evt.stopPropagation();\n return;\n }\n const eventArgs = { event: evt, owner: this.panel, cancel: false };\n this.interaction.emit(eventArgs);\n if (eventArgs.cancel === true) {\n return;\n }\n this.panel.toggle(evt);\n evt.preventDefault();\n }\n /** @hidden @internal */\n openPanel(event) {\n if (event.altKey) {\n const eventArgs = { event, owner: this.panel, cancel: false };\n this.interaction.emit(eventArgs);\n if (eventArgs.cancel === true) {\n return;\n }\n this.panel.expand(event);\n }\n }\n /** @hidden @internal */\n closePanel(event) {\n if (event.altKey) {\n const eventArgs = { event, owner: this.panel, cancel: false };\n this.interaction.emit(eventArgs);\n if (eventArgs.cancel === true) {\n return;\n }\n this.panel.collapse(event);\n }\n }\n /**\n * @hidden\n */\n get iconPositionClass() {\n switch (this.iconPosition) {\n case (ExpansionPanelHeaderIconPosition.LEFT):\n return `igx-expansion-panel__header-icon--start`;\n case (ExpansionPanelHeaderIconPosition.RIGHT):\n return `igx-expansion-panel__header-icon--end`;\n case (ExpansionPanelHeaderIconPosition.NONE):\n return `igx-expansion-panel__header-icon--none`;\n default:\n return '';\n }\n }\n}\nIgxExpansionPanelHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelHeaderComponent, deps: [{ token: IGX_EXPANSION_PANEL_COMPONENT, host: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxExpansionPanelHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExpansionPanelHeaderComponent, selector: \"igx-expansion-panel-header\", inputs: { lv: \"lv\", role: \"role\", iconPosition: \"iconPosition\", disabled: \"disabled\" }, outputs: { interaction: \"interaction\" }, host: { listeners: { \"keydown.Enter\": \"onAction($event)\", \"keydown.Space\": \"onAction($event)\", \"keydown.Spacebar\": \"onAction($event)\", \"click\": \"onAction($event)\", \"keydown.Alt.ArrowDown\": \"openPanel($event)\", \"keydown.Alt.ArrowUp\": \"closePanel($event)\" }, properties: { \"attr.aria-level\": \"this.lv\", \"attr.role\": \"this.role\", \"class.igx-expansion-panel__header\": \"this.cssClass\", \"class.igx-expansion-panel__header--expanded\": \"this.isExpanded\", \"class.igx-expansion-panel--disabled\": \"this.disabled\" } }, queries: [{ propertyName: \"iconTemplate\", first: true, predicate: IgxExpansionPanelIconDirective, descendants: true }, { propertyName: \"customIconRef\", first: true, predicate: IgxExpansionPanelIconDirective, descendants: true, read: ElementRef }], viewQueries: [{ propertyName: \"defaultIconRef\", first: true, predicate: IgxIconComponent, descendants: true, read: ElementRef }], ngImport: i0, template: \"
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n {{panel.collapsed? 'expand_more':'expand_less'}}\\n \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelHeaderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-expansion-panel-header', template: \"
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n {{panel.collapsed? 'expand_more':'expand_less'}}\\n \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Host\n }, {\n type: Inject,\n args: [IGX_EXPANSION_PANEL_COMPONENT]\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }];\n }, propDecorators: { iconTemplate: [{\n type: ContentChild,\n args: [IgxExpansionPanelIconDirective]\n }], lv: [{\n type: HostBinding,\n args: ['attr.aria-level']\n }, {\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }, {\n type: Input\n }], iconPosition: [{\n type: Input\n }], interaction: [{\n type: Output\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-expansion-panel__header']\n }], isExpanded: [{\n type: HostBinding,\n args: ['class.igx-expansion-panel__header--expanded']\n }], disabled: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.igx-expansion-panel--disabled']\n }], customIconRef: [{\n type: ContentChild,\n args: [IgxExpansionPanelIconDirective, { read: ElementRef }]\n }], defaultIconRef: [{\n type: ViewChild,\n args: [IgxIconComponent, { read: ElementRef }]\n }], onAction: [{\n type: HostListener,\n args: ['keydown.Enter', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.Space', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.Spacebar', ['$event']]\n }, {\n type: HostListener,\n args: ['click', ['$event']]\n }], openPanel: [{\n type: HostListener,\n args: ['keydown.Alt.ArrowDown', ['$event']]\n }], closePanel: [{\n type: HostListener,\n args: ['keydown.Alt.ArrowUp', ['$event']]\n }] } });\n\n/** @hidden @internal */\nvar ANIMATION_TYPE;\n(function (ANIMATION_TYPE) {\n ANIMATION_TYPE[\"OPEN\"] = \"open\";\n ANIMATION_TYPE[\"CLOSE\"] = \"close\";\n})(ANIMATION_TYPE || (ANIMATION_TYPE = {}));\n/**@hidden @internal */\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nclass ToggleAnimationPlayer {\n get animationSettings() {\n return this._animationSettings;\n }\n set animationSettings(value) {\n this._animationSettings = value;\n }\n constructor(animationService) {\n this.animationService = animationService;\n /** @hidden @internal */\n this.openAnimationDone = new EventEmitter();\n /** @hidden @internal */\n this.closeAnimationDone = new EventEmitter();\n /** @hidden @internal */\n this.openAnimationStart = new EventEmitter();\n /** @hidden @internal */\n this.closeAnimationStart = new EventEmitter();\n /** @hidden @internal */\n this.openAnimationPlayer = null;\n /** @hidden @internal */\n this.closeAnimationPlayer = null;\n this.destroy$ = new Subject();\n this.players = new Map();\n this._animationSettings = {\n openAnimation: growVerIn,\n closeAnimation: growVerOut\n };\n this.closeInterrupted = false;\n this.openInterrupted = false;\n this._defaultClosedCallback = noop;\n this._defaultOpenedCallback = noop;\n this.onClosedCallback = this._defaultClosedCallback;\n this.onOpenedCallback = this._defaultOpenedCallback;\n }\n /** @hidden @internal */\n playOpenAnimation(targetElement, onDone) {\n this.startPlayer(ANIMATION_TYPE.OPEN, targetElement, onDone || this._defaultOpenedCallback);\n }\n /** @hidden @internal */\n playCloseAnimation(targetElement, onDone) {\n this.startPlayer(ANIMATION_TYPE.CLOSE, targetElement, onDone || this._defaultClosedCallback);\n }\n /** @hidden @internal */\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n startPlayer(type, targetElement, callback) {\n if (!targetElement) { // if no element is passed, there is nothing to animate\n return;\n }\n let target = this.getPlayer(type);\n if (!target) {\n target = this.initializePlayer(type, targetElement, callback);\n }\n // V.S. Jun 28th, 2021 #9783: player will NOT be initialized w/ null settings\n // events will already be emitted\n if (!target || target.hasStarted()) {\n return;\n }\n const targetEmitter = type === ANIMATION_TYPE.OPEN ? this.openAnimationStart : this.closeAnimationStart;\n targetEmitter.emit();\n if (target) {\n target.play();\n }\n }\n initializePlayer(type, targetElement, callback) {\n const oppositeType = type === ANIMATION_TYPE.OPEN ? ANIMATION_TYPE.CLOSE : ANIMATION_TYPE.OPEN;\n // V.S. Jun 28th, 2021 #9783: Treat falsy animation settings as disabled animations\n const targetAnimationSettings = this.animationSettings || { closeAnimation: null, openAnimation: null };\n const animationSettings = type === ANIMATION_TYPE.OPEN ?\n targetAnimationSettings.openAnimation : targetAnimationSettings.closeAnimation;\n // V.S. Jun 28th, 2021 #9783: When no animation in target direction, emit start and done events and return\n if (!animationSettings) {\n this.setCallback(type, callback);\n const targetEmitter = type === ANIMATION_TYPE.OPEN ? this.openAnimationStart : this.closeAnimationStart;\n targetEmitter.emit();\n this.onDoneHandler(type);\n return;\n }\n const opposite = this.getPlayer(oppositeType);\n let oppositePosition = 1;\n if (opposite) {\n oppositePosition = opposite.position;\n this.cleanUpPlayer(oppositeType);\n }\n if (type === ANIMATION_TYPE.OPEN) {\n this.openAnimationPlayer = this.animationService.buildAnimation(animationSettings, targetElement.nativeElement);\n }\n else if (type === ANIMATION_TYPE.CLOSE) {\n this.closeAnimationPlayer = this.animationService.buildAnimation(animationSettings, targetElement.nativeElement);\n }\n const target = this.getPlayer(type);\n target.init();\n this.getPlayer(type).position = 1 - oppositePosition;\n this.setCallback(type, callback);\n target.animationEnd.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.onDoneHandler(type);\n });\n return target;\n }\n onDoneHandler(type) {\n const targetEmitter = type === ANIMATION_TYPE.OPEN ? this.openAnimationDone : this.closeAnimationDone;\n const targetCallback = type === ANIMATION_TYPE.OPEN ? this.onOpenedCallback : this.onClosedCallback;\n targetCallback();\n if (!(type === ANIMATION_TYPE.OPEN ? this.openInterrupted : this.closeInterrupted)) {\n targetEmitter.emit();\n }\n this.cleanUpPlayer(type);\n }\n setCallback(type, callback) {\n if (type === ANIMATION_TYPE.OPEN) {\n this.onOpenedCallback = callback;\n this.openInterrupted = false;\n }\n else if (type === ANIMATION_TYPE.CLOSE) {\n this.onClosedCallback = callback;\n this.closeInterrupted = false;\n }\n }\n cleanUpPlayer(target) {\n switch (target) {\n case ANIMATION_TYPE.CLOSE:\n if (this.closeAnimationPlayer != null) {\n this.closeAnimationPlayer.reset();\n this.closeAnimationPlayer.destroy();\n this.closeAnimationPlayer = null;\n }\n this.closeInterrupted = true;\n this.onClosedCallback = this._defaultClosedCallback;\n break;\n case ANIMATION_TYPE.OPEN:\n if (this.openAnimationPlayer != null) {\n this.openAnimationPlayer.reset();\n this.openAnimationPlayer.destroy();\n this.openAnimationPlayer = null;\n }\n this.openInterrupted = true;\n this.onOpenedCallback = this._defaultOpenedCallback;\n break;\n default:\n break;\n }\n }\n getPlayer(type) {\n switch (type) {\n case ANIMATION_TYPE.OPEN:\n return this.openAnimationPlayer;\n case ANIMATION_TYPE.CLOSE:\n return this.closeAnimationPlayer;\n default:\n return null;\n }\n }\n}\nToggleAnimationPlayer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: ToggleAnimationPlayer, deps: [{ token: IgxAngularAnimationService }], target: i0.ɵɵFactoryTarget.Directive });\nToggleAnimationPlayer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: ToggleAnimationPlayer, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: ToggleAnimationPlayer, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IgxAngularAnimationService]\n }] }];\n } });\n\nlet NEXT_ID$o = 0;\nclass IgxExpansionPanelComponent extends ToggleAnimationPlayer {\n /**\n * Sets/gets the animation settings of the expansion panel component\n * Open and Close animation should be passed\n *\n * Get\n * ```typescript\n * const currentAnimations = this.panel.animationSettings;\n * ```\n * Set\n * ```typescript\n * import { slideInLeft, slideOutRight } from 'igniteui-angular';\n * ...\n * this.panel.animationsSettings = {\n * openAnimation: slideInLeft,\n * closeAnimation: slideOutRight\n * };\n * ```\n * or via template\n * ```typescript\n * import { slideInLeft, slideOutRight } from 'igniteui-angular';\n * ...\n * myCustomAnimationObject = {\n * openAnimation: slideInLeft,\n * closeAnimation: slideOutRight\n * };\n * ```html\n * \n * ...\n * \n * ```\n */\n get animationSettings() {\n return this._animationSettings;\n }\n set animationSettings(value) {\n this._animationSettings = value;\n }\n /**\n * @hidden @internal\n */\n get panelExpanded() {\n return !this.collapsed;\n }\n /**\n * @hidden\n */\n get headerId() {\n return this.header ? `${this.id}-header` : '';\n }\n /**\n * @hidden @internal\n */\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n constructor(animationService, cdr, elementRef) {\n super(animationService);\n this.cdr = cdr;\n this.elementRef = elementRef;\n /**\n * Sets/gets the `id` of the expansion panel component.\n * If not set, `id` will have value `\"igx-expansion-panel-0\"`;\n * ```html\n * \n * ```\n * ```typescript\n * let panelId = this.panel.id;\n * ```\n *\n * @memberof IgxExpansionPanelComponent\n */\n this.id = `igx-expansion-panel-${NEXT_ID$o++}`;\n /**\n * @hidden\n */\n this.cssClass = 'igx-expansion-panel';\n /**\n * @hidden\n */\n this.opened = false;\n /**\n * Gets/sets whether the component is collapsed (its content is hidden)\n * Get\n * ```typescript\n * const myPanelState: boolean = this.panel.collapsed;\n * ```\n * Set\n * ```html\n * this.panel.collapsed = true;\n * ```\n *\n * Two-way data binding:\n * ```html\n * \n * ```\n */\n this.collapsed = true;\n /**\n * @hidden\n */\n this.collapsedChange = new EventEmitter();\n /**\n * Emitted when the expansion panel starts collapsing\n * ```typescript\n * handleCollapsing(event: IExpansionPanelCancelableEventArgs)\n * ```\n * ```html\n * \n * ...\n * \n * ```\n */\n this.contentCollapsing = new EventEmitter();\n /**\n * Emitted when the expansion panel finishes collapsing\n * ```typescript\n * handleCollapsed(event: IExpansionPanelEventArgs)\n * ```\n * ```html\n * \n * ...\n * \n * ```\n */\n this.contentCollapsed = new EventEmitter();\n /**\n * Emitted when the expansion panel starts expanding\n * ```typescript\n * handleExpanding(event: IExpansionPanelCancelableEventArgs)\n * ```\n * ```html\n * \n * ...\n * \n * ```\n */\n this.contentExpanding = new EventEmitter();\n /**\n * Emitted when the expansion panel finishes expanding\n * ```typescript\n * handleExpanded(event: IExpansionPanelEventArgs)\n * ```\n * ```html\n * \n * ...\n * \n * ```\n */\n this.contentExpanded = new EventEmitter();\n }\n /** @hidden */\n ngAfterContentInit() {\n if (this.body && this.header) {\n // schedule at end of turn:\n Promise.resolve().then(() => {\n this.body.labelledBy = this.body.labelledBy || this.headerId;\n this.body.label = this.body.label || this.id + '-region';\n });\n }\n }\n /**\n * Collapses the panel\n *\n * ```html\n * \n * ...\n * \n * \n * ```\n */\n collapse(evt) {\n var _a;\n // If expansion panel is already collapsed or is collapsing, do nothing\n if (this.collapsed || this.closeAnimationPlayer) {\n return;\n }\n const args = { event: evt, panel: this, owner: this, cancel: false };\n this.contentCollapsing.emit(args);\n if (args.cancel === true) {\n return;\n }\n this.opened = false;\n this.playCloseAnimation((_a = this.body) === null || _a === void 0 ? void 0 : _a.element, () => {\n this.contentCollapsed.emit({ event: evt, owner: this });\n this.collapsed = true;\n this.collapsedChange.emit(true);\n this.cdr.markForCheck();\n });\n }\n /**\n * Expands the panel\n *\n * ```html\n * \n * ...\n * \n * \n * ```\n */\n expand(evt) {\n var _a;\n if (!this.collapsed) { // If the panel is already opened, do nothing\n return;\n }\n const args = { event: evt, panel: this, owner: this, cancel: false };\n this.contentExpanding.emit(args);\n if (args.cancel === true) {\n return;\n }\n this.collapsed = false;\n this.opened = true;\n this.collapsedChange.emit(false);\n this.cdr.detectChanges();\n this.playOpenAnimation((_a = this.body) === null || _a === void 0 ? void 0 : _a.element, () => {\n this.contentExpanded.emit({ event: evt, owner: this });\n });\n }\n /**\n * Toggles the panel\n *\n * ```html\n * \n * ...\n * \n * \n * ```\n */\n toggle(evt) {\n if (this.collapsed) {\n this.open(evt);\n }\n else {\n this.close(evt);\n }\n }\n open(evt) {\n this.expand(evt);\n }\n close(evt) {\n this.collapse(evt);\n }\n}\nIgxExpansionPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelComponent, deps: [{ token: IgxAngularAnimationService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxExpansionPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExpansionPanelComponent, selector: \"igx-expansion-panel\", inputs: { animationSettings: \"animationSettings\", id: \"id\", collapsed: \"collapsed\" }, outputs: { collapsedChange: \"collapsedChange\", contentCollapsing: \"contentCollapsing\", contentCollapsed: \"contentCollapsed\", contentExpanding: \"contentExpanding\", contentExpanded: \"contentExpanded\" }, host: { properties: { \"attr.id\": \"this.id\", \"class.igx-expansion-panel\": \"this.cssClass\", \"class.igx-expansion-panel--expanded\": \"this.opened\", \"attr.aria-expanded\": \"this.panelExpanded\" } }, providers: [{ provide: IGX_EXPANSION_PANEL_COMPONENT, useExisting: IgxExpansionPanelComponent }], queries: [{ propertyName: \"body\", first: true, predicate: IgxExpansionPanelBodyComponent, descendants: true, read: IgxExpansionPanelBodyComponent }, { propertyName: \"header\", first: true, predicate: IgxExpansionPanelHeaderComponent, descendants: true, read: IgxExpansionPanelHeaderComponent }], usesInheritance: true, ngImport: i0, template: \"\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-expansion-panel', providers: [{ provide: IGX_EXPANSION_PANEL_COMPONENT, useExisting: IgxExpansionPanelComponent }], template: \"\\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IgxAngularAnimationService]\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }];\n }, propDecorators: { animationSettings: [{\n type: Input\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-expansion-panel']\n }], opened: [{\n type: HostBinding,\n args: ['class.igx-expansion-panel--expanded']\n }], panelExpanded: [{\n type: HostBinding,\n args: ['attr.aria-expanded']\n }], collapsed: [{\n type: Input\n }], collapsedChange: [{\n type: Output\n }], contentCollapsing: [{\n type: Output\n }], contentCollapsed: [{\n type: Output\n }], contentExpanding: [{\n type: Output\n }], contentExpanded: [{\n type: Output\n }], body: [{\n type: ContentChild,\n args: [IgxExpansionPanelBodyComponent, { read: IgxExpansionPanelBodyComponent }]\n }], header: [{\n type: ContentChild,\n args: [IgxExpansionPanelHeaderComponent, { read: IgxExpansionPanelHeaderComponent }]\n }] } });\n\n/**\n * @hidden\n */\nclass IgxExpansionPanelModule {\n}\nIgxExpansionPanelModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxExpansionPanelModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelModule, declarations: [IgxExpansionPanelComponent,\n IgxExpansionPanelHeaderComponent,\n IgxExpansionPanelBodyComponent,\n IgxExpansionPanelDescriptionDirective,\n IgxExpansionPanelTitleDirective,\n IgxExpansionPanelIconDirective], imports: [CommonModule,\n IgxRippleModule,\n IgxIconModule,\n IgxButtonModule,\n IgxAvatarModule], exports: [IgxExpansionPanelComponent,\n IgxExpansionPanelHeaderComponent,\n IgxExpansionPanelBodyComponent,\n IgxExpansionPanelDescriptionDirective,\n IgxExpansionPanelTitleDirective,\n IgxExpansionPanelIconDirective] });\nIgxExpansionPanelModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelModule, imports: [CommonModule,\n IgxRippleModule,\n IgxIconModule,\n IgxButtonModule,\n IgxAvatarModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExpansionPanelModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxExpansionPanelComponent,\n IgxExpansionPanelHeaderComponent,\n IgxExpansionPanelBodyComponent,\n IgxExpansionPanelDescriptionDirective,\n IgxExpansionPanelTitleDirective,\n IgxExpansionPanelIconDirective\n ],\n exports: [\n IgxExpansionPanelComponent,\n IgxExpansionPanelHeaderComponent,\n IgxExpansionPanelBodyComponent,\n IgxExpansionPanelDescriptionDirective,\n IgxExpansionPanelTitleDirective,\n IgxExpansionPanelIconDirective\n ],\n imports: [\n CommonModule,\n IgxRippleModule,\n IgxIconModule,\n IgxButtonModule,\n IgxAvatarModule\n ]\n }]\n }] });\n\nlet NEXT_ID$n = 0;\n/**\n * IgxAccordion is a container-based component that contains that can house multiple expansion panels.\n *\n * @igxModule IgxAccordionModule\n *\n * @igxKeywords accordion\n *\n * @igxGroup Layouts\n *\n * @remark\n * The Ignite UI for Angular Accordion component enables the user to navigate among multiple collapsing panels\n * displayed in a single container.\n * The accordion offers keyboard navigation and API to control the underlying panels' expansion state.\n *\n * @example\n * ```html\n * \n * \n * ...\n * \n * \n * ```\n */\nclass IgxAccordionComponent {\n /**\n * Get/Set the animation settings that panels should use when expanding/collpasing.\n *\n * ```html\n * \n * ```\n *\n * ```typescript\n * const customAnimationSettings: ToggleAnimationSettings = {\n * openAnimation: growVerIn,\n * closeAnimation: growVerOut\n * };\n *\n * this.accordion.animationSettings = customAnimationSettings;\n * ```\n */\n get animationSettings() {\n return this._animationSettings;\n }\n set animationSettings(value) {\n this._animationSettings = value;\n this.updatePanelsAnimation();\n }\n /**\n * Get/Set how the accordion handles the expansion of the projected expansion panels.\n * If set to `true`, only a single panel can be expanded at a time, collapsing all others\n *\n * ```html\n * \n * ...\n * \n * ```\n *\n * ```typescript\n * this.accordion.singleBranchExpand = false;\n * ```\n */\n get singleBranchExpand() {\n return this._singleBranchExpand;\n }\n set singleBranchExpand(val) {\n this._singleBranchExpand = val;\n if (val) {\n this.collapseAllExceptLast();\n }\n }\n /**\n * Get all panels.\n *\n * ```typescript\n * const panels: IgxExpansionPanelComponent[] = this.accordion.panels;\n * ```\n */\n get panels() {\n var _a;\n return (_a = this._panels) === null || _a === void 0 ? void 0 : _a.toArray();\n }\n constructor(cdr) {\n this.cdr = cdr;\n /**\n * Get/Set the `id` of the accordion component.\n * Default value is `\"igx-accordion-0\"`;\n * ```html\n * \n * ```\n * ```typescript\n * const accordionId = this.accordion.id;\n * ```\n */\n this.id = `igx-accordion-${NEXT_ID$n++}`;\n /** @hidden @internal **/\n this.cssClass = 'igx-accordion';\n /** @hidden @internal **/\n this.displayStyle = 'block';\n /**\n * Emitted before a panel is expanded.\n *\n * @remarks\n * This event is cancelable.\n *\n * ```html\n * \n * \n * ```\n *\n *```typescript\n * public handlePanelExpanding(event: IExpansionPanelCancelableEventArgs){\n * const expandedPanel: IgxExpansionPanelComponent = event.panel;\n * if (expandedPanel.disabled) {\n * event.cancel = true;\n * }\n * }\n *```\n */\n this.panelExpanding = new EventEmitter();\n /**\n * Emitted after a panel has been expanded.\n *\n * ```html\n * \n * \n * ```\n *\n *```typescript\n * public handlePanelExpanded(event: IExpansionPanelCancelableEventArgs) {\n * const expandedPanel: IgxExpansionPanelComponent = event.panel;\n * console.log(\"Panel is expanded: \", expandedPanel.id);\n * }\n *```\n */\n this.panelExpanded = new EventEmitter();\n /**\n * Emitted before a panel is collapsed.\n *\n * @remarks\n * This event is cancelable.\n *\n * ```html\n * \n * \n * ```\n */\n this.panelCollapsing = new EventEmitter();\n /**\n * Emitted after a panel has been collapsed.\n *\n * ```html\n * \n * \n * ```\n */\n this.panelCollapsed = new EventEmitter();\n this._destroy$ = new Subject();\n this._unsubChildren$ = new Subject();\n this._singleBranchExpand = false;\n }\n /** @hidden @internal **/\n ngAfterContentInit() {\n this.updatePanelsAnimation();\n if (this.singleBranchExpand) {\n this.collapseAllExceptLast();\n }\n }\n /** @hidden @internal **/\n ngAfterViewInit() {\n this._expandedPanels = new Set(this._panels.filter(panel => !panel.collapsed));\n this._expandingPanels = new Set();\n this._panels.changes.pipe(takeUntil(this._destroy$)).subscribe(() => {\n this.subToChanges();\n });\n this.subToChanges();\n }\n /** @hidden @internal */\n ngOnDestroy() {\n this._unsubChildren$.next();\n this._unsubChildren$.complete();\n this._destroy$.next();\n this._destroy$.complete();\n }\n /**\n * Expands all collapsed expansion panels.\n *\n * ```typescript\n * accordion.expandAll();\n * ```\n */\n expandAll() {\n if (this.singleBranchExpand) {\n for (let i = 0; i < this.panels.length - 1; i++) {\n this.panels[i].collapse();\n }\n this._panels.last.expand();\n return;\n }\n this.panels.forEach(panel => panel.expand());\n }\n /**\n * Collapses all expanded expansion panels.\n *\n * ```typescript\n * accordion.collapseAll();\n * ```\n */\n collapseAll() {\n this.panels.forEach(panel => panel.collapse());\n }\n collapseAllExceptLast() {\n var _a, _b;\n const lastExpanded = (_a = this.panels) === null || _a === void 0 ? void 0 : _a.filter(p => !p.collapsed && !p.header.disabled).pop();\n (_b = this.panels) === null || _b === void 0 ? void 0 : _b.forEach((p) => {\n if (p !== lastExpanded && !p.header.disabled) {\n p.collapsed = true;\n }\n });\n this.cdr.detectChanges();\n }\n handleKeydown(event, panel) {\n const key = event.key.toLowerCase();\n if (!(ACCORDION_NAVIGATION_KEYS.has(key))) {\n return;\n }\n // TO DO: if we ever want to improve the performance of the accordion,\n // enabledPanels could be cached (by making a disabledChange emitter on the panel header)\n this._enabledPanels = this._panels.filter(p => !p.header.disabled);\n event.preventDefault();\n this.handleNavigation(event, panel);\n }\n handleNavigation(event, panel) {\n switch (event.key.toLowerCase()) {\n case 'home':\n this._enabledPanels[0].header.innerElement.focus();\n break;\n case 'end':\n this._enabledPanels[this._enabledPanels.length - 1].header.innerElement.focus();\n break;\n case 'arrowup':\n case 'up':\n this.handleUpDownArrow(true, event, panel);\n break;\n case 'arrowdown':\n case 'down':\n this.handleUpDownArrow(false, event, panel);\n break;\n }\n }\n handleUpDownArrow(isUp, event, panel) {\n if (!event.altKey) {\n const focusedPanel = panel;\n const next = this.getNextPanel(focusedPanel, isUp ? -1 : 1);\n if (next === focusedPanel) {\n return;\n }\n next.header.innerElement.focus();\n }\n if (event.altKey && event.shiftKey) {\n if (isUp) {\n this._enabledPanels.forEach(p => p.collapse());\n }\n else {\n if (this.singleBranchExpand) {\n for (let i = 0; i < this._enabledPanels.length - 1; i++) {\n this._enabledPanels[i].collapse();\n }\n this._enabledPanels[this._enabledPanels.length - 1].expand();\n return;\n }\n this._enabledPanels.forEach(p => p.expand());\n }\n }\n }\n getNextPanel(panel, dir = 1) {\n const panelIndex = this._enabledPanels.indexOf(panel);\n return this._enabledPanels[panelIndex + dir] || panel;\n }\n subToChanges() {\n this._unsubChildren$.next();\n this._panels.forEach(panel => {\n panel.contentExpanded.pipe(takeUntil(this._unsubChildren$)).subscribe((args) => {\n this._expandedPanels.add(args.owner);\n this._expandingPanels.delete(args.owner);\n const evArgs = Object.assign(Object.assign({}, args), { owner: this, panel: args.owner });\n this.panelExpanded.emit(evArgs);\n });\n panel.contentExpanding.pipe(takeUntil(this._unsubChildren$)).subscribe((args) => {\n if (args.cancel) {\n return;\n }\n const evArgs = Object.assign(Object.assign({}, args), { owner: this, panel: args.owner });\n this.panelExpanding.emit(evArgs);\n if (evArgs.cancel) {\n args.cancel = true;\n return;\n }\n if (this.singleBranchExpand) {\n this._expandedPanels.forEach(p => {\n if (!p.header.disabled) {\n p.collapse();\n }\n });\n this._expandingPanels.forEach(p => {\n var _a, _b;\n if (!p.header.disabled) {\n if (!p.animationSettings.closeAnimation) {\n (_a = p.openAnimationPlayer) === null || _a === void 0 ? void 0 : _a.reset();\n }\n if (!p.animationSettings.openAnimation) {\n (_b = p.closeAnimationPlayer) === null || _b === void 0 ? void 0 : _b.reset();\n }\n p.collapse();\n }\n });\n this._expandingPanels.add(args.owner);\n }\n });\n panel.contentCollapsed.pipe(takeUntil(this._unsubChildren$)).subscribe((args) => {\n this._expandedPanels.delete(args.owner);\n this._expandingPanels.delete(args.owner);\n const evArgs = Object.assign(Object.assign({}, args), { owner: this, panel: args.owner });\n this.panelCollapsed.emit(evArgs);\n });\n panel.contentCollapsing.pipe(takeUntil(this._unsubChildren$)).subscribe((args) => {\n const evArgs = Object.assign(Object.assign({}, args), { owner: this, panel: args.owner });\n this.panelCollapsing.emit(evArgs);\n if (evArgs.cancel) {\n args.cancel = true;\n }\n });\n fromEvent(panel.header.innerElement, 'keydown')\n .pipe(takeUntil(this._unsubChildren$))\n .subscribe((e) => {\n this.handleKeydown(e, panel);\n });\n });\n }\n updatePanelsAnimation() {\n var _a;\n if (this.animationSettings !== undefined) {\n (_a = this.panels) === null || _a === void 0 ? void 0 : _a.forEach(panel => panel.animationSettings = this.animationSettings);\n }\n }\n}\nIgxAccordionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAccordionComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxAccordionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxAccordionComponent, selector: \"igx-accordion\", inputs: { id: \"id\", animationSettings: \"animationSettings\", singleBranchExpand: \"singleBranchExpand\" }, outputs: { panelExpanding: \"panelExpanding\", panelExpanded: \"panelExpanded\", panelCollapsing: \"panelCollapsing\", panelCollapsed: \"panelCollapsed\" }, host: { properties: { \"attr.id\": \"this.id\", \"class.igx-accordion\": \"this.cssClass\", \"style.display\": \"this.displayStyle\" } }, queries: [{ propertyName: \"_panels\", predicate: IgxExpansionPanelComponent }], ngImport: i0, template: \"\\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAccordionComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-accordion', template: \"\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-accordion']\n }], displayStyle: [{\n type: HostBinding,\n args: ['style.display']\n }], animationSettings: [{\n type: Input\n }], singleBranchExpand: [{\n type: Input\n }], panelExpanding: [{\n type: Output\n }], panelExpanded: [{\n type: Output\n }], panelCollapsing: [{\n type: Output\n }], panelCollapsed: [{\n type: Output\n }], _panels: [{\n type: ContentChildren,\n args: [IgxExpansionPanelComponent]\n }] } });\n\n/**\n * @hidden\n */\nclass IgxAccordionModule {\n}\nIgxAccordionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAccordionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxAccordionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAccordionModule, declarations: [IgxAccordionComponent], imports: [IgxExpansionPanelModule,\n CommonModule], exports: [IgxAccordionComponent,\n IgxExpansionPanelModule] });\nIgxAccordionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAccordionModule, imports: [IgxExpansionPanelModule,\n CommonModule, IgxExpansionPanelModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAccordionModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxAccordionComponent\n ],\n imports: [\n IgxExpansionPanelModule,\n CommonModule,\n ],\n exports: [\n IgxAccordionComponent,\n IgxExpansionPanelModule\n ]\n }]\n }] });\n\nlet NEXT_ID$m = 0;\n/**\n * Determines the igxBadge type\n */\nconst IgxBadgeType = mkenum({\n PRIMARY: 'primary',\n INFO: 'info',\n SUCCESS: 'success',\n WARNING: 'warning',\n ERROR: 'error'\n});\n/**\n * Badge provides visual notifications used to decorate avatars, menus, etc.\n *\n * @igxModule IgxBadgeModule\n *\n * @igxTheme igx-badge-theme\n *\n * @igxKeywords badge, icon, notification\n *\n * @igxGroup Data Entry & Display\n *\n * @remarks\n * The Ignite UI Badge is used to decorate avatars, navigation menus, or other components in the\n * application when visual notification is needed. They are usually designed as icons with a predefined\n * style to communicate information, success, warnings, or errors.\n *\n * @example\n * ```html\n * \n * \n * \n */\nclass IgxBadgeComponent {\n constructor() {\n /**\n * Sets/gets the `id` of the badge.\n *\n * @remarks\n * If not set, the `id` will have value `\"igx-badge-0\"`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.id = `igx-badge-${NEXT_ID$m++}`;\n /**\n * Sets/gets the type of the badge.\n *\n * @remarks\n * Allowed values are `primary`, `info`, `success`, `warning`, `error`.\n * Providing an invalid value won't display a badge.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.type = IgxBadgeType.PRIMARY;\n /**\n * Sets/gets the value to be displayed inside the badge.\n *\n * @remarks\n * If an `icon` property is already set the `icon` will be displayed.\n * If neither a `value` nor an `icon` is set the content of the badge will be empty.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.value = '';\n /**\n * Sets/gets the role attribute value.\n *\n * @example\n * ```typescript\n * @ViewChild(\"MyBadge\", { read: IgxBadgeComponent })\n * public badge: IgxBadgeComponent;\n *\n * badge.role = 'status';\n * ```\n */\n this.role = 'status';\n /**\n * Sets/gets the the css class to use on the badge.\n *\n * @example\n * ```typescript\n * @ViewChild(\"MyBadge\", { read: IgxBadgeComponent })\n * public badge: IgxBadgeComponent;\n *\n * badge.cssClass = 'my-badge-class';\n * ```\n */\n this.cssClass = 'igx-badge';\n /**\n * Sets a square shape to the badge, if `shape` is set to `square`.\n * By default the shape of the badge is rounded.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.shape = 'rounded';\n /**\n * Sets/gets the aria-label attribute value.\n *\n * @example\n * ```typescript\n * @ViewChild(\"MyBadge\", { read: IgxBadgeComponent })\n * public badge: IgxBadgeComponent;\n *\n * badge.label = 'badge';\n * ```\n */\n this.label = 'badge';\n }\n /** @hidden @internal */\n get _squareShape() {\n return this.shape === 'square';\n }\n /**\n * Defines a human-readable, accessor, author-localized description for\n * the `type` and the `icon` or `value` of the element.\n *\n * @hidden\n * @internal\n */\n get roleDescription() {\n if (this.icon) {\n return this.type + ' type badge with icon type ' + this.icon;\n }\n else if (this.value || this.value === 0) {\n return this.type + ' badge type with value ' + this.value;\n }\n return this.type + ' badge type without value';\n }\n get infoClass() {\n return this.type === IgxBadgeType.INFO;\n }\n get successClass() {\n return this.type === IgxBadgeType.SUCCESS;\n }\n get warningClass() {\n return this.type === IgxBadgeType.WARNING;\n }\n get errorClass() {\n return this.type === IgxBadgeType.ERROR;\n }\n}\nIgxBadgeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxBadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxBadgeComponent, selector: \"igx-badge\", inputs: { id: \"id\", type: \"type\", value: \"value\", icon: \"icon\", shape: \"shape\" }, host: { properties: { \"attr.id\": \"this.id\", \"attr.role\": \"this.role\", \"class.igx-badge\": \"this.cssClass\", \"class.igx-badge--square\": \"this._squareShape\", \"attr.aria-label\": \"this.label\", \"attr.aria-roledescription\": \"this.roleDescription\", \"class.igx-badge--info\": \"this.infoClass\", \"class.igx-badge--success\": \"this.successClass\", \"class.igx-badge--warning\": \"this.warningClass\", \"class.igx-badge--error\": \"this.errorClass\" } }, ngImport: i0, template: \"{{value}}\\n{{icon}}\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBadgeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-badge', template: \"{{value}}\\n{{icon}}\\n\" }]\n }], propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], type: [{\n type: Input\n }], value: [{\n type: Input\n }], icon: [{\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-badge']\n }], shape: [{\n type: Input\n }], _squareShape: [{\n type: HostBinding,\n args: ['class.igx-badge--square']\n }], label: [{\n type: HostBinding,\n args: ['attr.aria-label']\n }], roleDescription: [{\n type: HostBinding,\n args: ['attr.aria-roledescription']\n }], infoClass: [{\n type: HostBinding,\n args: ['class.igx-badge--info']\n }], successClass: [{\n type: HostBinding,\n args: ['class.igx-badge--success']\n }], warningClass: [{\n type: HostBinding,\n args: ['class.igx-badge--warning']\n }], errorClass: [{\n type: HostBinding,\n args: ['class.igx-badge--error']\n }] } });\n/**\n * @hidden\n */\nclass IgxBadgeModule {\n}\nIgxBadgeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBadgeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxBadgeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBadgeModule, declarations: [IgxBadgeComponent], imports: [CommonModule, IgxIconModule], exports: [IgxBadgeComponent] });\nIgxBadgeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBadgeModule, imports: [CommonModule, IgxIconModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBadgeModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxBadgeComponent],\n exports: [IgxBadgeComponent],\n imports: [CommonModule, IgxIconModule]\n }]\n }] });\n\n/* eslint-disable @angular-eslint/directive-selector */\nclass IgxBannerActionsDirective {\n}\nIgxBannerActionsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBannerActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxBannerActionsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxBannerActionsDirective, selector: \"igx-banner-actions\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBannerActionsDirective, decorators: [{\n type: Directive,\n args: [{ selector: 'igx-banner-actions' }]\n }] });\n\n/**\n * **Ignite UI for Angular Banner** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/banner.html)\n *\n * The Ignite UI Banner provides a highly template-able and easy to use banner that can be shown in your application.\n *\n * Usage:\n *\n * ```html\n * \n * Our privacy settings have changed.\n * \n * \n * \n * \n * \n * ```\n */\nclass IgxBannerComponent {\n /** @hidden */\n get useDefaultTemplate() {\n return !this._bannerActionTemplate;\n }\n /**\n * Get the animation settings used by the banner open/close methods\n * ```typescript\n * let currentAnimations: ToggleAnimationSettings = banner.animationSettings\n * ```\n */\n get animationSettings() {\n return this._animationSettings ? this._animationSettings : this._expansionPanel.animationSettings;\n }\n /**\n * Gets/Sets the resource strings.\n *\n * @remarks\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n get resourceStrings() {\n if (!this._resourceStrings) {\n this._resourceStrings = CurrentResourceStrings.BannerResourceStrings;\n }\n return this._resourceStrings;\n }\n /**\n * Set the animation settings used by the banner open/close methods\n * ```typescript\n * import { slideInLeft, slideOutRight } from 'igniteui-angular';\n * ...\n * banner.animationSettings: ToggleAnimationSettings = { openAnimation: slideInLeft, closeAnimation: slideOutRight };\n * ```\n */\n set animationSettings(settings) {\n this._animationSettings = settings;\n }\n /**\n * Gets whether banner is collapsed\n *\n * ```typescript\n * const isCollapsed: boolean = banner.collapsed;\n * ```\n */\n get collapsed() {\n return this._expansionPanel.collapsed;\n }\n /**\n * Returns the native element of the banner component\n * ```typescript\n * const myBannerElement: HTMLElement = banner.element;\n * ```\n */\n get element() {\n return this.elementRef.nativeElement;\n }\n /**\n * @hidden\n */\n get displayStyle() {\n return this.collapsed ? '' : 'block';\n }\n constructor(elementRef) {\n this.elementRef = elementRef;\n /**\n * Fires after the banner shows up\n * ```typescript\n * public handleOpened(event) {\n * ...\n * }\n * ```\n * ```html\n * \n * ```\n */\n this.opened = new EventEmitter();\n /**\n * Fires before the banner shows up\n * ```typescript\n * public handleOpening(event) {\n * ...\n * }\n * ```\n * ```html\n * \n * ```\n */\n this.opening = new EventEmitter();\n /**\n * Fires after the banner hides\n * ```typescript\n * public handleClosed(event) {\n * ...\n * }\n * ```\n * ```html\n * \n * ```\n */\n this.closed = new EventEmitter();\n /**\n * Fires before the banner hides\n * ```typescript\n * public handleClosing(event) {\n * ...\n * }\n * ```\n * ```html\n * \n * ```\n */\n this.closing = new EventEmitter();\n this.cssClass = 'igx-banner-host';\n }\n /**\n * Opens the banner\n *\n * ```typescript\n * myBanner.open();\n * ```\n *\n * ```html\n * \n * ...\n * \n * \n * ```\n */\n open(event) {\n this._bannerEvent = { banner: this, owner: this, event };\n const openingArgs = {\n banner: this,\n owner: this,\n event,\n cancel: false\n };\n this.opening.emit(openingArgs);\n if (openingArgs.cancel) {\n return;\n }\n this._expansionPanel.open(event);\n }\n /**\n * Closes the banner\n *\n * ```typescript\n * myBanner.close();\n * ```\n *\n * ```html\n * \n * ...\n * \n * \n * ```\n */\n close(event) {\n this._bannerEvent = { banner: this, owner: this, event };\n const closingArgs = {\n banner: this,\n owner: this,\n event,\n cancel: false\n };\n this.closing.emit(closingArgs);\n if (closingArgs.cancel) {\n return;\n }\n this._expansionPanel.close(event);\n }\n /**\n * Toggles the banner\n *\n * ```typescript\n * myBanner.toggle();\n * ```\n *\n * ```html\n * \n * ...\n * \n * \n * ```\n */\n toggle(event) {\n if (this.collapsed) {\n this.open(event);\n }\n else {\n this.close(event);\n }\n }\n /** @hidden */\n onExpansionPanelOpen() {\n this.opened.emit(this._bannerEvent);\n }\n /** @hidden */\n onExpansionPanelClose() {\n this.closed.emit(this._bannerEvent);\n }\n}\nIgxBannerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBannerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxBannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxBannerComponent, selector: \"igx-banner\", inputs: { animationSettings: \"animationSettings\", resourceStrings: \"resourceStrings\" }, outputs: { opened: \"opened\", opening: \"opening\", closed: \"closed\", closing: \"closing\" }, host: { properties: { \"class\": \"this.cssClass\", \"style.display\": \"this.displayStyle\" } }, queries: [{ propertyName: \"bannerIcon\", first: true, predicate: IgxIconComponent, descendants: true }, { propertyName: \"_bannerActionTemplate\", first: true, predicate: IgxBannerActionsDirective, descendants: true }], viewQueries: [{ propertyName: \"_expansionPanel\", first: true, predicate: [\"expansionPanel\"], descendants: true, static: 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\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxExpansionPanelComponent, selector: \"igx-expansion-panel\", inputs: [\"animationSettings\", \"id\", \"collapsed\"], outputs: [\"collapsedChange\", \"contentCollapsing\", \"contentCollapsed\", \"contentExpanding\", \"contentExpanded\"] }, { kind: \"component\", type: IgxExpansionPanelBodyComponent, selector: \"igx-expansion-panel-body\", inputs: [\"role\", \"label\", \"labelledBy\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBannerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-banner', template: \"\\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { bannerIcon: [{\n type: ContentChild,\n args: [IgxIconComponent]\n }], opened: [{\n type: Output\n }], opening: [{\n type: Output\n }], closed: [{\n type: Output\n }], closing: [{\n type: Output\n }], animationSettings: [{\n type: Input\n }], resourceStrings: [{\n type: Input\n }], cssClass: [{\n type: HostBinding,\n args: ['class']\n }], displayStyle: [{\n type: HostBinding,\n args: ['style.display']\n }], _expansionPanel: [{\n type: ViewChild,\n args: ['expansionPanel', { static: true }]\n }], _bannerActionTemplate: [{\n type: ContentChild,\n args: [IgxBannerActionsDirective]\n }] } });\n/**\n * @hidden\n */\nclass IgxBannerModule {\n}\nIgxBannerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBannerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxBannerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBannerModule, declarations: [IgxBannerComponent, IgxBannerActionsDirective], imports: [CommonModule, IgxExpansionPanelModule, IgxIconModule, IgxButtonModule, IgxRippleModule], exports: [IgxBannerComponent, IgxBannerActionsDirective] });\nIgxBannerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBannerModule, imports: [CommonModule, IgxExpansionPanelModule, IgxIconModule, IgxButtonModule, IgxRippleModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBannerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxBannerComponent, IgxBannerActionsDirective],\n exports: [IgxBannerComponent, IgxBannerActionsDirective],\n imports: [CommonModule, IgxExpansionPanelModule, IgxIconModule, IgxButtonModule, IgxRippleModule]\n }]\n }] });\n\n/**\n * Determines the Button Group alignment\n */\nconst ButtonGroupAlignment = mkenum({\n horizontal: 'horizontal',\n vertical: 'vertical'\n});\nlet NEXT_ID$l = 0;\n/**\n * **Ignite UI for Angular Button Group** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/buttongroup.html)\n *\n * The Ignite UI Button Group displays a group of buttons either vertically or horizontally. The group supports\n * single, multiple and toggle selection.\n *\n * Example:\n * ```html\n * \n * \n * ```\n * The `fontOptions` value shown above is defined as:\n * ```typescript\n * this.fontOptions = [\n * { icon: 'format_bold', selected: false },\n * { icon: 'format_italic', selected: false },\n * { icon: 'format_underlined', selected: false }];\n * ```\n */\nclass IgxButtonGroupComponent extends DisplayDensityBase {\n /**\n * A collection containing all buttons inside the button group.\n */\n get buttons() {\n return [...this.viewButtons.toArray(), ...this.templateButtons.toArray()];\n }\n /**\n * Allows you to set a style using the `itemContentCssClass` input.\n * The value should be the CSS class name that will be applied to the button group.\n * ```typescript\n * public style1 = \"styleClass\";\n * //..\n * ```\n * ```html\n * \n * ```\n */\n set itemContentCssClass(value) {\n this._itemContentCssClass = value || this._itemContentCssClass;\n }\n /**\n * Returns the CSS class of the item content of the `IgxButtonGroup`.\n * ```typescript\n * @ViewChild(\"MyChild\")\n * public buttonG: IgxButtonGroupComponent;\n * ngAfterViewInit(){\n * let buttonSelect = this.buttonG.itemContentCssClass;\n * }\n * ```\n */\n get itemContentCssClass() {\n return this._itemContentCssClass;\n }\n /**\n * An @Input property that allows you to disable the `igx-buttongroup` component. By default it's false.\n * ```html\n * \n * ```\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n if (this._disabled !== value) {\n this._disabled = value;\n if (this.viewButtons && this.templateButtons) {\n this.buttons.forEach((b) => (b.disabled = this._disabled));\n }\n }\n }\n /**\n * Allows you to set the button group alignment.\n * Available options are `ButtonGroupAlignment.horizontal` (default) and `ButtonGroupAlignment.vertical`.\n * ```typescript\n * public alignment = ButtonGroupAlignment.vertical;\n * //..\n * ```\n * ```html\n * \n * ```\n */\n set alignment(value) {\n this._isVertical = value === ButtonGroupAlignment.vertical;\n }\n /**\n * Returns the alignment of the `igx-buttongroup`.\n * ```typescript\n * @ViewChild(\"MyChild\")\n * public buttonG: IgxButtonGroupComponent;\n * ngAfterViewInit(){\n * let buttonAlignment = this.buttonG.alignment;\n * }\n * ```\n */\n get alignment() {\n return this._isVertical ? ButtonGroupAlignment.vertical : ButtonGroupAlignment.horizontal;\n }\n /**\n * Returns true if the `igx-buttongroup` alignment is vertical.\n * Note that in order for the accessor to work correctly the property should be set explicitly.\n * ```html\n * \n * ```\n * ```typescript\n * //...\n * @ViewChild(\"MyChild\")\n * private buttonG: IgxButtonGroupComponent;\n * ngAfterViewInit(){\n * let orientation = this.buttonG.isVertical;\n * }\n * ```\n */\n get isVertical() {\n return this._isVertical;\n }\n constructor(_cdr, _renderer, _displayDensityOptions) {\n super(_displayDensityOptions);\n this._cdr = _cdr;\n this._renderer = _renderer;\n this._displayDensityOptions = _displayDensityOptions;\n /**\n * An @Input property that sets the value of the `id` attribute. If not set it will be automatically generated.\n * ```html\n * \n * ```\n */\n this.id = `igx-buttongroup-${NEXT_ID$l++}`;\n /**\n * @hidden\n */\n this.zIndex = 0;\n /**\n * An @Input property that enables selecting multiple buttons. By default, multi-selection is false.\n * ```html\n * \n * ```\n */\n this.multiSelection = false;\n /**\n * An @Ouput property that emits an event when a button is selected.\n * ```typescript\n * @ViewChild(\"toast\")\n * private toast: IgxToastComponent;\n * public selectedHandler(buttongroup) {\n * this.toast.open()\n * }\n * //...\n * ```\n * ```html\n * \n * You have made a selection!\n * ```\n */\n this.selected = new EventEmitter();\n /**\n * An @Ouput property that emits an event when a button is deselected.\n * ```typescript\n * @ViewChild(\"toast\")\n * private toast: IgxToastComponent;\n * public deselectedHandler(buttongroup){\n * this.toast.open()\n * }\n * //...\n * ```\n * ```html\n * #MyChild [multiSelection]=\"multi\" (deselected)=\"deselectedHandler($event)\">\n * You have deselected a button!\n * ```\n */\n this.deselected = new EventEmitter();\n /**\n * @hidden\n */\n this.selectedIndexes = [];\n this.buttonClickNotifier$ = new Subject();\n this.buttonSelectedNotifier$ = new Subject();\n this.queryListNotifier$ = new Subject();\n this._disabled = false;\n }\n /**\n * Gets the selected button/buttons.\n * ```typescript\n * @ViewChild(\"MyChild\")\n * private buttonG: IgxButtonGroupComponent;\n * ngAfterViewInit(){\n * let selectedButton = this.buttonG.selectedButtons;\n * }\n * ```\n */\n get selectedButtons() {\n return this.buttons.filter((_, i) => this.selectedIndexes.indexOf(i) !== -1);\n }\n /**\n * Selects a button by its index.\n * ```typescript\n * @ViewChild(\"MyChild\")\n * private buttonG: IgxButtonGroupComponent;\n * ngAfterViewInit(){\n * this.buttonG.selectButton(2);\n * this.cdr.detectChanges();\n * }\n * ```\n *\n * @memberOf {@link IgxButtonGroupComponent}\n */\n selectButton(index) {\n if (index >= this.buttons.length || index < 0) {\n return;\n }\n const button = this.buttons[index];\n button.select();\n }\n /**\n * @hidden\n * @internal\n */\n updateSelected(index) {\n const button = this.buttons[index];\n if (this.selectedIndexes.indexOf(index) === -1) {\n this.selectedIndexes.push(index);\n this.selected.emit({ button, index });\n }\n this._renderer.setAttribute(button.nativeElement, 'aria-pressed', 'true');\n this._renderer.addClass(button.nativeElement, 'igx-button-group__item--selected');\n const indexInViewButtons = this.viewButtons.toArray().indexOf(button);\n if (indexInViewButtons !== -1) {\n this.values[indexInViewButtons].selected = true;\n }\n // deselect other buttons if multiSelection is not enabled\n if (!this.multiSelection && this.selectedIndexes.length > 1) {\n this.buttons.forEach((_, i) => {\n if (i !== index && this.selectedIndexes.indexOf(i) !== -1) {\n this.deselectButton(i);\n }\n });\n }\n }\n /**\n * Deselects a button by its index.\n * ```typescript\n * @ViewChild(\"MyChild\")\n * private buttonG: IgxButtonGroupComponent;\n * ngAfterViewInit(){\n * this.buttonG.deselectButton(2);\n * this.cdr.detectChanges();\n * }\n * ```\n *\n * @memberOf {@link IgxButtonGroupComponent}\n */\n deselectButton(index) {\n if (index >= this.buttons.length || index < 0) {\n return;\n }\n const button = this.buttons[index];\n this.selectedIndexes.splice(this.selectedIndexes.indexOf(index), 1);\n this._renderer.setAttribute(button.nativeElement, 'aria-pressed', 'false');\n this._renderer.removeClass(button.nativeElement, 'igx-button-group__item--selected');\n button.deselect();\n const indexInViewButtons = this.viewButtons.toArray().indexOf(button);\n if (indexInViewButtons !== -1) {\n this.values[indexInViewButtons].selected = false;\n }\n this.deselected.emit({ button, index });\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n this.templateButtons.forEach((button) => {\n if (!button.initialDensity) {\n button.displayDensity = this.displayDensity;\n }\n });\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n const initButtons = () => {\n // Cancel any existing buttonClick subscriptions\n this.buttonClickNotifier$.next();\n this.selectedIndexes.splice(0, this.selectedIndexes.length);\n // initial configuration\n this.buttons.forEach((button, index) => {\n const buttonElement = button.nativeElement;\n this._renderer.addClass(buttonElement, 'igx-button-group__item');\n if (this.disabled) {\n button.disabled = true;\n }\n if (button.selected) {\n this.updateSelected(index);\n }\n button.buttonClick.pipe(takeUntil(this.buttonClickNotifier$)).subscribe((_) => this._clickHandler(index));\n button.buttonSelected\n .pipe(takeUntil(this.buttonSelectedNotifier$))\n .subscribe((_) => this.updateSelected(index));\n });\n };\n this.viewButtons.changes.pipe(takeUntil(this.queryListNotifier$)).subscribe(() => initButtons());\n this.templateButtons.changes.pipe(takeUntil(this.queryListNotifier$)).subscribe(() => initButtons());\n initButtons();\n this._cdr.detectChanges();\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.buttonClickNotifier$.next();\n this.buttonClickNotifier$.complete();\n this.buttonSelectedNotifier$.next();\n this.buttonSelectedNotifier$.complete();\n this.queryListNotifier$.next();\n this.queryListNotifier$.complete();\n }\n /**\n * @hidden\n */\n _clickHandler(i) {\n if (this.selectedIndexes.indexOf(i) === -1) {\n this.selectButton(i);\n }\n else {\n this.deselectButton(i);\n }\n }\n}\nIgxButtonGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxButtonGroupComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxButtonGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxButtonGroupComponent, selector: \"igx-buttongroup\", inputs: { id: \"id\", itemContentCssClass: \"itemContentCssClass\", multiSelection: \"multiSelection\", values: \"values\", disabled: \"disabled\", alignment: \"alignment\" }, outputs: { selected: \"selected\", deselected: \"deselected\" }, host: { properties: { \"attr.id\": \"this.id\", \"style.zIndex\": \"this.zIndex\" } }, queries: [{ propertyName: \"templateButtons\", predicate: IgxButtonDirective }], viewQueries: [{ propertyName: \"viewButtons\", predicate: IgxButtonDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: \"
    \\n \\n \\n
    \\n\", dependencies: [{ kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxButtonGroupComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-buttongroup', template: \"
    \\n \\n \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }];\n }, propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], zIndex: [{\n type: HostBinding,\n args: ['style.zIndex']\n }], itemContentCssClass: [{\n type: Input\n }], multiSelection: [{\n type: Input\n }], values: [{\n type: Input\n }], disabled: [{\n type: Input\n }], alignment: [{\n type: Input\n }], selected: [{\n type: Output\n }], deselected: [{\n type: Output\n }], viewButtons: [{\n type: ViewChildren,\n args: [IgxButtonDirective]\n }], templateButtons: [{\n type: ContentChildren,\n args: [IgxButtonDirective]\n }] } });\n/**\n * @hidden\n */\nclass IgxButtonGroupModule {\n}\nIgxButtonGroupModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxButtonGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxButtonGroupModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxButtonGroupModule, declarations: [IgxButtonGroupComponent], imports: [IgxButtonModule, CommonModule, IgxRippleModule, IgxIconModule], exports: [IgxButtonGroupComponent] });\nIgxButtonGroupModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxButtonGroupModule, imports: [IgxButtonModule, CommonModule, IgxRippleModule, IgxIconModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxButtonGroupModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxButtonGroupComponent],\n exports: [IgxButtonGroupComponent],\n imports: [IgxButtonModule, CommonModule, IgxRippleModule, IgxIconModule]\n }]\n }] });\n\nvar DateRangeType;\n(function (DateRangeType) {\n DateRangeType[DateRangeType[\"After\"] = 0] = \"After\";\n DateRangeType[DateRangeType[\"Before\"] = 1] = \"Before\";\n DateRangeType[DateRangeType[\"Between\"] = 2] = \"Between\";\n DateRangeType[DateRangeType[\"Specific\"] = 3] = \"Specific\";\n DateRangeType[DateRangeType[\"Weekdays\"] = 4] = \"Weekdays\";\n DateRangeType[DateRangeType[\"Weekends\"] = 5] = \"Weekends\";\n})(DateRangeType || (DateRangeType = {}));\n\n/**\n * @hidden\n */\nvar TimeDeltaInterval;\n(function (TimeDeltaInterval) {\n TimeDeltaInterval[\"Month\"] = \"month\";\n TimeDeltaInterval[\"Year\"] = \"year\";\n})(TimeDeltaInterval || (TimeDeltaInterval = {}));\nconst MDAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst FEBRUARY = 1;\nconst range = (start = 0, stop, step = 1) => {\n const res = [];\n const cur = (stop === undefined) ? 0 : start;\n const max = (stop === undefined) ? start : stop;\n for (let i = cur; step < 0 ? i > max : i < max; i += step) {\n res.push(i);\n }\n return res;\n};\n/**\n * Returns true for leap years, false for non-leap years.\n *\n * @export\n * @param year\n * @returns\n */\nconst isLeap = (year) => (year % 4 === 0) && ((year % 100 !== 0) || (year % 400 === 0));\nconst weekDay = (year, month, day) => new Date(year, month, day).getDay();\n/**\n * Return weekday and number of days for year, month.\n *\n * @export\n * @param year\n * @param month\n * @returns\n */\nconst monthRange = (year, month) => {\n if ((month < 0) || (month > 11)) {\n throw new Error('Invalid month specified');\n }\n const day = weekDay(year, month, 1);\n let nDays = MDAYS[month];\n if ((month === FEBRUARY) && (isLeap(year))) {\n nDays++;\n }\n return [day, nDays];\n};\nconst isDateInRanges = (date, ranges) => {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n const dateInMs = date.getTime();\n if (!ranges) {\n return false;\n }\n for (const descriptor of ranges) {\n const dRanges = descriptor.dateRange ? descriptor.dateRange.map(r => new Date(r.getFullYear(), r.getMonth(), r.getDate())) : undefined;\n switch (descriptor.type) {\n case (DateRangeType.After):\n if (dateInMs > dRanges[0].getTime()) {\n return true;\n }\n break;\n case (DateRangeType.Before):\n if (dateInMs < dRanges[0].getTime()) {\n return true;\n }\n break;\n case (DateRangeType.Between):\n const dRange = dRanges.map(d => d.getTime());\n const min = Math.min(dRange[0], dRange[1]);\n const max = Math.max(dRange[0], dRange[1]);\n if (dateInMs >= min && dateInMs <= max) {\n return true;\n }\n break;\n case (DateRangeType.Specific):\n const datesInMs = dRanges.map(d => d.getTime());\n for (const specificDateInMs of datesInMs) {\n if (dateInMs === specificDateInMs) {\n return true;\n }\n }\n break;\n case (DateRangeType.Weekdays):\n const day = date.getDay();\n if (day % 6 !== 0) {\n return true;\n }\n break;\n case (DateRangeType.Weekends):\n const weekday = date.getDay();\n if (weekday % 6 === 0) {\n return true;\n }\n break;\n default:\n return false;\n }\n }\n return false;\n};\nvar WEEKDAYS;\n(function (WEEKDAYS) {\n WEEKDAYS[WEEKDAYS[\"SUNDAY\"] = 0] = \"SUNDAY\";\n WEEKDAYS[WEEKDAYS[\"MONDAY\"] = 1] = \"MONDAY\";\n WEEKDAYS[WEEKDAYS[\"TUESDAY\"] = 2] = \"TUESDAY\";\n WEEKDAYS[WEEKDAYS[\"WEDNESDAY\"] = 3] = \"WEDNESDAY\";\n WEEKDAYS[WEEKDAYS[\"THURSDAY\"] = 4] = \"THURSDAY\";\n WEEKDAYS[WEEKDAYS[\"FRIDAY\"] = 5] = \"FRIDAY\";\n WEEKDAYS[WEEKDAYS[\"SATURDAY\"] = 6] = \"SATURDAY\";\n})(WEEKDAYS || (WEEKDAYS = {}));\nclass Calendar {\n constructor(firstWeekDay = WEEKDAYS.SUNDAY) {\n this._firstWeekDay = firstWeekDay;\n }\n get firstWeekDay() {\n return this._firstWeekDay % 7;\n }\n set firstWeekDay(value) {\n this._firstWeekDay = value;\n }\n /**\n * Returns an array of weekdays for one week starting\n * with the currently set `firstWeekDay`\n *\n * this.firstWeekDay = 0 (Sunday) --> [0, 1, 2, 3, 4, 5, 6]\n * this.firstWeekDay = 1 (Monday) --> [1, 2, 3, 4, 5, 6, 0]\n *\n * @returns\n *\n * @memberof Calendar\n */\n weekdays() {\n const res = [];\n for (const i of range(this.firstWeekDay, this.firstWeekDay + 7)) {\n res.push(i % 7);\n }\n return res;\n }\n /**\n * Returns the date values for one month. It will always iterate throught\n * complete weeks, so it will contain dates outside the specified month.\n *\n * @param year\n * @param month\n * @param boolean\n * @returns\n *\n * @memberof Calendar\n */\n monthdates(year, month, extraWeek = false) {\n let date = new Date(year, month, 1);\n let days = (date.getDay() - this.firstWeekDay) % 7;\n if (days < 0) {\n days = 7 - Math.abs(days);\n }\n date = this.timedelta(date, 'day', -days);\n const res = [];\n let value;\n while (true) {\n value = this.generateICalendarDate(date, year, month);\n res.push(value);\n date = this.timedelta(date, 'day', 1);\n if ((date.getMonth() !== month) && (date.getDay() === this.firstWeekDay)) {\n if (extraWeek && res.length <= 35) {\n for (const _ of range(0, 7)) {\n value = this.generateICalendarDate(date, year, month);\n res.push(value);\n date = this.timedelta(date, 'day', 1);\n }\n }\n break;\n }\n }\n return res;\n }\n /**\n * Returns a matrix (array of arrays) representing a month's calendar.\n * Each row represents a full week; week entries are ICalendarDate objects.\n *\n * @param year\n * @param month\n * @returns\n *\n * @memberof Calendar\n */\n monthdatescalendar(year, month, extraWeek = false) {\n const dates = this.monthdates(year, month, extraWeek);\n const res = [];\n for (const i of range(0, dates.length, 7)) {\n res.push(dates.slice(i, i + 7));\n }\n return res;\n }\n timedelta(date, interval, units) {\n const ret = new Date(date);\n const checkRollover = () => {\n if (ret.getDate() !== date.getDate()) {\n ret.setDate(0);\n }\n };\n switch (interval.toLowerCase()) {\n case 'year':\n ret.setFullYear(ret.getFullYear() + units);\n checkRollover();\n break;\n case 'quarter':\n ret.setMonth(ret.getMonth() + 3 * units);\n checkRollover();\n break;\n case 'month':\n ret.setMonth(ret.getMonth() + units);\n checkRollover();\n break;\n case 'week':\n ret.setDate(ret.getDate() + 7 * units);\n break;\n case 'day':\n ret.setDate(ret.getDate() + units);\n break;\n case 'hour':\n ret.setTime(ret.getTime() + units * 3600000);\n break;\n case 'minute':\n ret.setTime(ret.getTime() + units * 60000);\n break;\n case 'second':\n ret.setTime(ret.getTime() + units * 1000);\n break;\n default:\n throw new Error('Invalid interval specifier');\n }\n return ret;\n }\n formatToParts(date, locale, options, parts) {\n const formatter = new Intl.DateTimeFormat(locale, options);\n const result = {\n date,\n full: formatter.format(date)\n };\n if (formatter.formatToParts) {\n const formattedParts = formatter.formatToParts(date);\n const toType = (partType) => {\n const index = formattedParts.findIndex(({ type }) => type === partType);\n const o = { value: '', literal: '', combined: '' };\n if (partType === 'era' && index > -1) {\n o.value = formattedParts[index].value;\n return o;\n }\n else if (partType === 'era' && index === -1) {\n return o;\n }\n o.value = formattedParts[index].value;\n o.literal = formattedParts[index + 1] ? formattedParts[index + 1].value : '';\n o.combined = [o.value, o.literal].join('');\n return o;\n };\n for (const each of parts) {\n result[each] = toType(each);\n }\n }\n else {\n for (const each of parts) {\n result[each] = { value: '', literal: '', combined: '' };\n }\n }\n return result;\n }\n getFirstViewDate(date, interval, activeViewIdx) {\n return this.timedelta(date, interval, -activeViewIdx);\n }\n getDateByView(date, interval, activeViewIdx) {\n return this.timedelta(date, interval, activeViewIdx);\n }\n getNextMonth(date) {\n return this.timedelta(date, TimeDeltaInterval.Month, 1);\n }\n getPrevMonth(date) {\n return this.timedelta(date, TimeDeltaInterval.Month, -1);\n }\n getNextYear(date) {\n return this.timedelta(date, TimeDeltaInterval.Year, 1);\n }\n getPrevYear(date) {\n return this.timedelta(date, TimeDeltaInterval.Year, -1);\n }\n getWeekNumber(date) {\n const firstJan = new Date(date.getFullYear(), 0, 1).getTime();\n const today = new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n const dayInMilSeconds = 86400000;\n const dayOfYear = ((today - firstJan + 1) / dayInMilSeconds);\n return Math.ceil(dayOfYear / 7);\n }\n generateICalendarDate(date, year, month) {\n return {\n date,\n isCurrentMonth: date.getFullYear() === year && date.getMonth() === month,\n isNextMonth: this.isNextMonth(date, year, month),\n isPrevMonth: this.isPreviousMonth(date, year, month)\n };\n }\n isPreviousMonth(date, year, month) {\n if (date.getFullYear() === year) {\n return date.getMonth() < month;\n }\n return date.getFullYear() < year;\n }\n isNextMonth(date, year, month) {\n if (date.getFullYear() === year) {\n return date.getMonth() > month;\n }\n return date.getFullYear() > year;\n }\n}\n\n/**\n * Sets the selection type - single, multi or range.\n */\nconst CalendarSelection = mkenum({\n SINGLE: 'single',\n MULTI: 'multi',\n RANGE: 'range'\n});\nvar ScrollMonth;\n(function (ScrollMonth) {\n ScrollMonth[\"PREV\"] = \"prev\";\n ScrollMonth[\"NEXT\"] = \"next\";\n ScrollMonth[\"NONE\"] = \"none\";\n})(ScrollMonth || (ScrollMonth = {}));\n/** @hidden @internal */\nclass IgxCalendarBaseDirective {\n /**\n * An accessor that sets the resource strings.\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /**\n * An accessor that returns the resource strings.\n */\n get resourceStrings() {\n if (!this._resourceStrings) {\n this._resourceStrings = CurrentResourceStrings.CalendarResStrings;\n }\n return this._resourceStrings;\n }\n /**\n * Gets the start day of the week.\n * Can return a numeric or an enum representation of the week day.\n * If not set, defaults to the first day of the week for the application locale.\n */\n get weekStart() {\n return this.calendarModel.firstWeekDay;\n }\n /**\n * Sets the start day of the week.\n * Can be assigned to a numeric value or to `WEEKDAYS` enum value.\n */\n set weekStart(value) {\n this._weekStart = value;\n this.calendarModel.firstWeekDay = value;\n }\n /**\n * Gets the `locale` of the calendar.\n * If not set, defaults to application's locale.\n */\n get locale() {\n return this._locale;\n }\n /**\n * Sets the `locale` of the calendar.\n * Expects a valid BCP 47 language tag.\n */\n set locale(value) {\n this._locale = value;\n // if value is not a valid BCP 47 tag, set it back to _localeId\n try {\n getLocaleFirstDayOfWeek(this._locale);\n }\n catch (e) {\n this._locale = this._localeId;\n }\n // changing locale runtime needs to update the `weekStart` too, if `weekStart` is not explicitly set\n if (this._weekStart === undefined) {\n this.calendarModel.firstWeekDay = getLocaleFirstDayOfWeek(this._locale);\n }\n this.initFormatters();\n }\n /**\n * Gets the date format options of the days view.\n */\n get formatOptions() {\n return this._formatOptions;\n }\n /**\n * Sets the date format options of the days view.\n * Default is { day: 'numeric', month: 'short', weekday: 'short', year: 'numeric' }\n */\n set formatOptions(formatOptions) {\n this._formatOptions = Object.assign(this._formatOptions, formatOptions);\n this.initFormatters();\n }\n /**\n * Gets whether the `day`, `month` and `year` should be rendered\n * according to the locale and formatOptions, if any.\n */\n get formatViews() {\n return this._formatViews;\n }\n /**\n * Gets whether the `day`, `month` and `year` should be rendered\n * according to the locale and formatOptions, if any.\n */\n set formatViews(formatViews) {\n this._formatViews = Object.assign(this._formatViews, formatViews);\n }\n /**\n *\n * Gets the selection type.\n * Default value is `\"single\"`.\n * Changing the type of selection resets the currently\n * selected values if any.\n */\n get selection() {\n return this._selection;\n }\n /**\n * Sets the selection.\n */\n set selection(value) {\n switch (value) {\n case CalendarSelection.SINGLE:\n this.selectedDates = null;\n break;\n case CalendarSelection.MULTI:\n case CalendarSelection.RANGE:\n this.selectedDates = [];\n break;\n default:\n throw new Error('Invalid selection value');\n }\n this._onChangeCallback(this.selectedDates);\n this.rangeStarted = false;\n this._selection = value;\n }\n /**\n * Gets the selected date(s).\n *\n * When selection is set to `single`, it returns\n * a single `Date` object.\n * Otherwise it is an array of `Date` objects.\n */\n get value() {\n return this.selectedDates;\n }\n /**\n * Sets the selected date(s).\n *\n * When selection is set to `single`, it accepts\n * a single `Date` object.\n * Otherwise it is an array of `Date` objects.\n */\n set value(value) {\n if (!value || !!value && value.length === 0) {\n this.selectedDatesWithoutFocus = new Date();\n return;\n }\n if (!this.selectedDatesWithoutFocus) {\n const valueDate = value[0] ? Math.min.apply(null, value) : value;\n const date = this.getDateOnly(new Date(valueDate)).setDate(1);\n this.viewDate = new Date(date);\n }\n this.selectDate(value);\n this.selectedDatesWithoutFocus = value;\n }\n /**\n * Gets the date that is presented.\n * By default it is the current date.\n */\n get viewDate() {\n return this._viewDate;\n }\n /**\n * Sets the date that will be presented in the default view when the component renders.\n */\n set viewDate(value) {\n if (Array.isArray(value)) {\n return;\n }\n const validDate = this.validateDate(value);\n if (this._viewDate) {\n this.selectedDatesWithoutFocus = validDate;\n }\n const date = this.getDateOnly(validDate).setDate(1);\n this._viewDate = new Date(date);\n }\n /**\n * Gets the disabled dates descriptors.\n */\n get disabledDates() {\n return this._disabledDates;\n }\n /**\n * Sets the disabled dates' descriptors.\n * ```typescript\n * @ViewChild(\"MyCalendar\")\n * public calendar: IgxCalendarComponent;\n * ngOnInit(){\n * this.calendar.disabledDates = [\n * {type: DateRangeType.Between, dateRange: [new Date(\"2020-1-1\"), new Date(\"2020-1-15\")]},\n * {type: DateRangeType.Weekends}];\n * }\n * ```\n */\n set disabledDates(value) {\n this._disabledDates = value;\n }\n /**\n * Gets the special dates descriptors.\n */\n get specialDates() {\n return this._specialDates;\n }\n /**\n * Sets the special dates' descriptors.\n * ```typescript\n * @ViewChild(\"MyCalendar\")\n * public calendar: IgxCalendarComponent;\n * ngOnInit(){\n * this.calendar.specialDates = [\n * {type: DateRangeType.Between, dateRange: [new Date(\"2020-1-1\"), new Date(\"2020-1-15\")]},\n * {type: DateRangeType.Weekends}];\n * }\n * ```\n */\n set specialDates(value) {\n this._specialDates = value;\n }\n /**\n * @hidden\n */\n constructor(platform, _localeId) {\n this.platform = platform;\n this._localeId = _localeId;\n /**\n * Sets/gets whether the outside dates (dates that are out of the current month) will be hidden.\n * Default value is `false`.\n * ```html\n * \n * ```\n * ```typescript\n * let hideOutsideDays = this.calendar.hideOutsideDays;\n * ```\n */\n this.hideOutsideDays = false;\n /**\n * Emits an event when a date is selected.\n * Provides reference the `selectedDates` property.\n */\n this.selected = new EventEmitter();\n /**\n * Emits an event when the month in view is changed.\n * ```html\n * \n * ```\n * ```typescript\n * public viewDateChanged(event: IViewDateChangeEventArgs) {\n * let viewDate = event.currentValue;\n * }\n * ```\n */\n this.viewDateChanged = new EventEmitter();\n /**\n * Emits an event when the active view is changed.\n * ```html\n * \n * ```\n * ```typescript\n * public activeViewChanged(event: CalendarView) {\n * let activeView = event;\n * }\n * ```\n */\n this.activeViewChanged = new EventEmitter();\n /**\n * @hidden\n */\n this.rangeStarted = false;\n /**\n * @hidden\n */\n this.monthScrollDirection = ScrollMonth.NONE;\n /**\n * @hidden\n */\n this.scrollMonth$ = new Subject();\n /**\n * @hidden\n */\n this.stopMonthScroll$ = new Subject();\n /**\n * @hidden\n */\n this.startMonthScroll$ = new Subject();\n /**\n * @hidden\n */\n this.shiftKey = false;\n /**\n * @hidden\n */\n this._onTouchedCallback = noop;\n /**\n * @hidden\n */\n this._onChangeCallback = noop;\n /**\n * @hidden\n */\n this._selection = CalendarSelection.SINGLE;\n /** @hidden @internal */\n this._resourceStrings = CurrentResourceStrings.CalendarResStrings;\n /**\n * @hidden\n */\n this._formatOptions = {\n day: 'numeric',\n month: 'short',\n weekday: 'short',\n year: 'numeric'\n };\n /**\n * @hidden\n */\n this._formatViews = {\n day: false,\n month: true,\n year: false\n };\n this.calendarModel = new Calendar();\n this.locale = _localeId;\n this.viewDate = this.viewDate ? this.viewDate : new Date();\n this.initFormatters();\n }\n /**\n * Multi/Range selection with shift key\n *\n * @hidden\n * @internal\n */\n onPointerdown(event) {\n this.shiftKey = event.button === 0 && event.shiftKey;\n }\n /**\n * Performs deselection of date/dates, when selection is multi\n * Usually performed by the selectMultiple method, but leads to bug when multiple months are in view\n *\n * @hidden\n */\n deselectMultipleInMonth(value) {\n // deselect multiple dates from last clicked to shift clicked date (excluding)\n if (this.shiftKey) {\n let start;\n let end;\n [start, end] = this.lastSelectedDate.getTime() < value.getTime()\n ? [this.lastSelectedDate, value]\n : [value, this.lastSelectedDate];\n this.selectedDates = this.selectedDates.filter((date) => date.getTime() < start.getTime() || date.getTime() > end.getTime());\n this.selectedDates.push(value);\n }\n else {\n // deselect a single date\n const valueDateOnly = this.getDateOnly(value);\n this.selectedDates = this.selectedDates.filter((date) => date.getTime() !== valueDateOnly.getTime());\n }\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this._onTouchedCallback = fn;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.selectDate(value);\n }\n /**\n * Checks whether a date is disabled.\n *\n * @hidden\n */\n isDateDisabled(date) {\n if (this.disabledDates === null) {\n return false;\n }\n return isDateInRanges(date, this.disabledDates);\n }\n /**\n * Selects date(s) (based on the selection type).\n */\n selectDate(value) {\n if (value === null || value === undefined || (Array.isArray(value) && value.length === 0)) {\n return;\n }\n switch (this.selection) {\n case CalendarSelection.SINGLE:\n if (isDate(value) && !this.isDateDisabled(value)) {\n this.selectSingle(value);\n }\n break;\n case CalendarSelection.MULTI:\n this.selectMultiple(value);\n break;\n case CalendarSelection.RANGE:\n this.selectRange(value, true);\n break;\n }\n }\n /**\n * Deselects date(s) (based on the selection type).\n */\n deselectDate(value) {\n if (!this.selectedDates || this.selectedDates.length === 0) {\n return;\n }\n if (value === null || value === undefined) {\n this.selectedDates = this.selection === CalendarSelection.SINGLE ? null : [];\n this.rangeStarted = false;\n this._onChangeCallback(this.selectedDates);\n return;\n }\n switch (this.selection) {\n case CalendarSelection.SINGLE:\n this.deselectSingle(value);\n break;\n case CalendarSelection.MULTI:\n this.deselectMultiple(value);\n break;\n case CalendarSelection.RANGE:\n this.deselectRange(value);\n break;\n }\n }\n /**\n * @hidden\n */\n selectDateFromClient(value) {\n switch (this.selection) {\n case CalendarSelection.SINGLE:\n case CalendarSelection.MULTI:\n this.selectDate(value);\n break;\n case CalendarSelection.RANGE:\n this.selectRange(value, true);\n break;\n }\n }\n /**\n * @hidden\n */\n initFormatters() {\n this.formatterDay = new Intl.DateTimeFormat(this._locale, { day: this._formatOptions.day });\n this.formatterWeekday = new Intl.DateTimeFormat(this._locale, { weekday: this._formatOptions.weekday });\n this.formatterMonth = new Intl.DateTimeFormat(this._locale, { month: this._formatOptions.month });\n this.formatterYear = new Intl.DateTimeFormat(this._locale, { year: this._formatOptions.year });\n this.formatterMonthday = new Intl.DateTimeFormat(this._locale, { month: this._formatOptions.month, day: this._formatOptions.day });\n }\n /**\n * @hidden\n */\n getDateOnly(date) {\n const validDate = this.validateDate(date);\n return new Date(validDate.getFullYear(), validDate.getMonth(), validDate.getDate());\n }\n /**\n * @hidden\n */\n getDateOnlyInMs(date) {\n return this.getDateOnly(date).getTime();\n }\n /**\n * @hidden\n */\n generateDateRange(start, end) {\n const result = [];\n start = this.getDateOnly(start);\n end = this.getDateOnly(end);\n while (start.getTime() < end.getTime()) {\n start = this.calendarModel.timedelta(start, 'day', 1);\n result.push(start);\n }\n return result;\n }\n /**\n * Performs a single selection.\n *\n * @hidden\n */\n selectSingle(value) {\n this.selectedDates = this.getDateOnly(value);\n this._onChangeCallback(this.selectedDates);\n }\n /**\n * Performs a multiple selection\n *\n * @hidden\n */\n selectMultiple(value) {\n if (Array.isArray(value)) {\n const newDates = value.map(v => this.getDateOnly(v).getTime());\n const selDates = this.selectedDates.map(v => this.getDateOnly(v).getTime());\n if (JSON.stringify(newDates) === JSON.stringify(selDates)) {\n return;\n }\n this.selectedDates = Array.from(new Set([...newDates, ...selDates])).map(v => new Date(v));\n }\n else {\n let newSelection = [];\n if (this.shiftKey && this.lastSelectedDate) {\n [this._startDate, this._endDate] = this.lastSelectedDate.getTime() < value.getTime()\n ? [this.lastSelectedDate, value]\n : [value, this.lastSelectedDate];\n const unselectedDates = [this._startDate, ...this.generateDateRange(this._startDate, this._endDate)]\n .filter(date => !this.isDateDisabled(date)\n && this.selectedDates.every((d) => d.getTime() !== date.getTime()));\n // select all dates from last selected to shift clicked date\n if (this.selectedDates.some((date) => date.getTime() === this.lastSelectedDate.getTime())\n && unselectedDates.length) {\n newSelection = unselectedDates;\n }\n else {\n // delesect all dates from last clicked to shift clicked date (excluding)\n this.selectedDates = this.selectedDates.filter((date) => date.getTime() < this._startDate.getTime() || date.getTime() > this._endDate.getTime());\n this.selectedDates.push(value);\n this._deselectDate = true;\n }\n this._startDate = this._endDate = undefined;\n }\n else if (this.selectedDates.every((date) => date.getTime() !== value.getTime())) {\n newSelection.push(value);\n }\n else {\n this.selectedDates = this.selectedDates.filter((date) => date.getTime() !== value.getTime());\n this._deselectDate = true;\n }\n if (newSelection.length > 0) {\n this.selectedDates = this.selectedDates.concat(newSelection);\n this._deselectDate = false;\n }\n this.lastSelectedDate = value;\n }\n this.selectedDates = this.selectedDates.filter(d => !this.isDateDisabled(d));\n this.selectedDates.sort((a, b) => a.valueOf() - b.valueOf());\n this._onChangeCallback(this.selectedDates);\n }\n /**\n * @hidden\n */\n selectRange(value, excludeDisabledDates = false) {\n var _a, _b;\n if (Array.isArray(value)) {\n value.sort((a, b) => a.valueOf() - b.valueOf());\n this._startDate = this.getDateOnly(value[0]);\n this._endDate = this.getDateOnly(value[value.length - 1]);\n }\n else {\n if (this.shiftKey && this.lastSelectedDate) {\n if (this.lastSelectedDate.getTime() === value.getTime()) {\n this.selectedDates = this.selectedDates.length === 1 ? [] : [value];\n this.rangeStarted = !!this.selectedDates.length;\n this._onChangeCallback(this.selectedDates);\n return;\n }\n // shortens the range when selecting a date inside of it\n if (this.selectedDates.some((date) => date.getTime() === value.getTime())) {\n this.lastSelectedDate.getTime() < value.getTime()\n ? this._startDate = value\n : this._endDate = value;\n }\n else {\n // extends the range when selecting a date outside of it\n // allows selection from last deselected to current selected date\n if (this.lastSelectedDate.getTime() < value.getTime()) {\n this._startDate = (_a = this._startDate) !== null && _a !== void 0 ? _a : this.lastSelectedDate;\n this._endDate = value;\n }\n else {\n this._startDate = value;\n this._endDate = (_b = this._endDate) !== null && _b !== void 0 ? _b : this.lastSelectedDate;\n }\n }\n this.rangeStarted = false;\n }\n else if (!this.rangeStarted) {\n this.rangeStarted = true;\n this.selectedDates = [value];\n this._startDate = this._endDate = undefined;\n }\n else {\n this.rangeStarted = false;\n if (this.selectedDates[0].getTime() === value.getTime()) {\n this.selectedDates = [];\n this._onChangeCallback(this.selectedDates);\n return;\n }\n [this._startDate, this._endDate] = this.lastSelectedDate.getTime() < value.getTime()\n ? [this.lastSelectedDate, value]\n : [value, this.lastSelectedDate];\n }\n this.lastSelectedDate = value;\n }\n if (this._startDate && this._endDate) {\n this.selectedDates = [this._startDate, ...this.generateDateRange(this._startDate, this._endDate)];\n }\n if (excludeDisabledDates) {\n this.selectedDates = this.selectedDates.filter(d => !this.isDateDisabled(d));\n }\n this._onChangeCallback(this.selectedDates);\n }\n /**\n * Performs a single deselection.\n *\n * @hidden\n */\n deselectSingle(value) {\n if (this.selectedDates !== null &&\n this.getDateOnlyInMs(value) === this.getDateOnlyInMs(this.selectedDates)) {\n this.selectedDates = null;\n this._onChangeCallback(this.selectedDates);\n }\n }\n /**\n * Performs a multiple deselection.\n *\n * @hidden\n */\n deselectMultiple(value) {\n value = value.filter(v => v !== null);\n const selectedDatesCount = this.selectedDates.length;\n const datesInMsToDeselect = new Set(value.map(v => this.getDateOnlyInMs(v)));\n for (let i = this.selectedDates.length - 1; i >= 0; i--) {\n if (datesInMsToDeselect.has(this.getDateOnlyInMs(this.selectedDates[i]))) {\n this.selectedDates.splice(i, 1);\n }\n }\n if (this.selectedDates.length !== selectedDatesCount) {\n this._onChangeCallback(this.selectedDates);\n }\n }\n /**\n * Performs a range deselection.\n *\n * @hidden\n */\n deselectRange(value) {\n value = value.filter(v => v !== null);\n if (value.length < 1) {\n return;\n }\n value.sort((a, b) => a.valueOf() - b.valueOf());\n const valueStart = this.getDateOnlyInMs(value[0]);\n const valueEnd = this.getDateOnlyInMs(value[value.length - 1]);\n this.selectedDates.sort((a, b) => a.valueOf() - b.valueOf());\n const selectedDatesStart = this.getDateOnlyInMs(this.selectedDates[0]);\n const selectedDatesEnd = this.getDateOnlyInMs(this.selectedDates[this.selectedDates.length - 1]);\n if (!(valueEnd < selectedDatesStart) && !(valueStart > selectedDatesEnd)) {\n this.selectedDates = [];\n this.rangeStarted = false;\n this._onChangeCallback(this.selectedDates);\n }\n }\n validateDate(value) {\n return DateTimeUtil.isValidDate(value) ? value : new Date();\n }\n}\nIgxCalendarBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarBaseDirective, deps: [{ token: PlatformUtil }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Directive });\nIgxCalendarBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCalendarBaseDirective, selector: \"[igxCalendarBase]\", inputs: { hideOutsideDays: \"hideOutsideDays\", resourceStrings: \"resourceStrings\", weekStart: \"weekStart\", locale: \"locale\", formatOptions: \"formatOptions\", formatViews: \"formatViews\", selection: \"selection\", value: \"value\", viewDate: \"viewDate\", disabledDates: \"disabledDates\", specialDates: \"specialDates\" }, outputs: { selected: \"selected\", viewDateChanged: \"viewDateChanged\", activeViewChanged: \"activeViewChanged\" }, host: { listeners: { \"pointerdown\": \"onPointerdown($event)\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarBaseDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCalendarBase]',\n }]\n }], ctorParameters: function () {\n return [{ type: PlatformUtil }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }];\n }, propDecorators: { hideOutsideDays: [{\n type: Input\n }], selected: [{\n type: Output\n }], viewDateChanged: [{\n type: Output\n }], activeViewChanged: [{\n type: Output\n }], resourceStrings: [{\n type: Input\n }], weekStart: [{\n type: Input\n }], locale: [{\n type: Input\n }], formatOptions: [{\n type: Input\n }], formatViews: [{\n type: Input\n }], selection: [{\n type: Input\n }], value: [{\n type: Input\n }], viewDate: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], specialDates: [{\n type: Input\n }], onPointerdown: [{\n type: HostListener,\n args: ['pointerdown', ['$event']]\n }] } });\n\n/**\n * This file contains all the directives used by the @link IgxCalendarComponent.\n * Except for the directives which are used for templating the calendar itself\n * you should generally not use them directly.\n *\n * @preferred\n */\n/**\n * @hidden\n */\nclass IgxCalendarYearDirective {\n get currentCSS() {\n return this.isCurrentYear;\n }\n get role() {\n return this.isCurrentYear ? 'spinbutton' : null;\n }\n get valuenow() {\n return this.isCurrentYear ? this.date.getFullYear() : null;\n }\n get tabIndex() {\n return this.isCurrentYear ? 0 : -1;\n }\n get isCurrentYear() {\n return this.date.getFullYear() === this.value.getFullYear();\n }\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n constructor(elementRef) {\n this.elementRef = elementRef;\n this.yearSelection = new EventEmitter();\n }\n onClick() {\n this.yearSelection.emit(this.value);\n }\n}\nIgxCalendarYearDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarYearDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxCalendarYearDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCalendarYearDirective, selector: \"[igxCalendarYear]\", inputs: { value: [\"igxCalendarYear\", \"value\"], date: \"date\" }, outputs: { yearSelection: \"yearSelection\" }, host: { listeners: { \"click\": \"onClick()\" }, properties: { \"class.igx-calendar__year--current\": \"this.currentCSS\", \"attr.role\": \"this.role\", \"attr.aria-valuenow\": \"this.valuenow\", \"attr.tabindex\": \"this.tabIndex\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarYearDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCalendarYear]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { value: [{\n type: Input,\n args: ['igxCalendarYear']\n }], date: [{\n type: Input\n }], yearSelection: [{\n type: Output\n }], currentCSS: [{\n type: HostBinding,\n args: ['class.igx-calendar__year--current']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], valuenow: [{\n type: HostBinding,\n args: ['attr.aria-valuenow']\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }] } });\nclass IgxCalendarMonthDirective {\n get currentCSS() {\n return this.isCurrentMonth;\n }\n get isCurrentMonth() {\n return this.date.getMonth() === this.value.getMonth();\n }\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n constructor(elementRef) {\n this.elementRef = elementRef;\n this.monthSelection = new EventEmitter();\n }\n onClick() {\n const date = new Date(this.value.getFullYear(), this.value.getMonth(), this.date.getDate());\n this.monthSelection.emit(date);\n }\n}\nIgxCalendarMonthDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarMonthDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxCalendarMonthDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCalendarMonthDirective, selector: \"[igxCalendarMonth]\", inputs: { value: [\"igxCalendarMonth\", \"value\"], date: \"date\", index: \"index\" }, outputs: { monthSelection: \"monthSelection\" }, host: { listeners: { \"click\": \"onClick()\" }, properties: { \"class.igx-calendar__month--current\": \"this.currentCSS\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarMonthDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCalendarMonth]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { value: [{\n type: Input,\n args: ['igxCalendarMonth']\n }], date: [{\n type: Input\n }], index: [{\n type: Input\n }], monthSelection: [{\n type: Output\n }], currentCSS: [{\n type: HostBinding,\n args: ['class.igx-calendar__month--current']\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }] } });\n/**\n * @hidden\n */\nclass IgxCalendarHeaderTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxCalendarHeaderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarHeaderTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxCalendarHeaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCalendarHeaderTemplateDirective, selector: \"[igxCalendarHeader]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarHeaderTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCalendarHeader]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * @hidden\n */\nclass IgxCalendarSubheaderTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxCalendarSubheaderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarSubheaderTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxCalendarSubheaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCalendarSubheaderTemplateDirective, selector: \"[igxCalendarSubheader]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarSubheaderTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCalendarSubheader]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * @hidden\n */\nclass IgxCalendarScrollMonthDirective {\n constructor(element, zone, platform) {\n this.element = element;\n this.zone = zone;\n this.platform = platform;\n /**\n * @hidden\n */\n this.destroy$ = new Subject();\n }\n /**\n * @hidden\n */\n onMouseDown() {\n this.startScroll();\n }\n /**\n * @hidden\n */\n onMouseUp(event) {\n this.stopScroll(event);\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n fromEvent(this.element.nativeElement, 'keyup').pipe(debounce(() => interval(100)), takeUntil(this.destroy$)).subscribe((event) => {\n this.stopScroll(event);\n });\n this.zone.runOutsideAngular(() => {\n fromEvent(this.element.nativeElement, 'keydown').pipe(tap((event) => {\n if (this.platform.isActivationKey(event)) {\n event.preventDefault();\n event.stopPropagation();\n }\n }), debounce(() => interval(100)), takeUntil(this.destroy$)).subscribe((event) => {\n if (this.platform.isActivationKey(event)) {\n this.zone.run(() => this.startScroll(true));\n }\n });\n });\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\nIgxCalendarScrollMonthDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarScrollMonthDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive });\nIgxCalendarScrollMonthDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCalendarScrollMonthDirective, selector: \"[igxCalendarScrollMonth]\", inputs: { startScroll: \"startScroll\", stopScroll: \"stopScroll\" }, host: { listeners: { \"mousedown\": \"onMouseDown()\", \"mouseup\": \"onMouseUp($event)\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarScrollMonthDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCalendarScrollMonth]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: PlatformUtil }]; }, propDecorators: { startScroll: [{\n type: Input\n }], stopScroll: [{\n type: Input\n }], onMouseDown: [{\n type: HostListener,\n args: ['mousedown']\n }], onMouseUp: [{\n type: HostListener,\n args: ['mouseup', ['$event']]\n }] } });\n\nconst IgxCalendarView = mkenum({\n Month: 'month',\n Year: 'year',\n Decade: 'decade'\n});\n/**\n * @hidden\n */\nvar CalendarView;\n(function (CalendarView) {\n CalendarView[CalendarView[\"DEFAULT\"] = 0] = \"DEFAULT\";\n CalendarView[CalendarView[\"YEAR\"] = 1] = \"YEAR\";\n CalendarView[CalendarView[\"DECADE\"] = 2] = \"DECADE\";\n})(CalendarView || (CalendarView = {}));\nclass IgxMonthPickerBaseDirective extends IgxCalendarBaseDirective {\n constructor() {\n super(...arguments);\n /**\n * Holds month view index we are operating on.\n */\n this.activeViewIdx = 0;\n /**\n * @hidden\n */\n this._activeView = IgxCalendarView.Month;\n }\n /**\n * Gets the current active view.\n * ```typescript\n * this.activeView = calendar.activeView;\n * ```\n */\n get activeView() {\n return this._activeView;\n }\n /**\n * Sets the current active view.\n * ```html\n * \n * ```\n * ```typescript\n * calendar.activeView = IgxCalendarView.YEAR;\n * ```\n */\n set activeView(val) {\n this._activeView = val;\n }\n /**\n * @hidden\n */\n get isDefaultView() {\n return this._activeView === CalendarView.DEFAULT || this._activeView === IgxCalendarView.Month;\n }\n /**\n * @hidden\n */\n get isDecadeView() {\n return this._activeView === CalendarView.DECADE || this._activeView === IgxCalendarView.Decade;\n }\n /**\n * @hidden\n */\n changeYear(event) {\n this.previousViewDate = this.viewDate;\n this.viewDate = this.calendarModel.getFirstViewDate(event, 'month', this.activeViewIdx);\n this.activeView = IgxCalendarView.Month;\n requestAnimationFrame(() => {\n if (this.yearsBtns && this.yearsBtns.length) {\n this.yearsBtns.find((e, idx) => idx === this.activeViewIdx).nativeElement.focus();\n }\n });\n }\n /**\n * @hidden\n */\n activeViewDecade(activeViewIdx = 0) {\n this.activeView = IgxCalendarView.Decade;\n this.activeViewIdx = activeViewIdx;\n }\n /**\n * @hidden\n */\n activeViewDecadeKB(event, activeViewIdx = 0) {\n if (this.platform.isActivationKey(event)) {\n event.preventDefault();\n this.activeViewDecade(activeViewIdx);\n }\n }\n /**\n * Returns the locale representation of the year in the year view if enabled,\n * otherwise returns the default `Date.getFullYear()` value.\n *\n * @hidden\n */\n formattedYear(value) {\n if (this.formatViews.year) {\n return this.formatterYear.format(value);\n }\n return `${value.getFullYear()}`;\n }\n}\nIgxMonthPickerBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMonthPickerBaseDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nIgxMonthPickerBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxMonthPickerBaseDirective, selector: \"[igxMonthPickerBase]\", inputs: { activeView: \"activeView\" }, viewQueries: [{ propertyName: \"yearsBtns\", predicate: [\"yearsBtn\"], descendants: true }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMonthPickerBaseDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxMonthPickerBase]'\n }]\n }], propDecorators: { yearsBtns: [{\n type: ViewChildren,\n args: ['yearsBtn']\n }], activeView: [{\n type: Input\n }] } });\n\nlet NEXT_ID$k = 0;\nclass IgxMonthsViewComponent {\n /**\n * Gets/sets the selected date of the months view.\n * By default it is the current date.\n * ```html\n * \n * ```\n * ```typescript\n * let date = this.monthsView.date;\n * ```\n *\n * @memberof IgxMonthsViewComponent\n */\n set date(value) {\n if (!(value instanceof Date)) {\n return;\n }\n this._date = value;\n this.activeMonth = this.date.getMonth();\n }\n get date() {\n return this._date;\n }\n /**\n * Gets the month format option of the months view.\n * ```typescript\n * let monthFormat = this.monthsView.monthFormat.\n * ```\n */\n get monthFormat() {\n return this._monthFormat;\n }\n /**\n * Sets the month format option of the months view.\n * ```html\n * [monthFormat] = \"short'\"\n * ```\n *\n * @memberof IgxMonthsViewComponent\n */\n set monthFormat(value) {\n this._monthFormat = value;\n this.initMonthFormatter();\n }\n /**\n * Gets the `locale` of the months view.\n * Default value is `\"en\"`.\n * ```typescript\n * let locale = this.monthsView.locale;\n * ```\n *\n * @memberof IgxMonthsViewComponent\n */\n get locale() {\n return this._locale;\n }\n /**\n * Sets the `locale` of the months view.\n * Expects a valid BCP 47 language tag.\n * Default value is `\"en\"`.\n * ```html\n * \n * ```\n *\n * @memberof IgxMonthsViewComponent\n */\n set locale(value) {\n this._locale = value;\n this.initMonthFormatter();\n }\n /**\n * Returns an array of date objects which are then used to\n * properly render the month names.\n *\n * Used in the template of the component\n *\n * @hidden\n */\n get months() {\n let start = new Date(this.date.getFullYear(), 0, 1);\n const result = [];\n for (let i = 0; i < 12; i++) {\n result.push(start);\n start = this._calendarModel.timedelta(start, 'month', 1);\n }\n return result;\n }\n constructor(el) {\n this.el = el;\n /**\n * Sets/gets the `id` of the months view.\n * If not set, the `id` will have value `\"igx-months-view-0\"`.\n * ```html\n * \n * ```\n * ```typescript\n * let monthsViewId = this.monthsView.id;\n * ```\n *\n * @memberof IgxMonthsViewComponent\n */\n this.id = `igx-months-view-${NEXT_ID$k++}`;\n /**\n * Gets/sets whether the view should be rendered\n * according to the locale and monthFormat, if any.\n */\n this.formatView = true;\n /**\n * Emits an event when a selection is made in the months view.\n * Provides reference the `date` property in the `IgxMonthsViewComponent`.\n * ```html\n * \n * ```\n *\n * @memberof IgxMonthsViewComponent\n */\n this.selected = new EventEmitter();\n /**\n * The default css class applied to the component.\n *\n * @hidden\n */\n this.styleClass = true;\n this._date = new Date();\n /**\n * @hidden\n */\n this._locale = 'en';\n /**\n * @hidden\n */\n this._monthFormat = 'short';\n /**\n * @hidden\n */\n this._onTouchedCallback = noop;\n /**\n * @hidden\n */\n this._onChangeCallback = noop;\n this.initMonthFormatter();\n this._calendarModel = new Calendar();\n }\n /**\n * @hidden\n */\n onKeydownArrowUp(event) {\n event.preventDefault();\n event.stopPropagation();\n const node = this.monthsRef.find((date) => date.nativeElement === event.target);\n if (!node) {\n return;\n }\n const months = this.monthsRef.toArray();\n const nodeRect = node.nativeElement.getBoundingClientRect();\n for (let index = months.indexOf(node) - 1; index >= 0; index--) {\n const nextNodeRect = months[index].nativeElement.getBoundingClientRect();\n const tolerance = 6;\n if (nodeRect.top !== nextNodeRect.top && (nextNodeRect.left - nodeRect.left) < tolerance) {\n const month = months[index];\n month.nativeElement.focus();\n this.activeMonth = month.value.getMonth();\n break;\n }\n }\n }\n /**\n * @hidden\n */\n onKeydownArrowDown(event) {\n event.preventDefault();\n event.stopPropagation();\n const node = this.monthsRef.find((date) => date.nativeElement === event.target);\n if (!node) {\n return;\n }\n const months = this.monthsRef.toArray();\n const nodeRect = node.nativeElement.getBoundingClientRect();\n for (let index = months.indexOf(node) + 1; index < months.length; index++) {\n const nextNodeRect = months[index].nativeElement.getBoundingClientRect();\n const tolerance = 6;\n if (nextNodeRect.top !== nodeRect.top && (nodeRect.left - nextNodeRect.left) < tolerance) {\n const month = months[index];\n month.nativeElement.focus();\n this.activeMonth = month.value.getMonth();\n break;\n }\n }\n }\n /**\n * @hidden\n */\n onKeydownArrowRight(event) {\n event.preventDefault();\n event.stopPropagation();\n const node = this.monthsRef.find((date) => date.nativeElement === event.target);\n if (!node) {\n return;\n }\n const months = this.monthsRef.toArray();\n if (months.indexOf(node) + 1 < months.length) {\n const month = months[months.indexOf(node) + 1];\n this.activeMonth = month.value.getMonth();\n month.nativeElement.focus();\n }\n }\n /**\n * @hidden\n */\n onKeydownArrowLeft(event) {\n event.preventDefault();\n event.stopPropagation();\n const node = this.monthsRef.find((date) => date.nativeElement === event.target);\n if (!node) {\n return;\n }\n const months = this.monthsRef.toArray();\n if (months.indexOf(node) - 1 >= 0) {\n const month = months[months.indexOf(node) - 1];\n this.activeMonth = month.value.getMonth();\n month.nativeElement.focus();\n }\n }\n /**\n * @hidden\n */\n onKeydownHome(event) {\n event.preventDefault();\n event.stopPropagation();\n const month = this.monthsRef.toArray()[0];\n this.activeMonth = month.value.getMonth();\n month.nativeElement.focus();\n }\n /**\n * @hidden\n */\n onKeydownEnd(event) {\n event.preventDefault();\n event.stopPropagation();\n const months = this.monthsRef.toArray();\n const month = months[months.length - 1];\n this.activeMonth = month.value.getMonth();\n month.nativeElement.focus();\n }\n /**\n * @hidden\n */\n onKeydownEnter(event) {\n const value = this.monthsRef.find((date) => date.nativeElement === event.target).value;\n this.date = new Date(value.getFullYear(), value.getMonth(), this.date.getDate());\n this.activeMonth = this.date.getMonth();\n this.selected.emit(this.date);\n this._onChangeCallback(this.date);\n }\n resetActiveMonth() {\n this.activeMonth = this.date.getMonth();\n }\n /**\n * Returns the locale representation of the month in the months view.\n *\n * @hidden\n */\n formattedMonth(value) {\n if (this.formatView) {\n return this._formatterMonth.format(value);\n }\n return `${value.getMonth()}`;\n }\n /**\n * @hidden\n */\n selectMonth(event) {\n this.selected.emit(event);\n this.date = event;\n this.activeMonth = this.date.getMonth();\n this._onChangeCallback(this.date);\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this._onTouchedCallback = fn;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n if (value) {\n this.date = value;\n }\n }\n /**\n * @hidden\n */\n monthTracker(index, item) {\n return `${item.getMonth()}}`;\n }\n /**\n * @hidden\n */\n initMonthFormatter() {\n this._formatterMonth = new Intl.DateTimeFormat(this._locale, { month: this.monthFormat });\n }\n}\nIgxMonthsViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMonthsViewComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxMonthsViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxMonthsViewComponent, selector: \"igx-months-view\", inputs: { id: \"id\", date: \"date\", monthFormat: \"monthFormat\", locale: \"locale\", formatView: \"formatView\" }, outputs: { selected: \"selected\" }, host: { listeners: { \"keydown.arrowup\": \"onKeydownArrowUp($event)\", \"keydown.arrowdown\": \"onKeydownArrowDown($event)\", \"keydown.arrowright\": \"onKeydownArrowRight($event)\", \"keydown.arrowleft\": \"onKeydownArrowLeft($event)\", \"keydown.home\": \"onKeydownHome($event)\", \"keydown.end\": \"onKeydownEnd($event)\", \"keydown.enter\": \"onKeydownEnter($event)\", \"focusout\": \"resetActiveMonth()\" }, properties: { \"attr.id\": \"this.id\", \"class.igx-calendar\": \"this.styleClass\" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxMonthsViewComponent, multi: true }], viewQueries: [{ propertyName: \"monthsRef\", predicate: IgxCalendarMonthDirective, descendants: true, read: IgxCalendarMonthDirective }], ngImport: i0, template: \"
    \\n
    \\n \\n {{ formattedMonth(month) | titlecase }}\\n \\n
    \\n
    \\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: IgxCalendarMonthDirective, selector: \"[igxCalendarMonth]\", inputs: [\"igxCalendarMonth\", \"date\", \"index\"], outputs: [\"monthSelection\"] }, { kind: \"pipe\", type: i1$1.TitleCasePipe, name: \"titlecase\" }, { kind: \"pipe\", type: i1$1.DatePipe, name: \"date\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMonthsViewComponent, decorators: [{\n type: Component,\n args: [{ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxMonthsViewComponent, multi: true }], selector: 'igx-months-view', template: \"
    \\n
    \\n \\n {{ formattedMonth(month) | titlecase }}\\n \\n
    \\n
    \\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], date: [{\n type: Input\n }], monthFormat: [{\n type: Input\n }], locale: [{\n type: Input\n }], formatView: [{\n type: Input\n }], selected: [{\n type: Output\n }], styleClass: [{\n type: HostBinding,\n args: ['class.igx-calendar']\n }], monthsRef: [{\n type: ViewChildren,\n args: [IgxCalendarMonthDirective, { read: IgxCalendarMonthDirective }]\n }], onKeydownArrowUp: [{\n type: HostListener,\n args: ['keydown.arrowup', ['$event']]\n }], onKeydownArrowDown: [{\n type: HostListener,\n args: ['keydown.arrowdown', ['$event']]\n }], onKeydownArrowRight: [{\n type: HostListener,\n args: ['keydown.arrowright', ['$event']]\n }], onKeydownArrowLeft: [{\n type: HostListener,\n args: ['keydown.arrowleft', ['$event']]\n }], onKeydownHome: [{\n type: HostListener,\n args: ['keydown.home', ['$event']]\n }], onKeydownEnd: [{\n type: HostListener,\n args: ['keydown.end', ['$event']]\n }], onKeydownEnter: [{\n type: HostListener,\n args: ['keydown.enter', ['$event']]\n }], resetActiveMonth: [{\n type: HostListener,\n args: ['focusout']\n }] } });\n\nclass CalendarHammerConfig extends HammerGestureConfig {\n constructor() {\n super(...arguments);\n this.overrides = {\n pan: { direction: Hammer.DIRECTION_VERTICAL, threshold: 1 }\n };\n }\n}\nCalendarHammerConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: CalendarHammerConfig, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\nCalendarHammerConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: CalendarHammerConfig });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: CalendarHammerConfig, decorators: [{\n type: Injectable\n }] });\nclass IgxYearsViewComponent {\n /**\n * Gets/sets the selected date of the years view.\n * By default it is the current date.\n * ```html\n * \n * ```\n * ```typescript\n * let date = this.yearsView.date;\n * ```\n *\n * @memberof IgxYearsViewComponent\n */\n get date() {\n return this._date;\n }\n set date(value) {\n if (!(value instanceof Date)) {\n return;\n }\n this._date = value;\n }\n /**\n * Gets the year format option of the years view.\n * ```typescript\n * let yearFormat = this.yearsView.yearFormat.\n * ```\n */\n get yearFormat() {\n return this._yearFormat;\n }\n /**\n * Sets the year format option of the years view.\n * ```html\n * \n * ```\n *\n * @memberof IgxYearsViewComponent\n */\n set yearFormat(value) {\n this._yearFormat = value;\n this.initYearFormatter();\n }\n /**\n * Gets the `locale` of the years view.\n * Default value is `\"en\"`.\n * ```typescript\n * let locale = this.yearsView.locale;\n * ```\n *\n * @memberof IgxYearsViewComponent\n */\n get locale() {\n return this._locale;\n }\n /**\n * Sets the `locale` of the years view.\n * Expects a valid BCP 47 language tag.\n * Default value is `\"en\"`.\n * ```html\n * \n * ```\n *\n * @memberof IgxYearsViewComponent\n */\n set locale(value) {\n this._locale = value;\n this.initYearFormatter();\n }\n /**\n * Returns an array of date objects which are then used to properly\n * render the years.\n *\n * Used in the template of the component.\n *\n * @hidden\n */\n get decade() {\n const result = [];\n const start = this.date.getFullYear() - 3;\n const end = this.date.getFullYear() + 4;\n for (const year of range(start, end)) {\n result.push(new Date(year, this.date.getMonth(), this.date.getDate()));\n }\n return result;\n }\n constructor(el) {\n this.el = el;\n /**\n * Emits an event when a selection is made in the years view.\n * Provides reference the `date` property in the `IgxYearsViewComponent`.\n * ```html\n * \n * ```\n *\n * @memberof IgxYearsViewComponent\n */\n this.selected = new EventEmitter();\n /**\n * The default css class applied to the component.\n *\n * @hidden\n */\n this.styleClass = true;\n /**\n * @hidden\n */\n this._locale = 'en';\n /**\n * @hidden\n */\n this._yearFormat = 'numeric';\n /**\n * @hidden\n */\n this._date = new Date();\n /**\n * @hidden\n */\n this._onTouchedCallback = noop;\n /**\n * @hidden\n */\n this._onChangeCallback = noop;\n this.initYearFormatter();\n this._calendarModel = new Calendar();\n }\n /**\n * @hidden\n */\n onKeydownArrowDown(event) {\n event.preventDefault();\n event.stopPropagation();\n this.generateYearRange(1);\n this.calendarDir.find(date => date.isCurrentYear).nativeElement.nextElementSibling.focus();\n }\n /**\n * @hidden\n */\n onKeydownArrowUp(event) {\n event.preventDefault();\n event.stopPropagation();\n this.generateYearRange(-1);\n this.calendarDir.find(date => date.isCurrentYear).nativeElement.previousElementSibling.focus();\n }\n /**\n * @hidden\n */\n onKeydownEnter() {\n this.selected.emit(this.date);\n this._onChangeCallback(this.date);\n }\n /**\n * Returns the locale representation of the year in the years view.\n *\n * @hidden\n */\n formattedYear(value) {\n if (this.formatView) {\n return this._formatterYear.format(value);\n }\n return `${value.getFullYear()}`;\n }\n /**\n * @hidden\n */\n selectYear(event) {\n this.date = event;\n this.selected.emit(this.date);\n this._onChangeCallback(this.date);\n }\n /**\n * @hidden\n */\n scroll(event) {\n event.preventDefault();\n event.stopPropagation();\n const delta = event.deltaY < 0 ? -1 : 1;\n this.generateYearRange(delta);\n }\n /**\n * @hidden\n */\n pan(event) {\n const delta = event.deltaY < 0 ? 1 : -1;\n this.generateYearRange(delta);\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this._onTouchedCallback = fn;\n }\n /**\n * @hidden\n */\n yearTracker(index, item) {\n return `${item.getFullYear()}}`;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n if (value) {\n this.date = value;\n }\n }\n /**\n * @hidden\n */\n initYearFormatter() {\n this._formatterYear = new Intl.DateTimeFormat(this._locale, { year: this.yearFormat });\n }\n /**\n * @hidden\n */\n generateYearRange(delta) {\n const currentYear = new Date().getFullYear();\n if ((delta > 0 && this.date.getFullYear() - currentYear >= 95) ||\n (delta < 0 && currentYear - this.date.getFullYear() >= 95)) {\n return;\n }\n this.date = this._calendarModel.timedelta(this.date, 'year', delta);\n }\n}\nIgxYearsViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxYearsViewComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxYearsViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxYearsViewComponent, selector: \"igx-years-view\", inputs: { formatView: \"formatView\", date: \"date\", yearFormat: \"yearFormat\", locale: \"locale\" }, outputs: { selected: \"selected\" }, host: { listeners: { \"keydown.arrowdown\": \"onKeydownArrowDown($event)\", \"keydown.arrowup\": \"onKeydownArrowUp($event)\", \"keydown.enter\": \"onKeydownEnter()\" }, properties: { \"class.igx-calendar\": \"this.styleClass\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: IgxYearsViewComponent,\n multi: true\n },\n {\n provide: HAMMER_GESTURE_CONFIG,\n useClass: CalendarHammerConfig\n }\n ], viewQueries: [{ propertyName: \"calendarDir\", predicate: IgxCalendarYearDirective, descendants: true, read: IgxCalendarYearDirective }], ngImport: i0, template: \"
    \\n
    \\n \\n\\n {{ formattedYear(year) }}\\n \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: IgxCalendarYearDirective, selector: \"[igxCalendarYear]\", inputs: [\"igxCalendarYear\", \"date\"], outputs: [\"yearSelection\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxYearsViewComponent, decorators: [{\n type: Component,\n args: [{ providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: IgxYearsViewComponent,\n multi: true\n },\n {\n provide: HAMMER_GESTURE_CONFIG,\n useClass: CalendarHammerConfig\n }\n ], selector: 'igx-years-view', template: \"
    \\n
    \\n \\n\\n {{ formattedYear(year) }}\\n \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { formatView: [{\n type: Input\n }], selected: [{\n type: Output\n }], styleClass: [{\n type: HostBinding,\n args: ['class.igx-calendar']\n }], calendarDir: [{\n type: ViewChildren,\n args: [IgxCalendarYearDirective, { read: IgxCalendarYearDirective }]\n }], date: [{\n type: Input\n }], yearFormat: [{\n type: Input\n }], locale: [{\n type: Input\n }], onKeydownArrowDown: [{\n type: HostListener,\n args: ['keydown.arrowdown', ['$event']]\n }], onKeydownArrowUp: [{\n type: HostListener,\n args: ['keydown.arrowup', ['$event']]\n }], onKeydownEnter: [{\n type: HostListener,\n args: ['keydown.enter']\n }] } });\n\n/**\n * @hidden\n */\nclass IgxDayItemComponent {\n /**\n * Returns boolean indicating if the day is selected\n *\n */\n get selected() {\n return this._selected;\n }\n /**\n * Selects the day\n */\n set selected(value) {\n this._selected = value;\n }\n get isCurrentMonth() {\n return this.date.isCurrentMonth;\n }\n get isPreviousMonth() {\n return this.date.isPrevMonth;\n }\n get isNextMonth() {\n return this.date.isNextMonth;\n }\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n get isSelectedCSS() {\n return (!this.isDisabled && this.selected);\n }\n get isInactive() {\n return this.date.isNextMonth || this.date.isPrevMonth;\n }\n get isHidden() {\n return this.hideOutsideDays && this.isInactive;\n }\n get isToday() {\n const today = new Date(Date.now());\n const date = this.date.date;\n if (date.getDate() === today.getDate()) {\n this.nativeElement.setAttribute('aria-current', 'date');\n }\n return (date.getFullYear() === today.getFullYear() &&\n date.getMonth() === today.getMonth() &&\n date.getDate() === today.getDate());\n }\n get isWeekend() {\n const day = this.date.date.getDay();\n return day === 0 || day === 6;\n }\n get isDisabled() {\n if (this.disabledDates === null) {\n return false;\n }\n return isDateInRanges(this.date.date, this.disabledDates);\n }\n get isOutOfRange() {\n if (!this.outOfRangeDates) {\n return false;\n }\n return isDateInRanges(this.date.date, this.outOfRangeDates);\n }\n get isFocusable() {\n return this.isCurrentMonth && !this.isHidden && !this.isDisabled && !this.isOutOfRange;\n }\n get isWithinRangeCSS() {\n return !this.isSingleSelection && this.isWithinRange;\n }\n get isSpecial() {\n if (this.specialDates === null) {\n return false;\n }\n return isDateInRanges(this.date.date, this.specialDates);\n }\n get isDisabledCSS() {\n return this.isHidden || this.isDisabled || this.isOutOfRange;\n }\n get isSingleSelection() {\n return this.selection !== CalendarSelection.RANGE;\n }\n constructor(elementRef) {\n this.elementRef = elementRef;\n this.hideOutsideDays = false;\n this.isLastInRange = false;\n this.isFirstInRange = false;\n this.isWithinRange = false;\n this.dateSelection = new EventEmitter();\n this._selected = false;\n }\n onSelect(event) {\n event.stopPropagation();\n this.dateSelection.emit(this.date);\n }\n}\nIgxDayItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDayItemComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxDayItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDayItemComponent, selector: \"igx-day-item\", inputs: { date: \"date\", selection: \"selection\", selected: \"selected\", disabledDates: \"disabledDates\", outOfRangeDates: \"outOfRangeDates\", specialDates: \"specialDates\", hideOutsideDays: \"hideOutsideDays\", isLastInRange: \"isLastInRange\", isFirstInRange: \"isFirstInRange\", isWithinRange: \"isWithinRange\" }, outputs: { dateSelection: \"dateSelection\" }, host: { listeners: { \"click\": \"onSelect($event)\", \"keydown.enter\": \"onSelect($event)\" }, properties: { \"class.igx-calendar__date--last\": \"this.isLastInRange\", \"class.igx-calendar__date--first\": \"this.isFirstInRange\", \"class.igx-calendar__date--selected\": \"this.isSelectedCSS\", \"class.igx-calendar__date--inactive\": \"this.isInactive\", \"class.igx-calendar__date--hidden\": \"this.isHidden\", \"class.igx-calendar__date--current\": \"this.isToday\", \"class.igx-calendar__date--weekend\": \"this.isWeekend\", \"class.igx-calendar__date--range\": \"this.isWithinRangeCSS\", \"class.igx-calendar__date--special\": \"this.isSpecial\", \"class.igx-calendar__date--disabled\": \"this.isDisabledCSS\", \"class.igx-calendar__date--single\": \"this.isSingleSelection\" } }, ngImport: i0, template: \"\\n \\n\\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDayItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-day-item', template: \"\\n \\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { date: [{\n type: Input\n }], selection: [{\n type: Input\n }], selected: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], outOfRangeDates: [{\n type: Input\n }], specialDates: [{\n type: Input\n }], hideOutsideDays: [{\n type: Input\n }], isLastInRange: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.igx-calendar__date--last']\n }], isFirstInRange: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.igx-calendar__date--first']\n }], isWithinRange: [{\n type: Input\n }], dateSelection: [{\n type: Output\n }], isSelectedCSS: [{\n type: HostBinding,\n args: ['class.igx-calendar__date--selected']\n }], isInactive: [{\n type: HostBinding,\n args: ['class.igx-calendar__date--inactive']\n }], isHidden: [{\n type: HostBinding,\n args: ['class.igx-calendar__date--hidden']\n }], isToday: [{\n type: HostBinding,\n args: ['class.igx-calendar__date--current']\n }], isWeekend: [{\n type: HostBinding,\n args: ['class.igx-calendar__date--weekend']\n }], isWithinRangeCSS: [{\n type: HostBinding,\n args: ['class.igx-calendar__date--range']\n }], isSpecial: [{\n type: HostBinding,\n args: ['class.igx-calendar__date--special']\n }], isDisabledCSS: [{\n type: HostBinding,\n args: ['class.igx-calendar__date--disabled']\n }], isSingleSelection: [{\n type: HostBinding,\n args: ['class.igx-calendar__date--single']\n }], onSelect: [{\n type: HostListener,\n args: ['click', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.enter', ['$event']]\n }] } });\n\nvar Direction$1;\n(function (Direction) {\n Direction[\"Up\"] = \"ArrowUp\";\n Direction[\"Down\"] = \"ArrowDown\";\n Direction[\"Left\"] = \"ArrowLeft\";\n Direction[\"Right\"] = \"ArrowRight\";\n})(Direction$1 || (Direction$1 = {}));\nconst ARROW = 'Arrow';\n/** @hidden */\nclass IgxDaysViewNavigationService {\n /**\n * Implements kb navigation in all MoveDirections. nextDate and nextMonthView naming convention is used for both previous/next\n *\n * @hidden\n */\n focusNextDate(target, key, nextView = false) {\n if (target.childElementCount === 0) {\n target = target.parentElement;\n }\n if (key.indexOf('Arrow') === -1) {\n key = ARROW.concat(key);\n }\n const monthView = this.monthView;\n const node = monthView.dates.find((date) => date.nativeElement === target);\n let dates = monthView.dates.toArray();\n let day;\n let step;\n let i;\n let nextDate;\n const index = dates.indexOf(node);\n if (!node) {\n return;\n }\n // focus item in current month\n switch (key) {\n case Direction$1.Left: {\n step = -1;\n nextDate = this.timedelta(node.date.date, step);\n for (i = index; i > 0; i--) {\n day = nextView ? dates[i] : dates[i - 1];\n nextDate = day.date.date;\n if (day.date.isPrevMonth) {\n break;\n }\n if (day && day.isFocusable) {\n day.nativeElement.focus();\n return;\n }\n }\n break;\n }\n case Direction$1.Right: {\n step = 1;\n nextDate = this.timedelta(node.date.date, step);\n for (i = index; i < dates.length - 1; i++) {\n day = nextView ? dates[i] : dates[i + 1];\n nextDate = day.date.date;\n if (day.date.isNextMonth) {\n break;\n }\n if (day && day.isFocusable) {\n day.nativeElement.focus();\n return;\n }\n }\n break;\n }\n case Direction$1.Up: {\n step = -7;\n nextDate = this.timedelta(node.date.date, step);\n for (i = index; i - 7 > -1; i -= 7) {\n day = nextView ? dates[i] : dates[i - 7];\n nextDate = day.date.date;\n if (day.date.isPrevMonth) {\n break;\n }\n if (day && day.isFocusable) {\n day.nativeElement.focus();\n return;\n }\n }\n break;\n }\n case Direction$1.Down: {\n step = 7;\n nextDate = this.timedelta(node.date.date, step);\n for (i = index; i + 7 < 42; i += 7) {\n day = nextView ? dates[i] : dates[i + 7];\n nextDate = day.date.date;\n if (day.date.isNextMonth) {\n break;\n }\n if (day && day.isFocusable) {\n day.nativeElement.focus();\n return;\n }\n }\n break;\n }\n }\n // focus item in prev/next visible month\n const nextMonthView = step > 0 ? monthView.nextMonthView : monthView.prevMonthView;\n if (nextMonthView) {\n dates = nextMonthView.dates.toArray();\n day = dates.find((item) => item.date.date.getTime() === nextDate.getTime());\n if (day && day.isFocusable) {\n day.nativeElement.focus();\n return;\n }\n nextMonthView.daysNavService.focusNextDate(day.nativeElement, key);\n }\n // if iterating in the visible prev/next moths above found a day that is not focusable, ie is disabled, hidden, etc\n // then it is needed to recalculate the next day, which is going to be part of the prev/next months\n if (day && !day.isFocusable) {\n day = dates[i + step];\n if (!day) {\n nextDate = this.timedelta(node.date.date, step + i - index);\n }\n }\n // focus item in prev/next month, which is currently out of view\n let dayIsNextMonth; // determine what we need to check for next date - if it belongs to prev or next month\n if (day) {\n dayIsNextMonth = step > 0 ? day.date.isNextMonth : day.date.isPrevMonth;\n }\n if (monthView.changeDaysView && !nextMonthView && ((day && dayIsNextMonth) || !day)) {\n const monthAction = step > 0 ? ScrollMonth.NEXT : ScrollMonth.PREV;\n monthView.viewChanging.emit({ monthAction, key, nextDate });\n }\n }\n /**\n * Focuses first focusable day in the month. Will go to next visible month, if no day in the first month is focusable\n *\n * @hidden\n */\n focusHomeDate() {\n let monthView = this.monthView;\n while (!this.focusFirstDay(monthView) && monthView.nextMonthView) {\n monthView = monthView.nextMonthView;\n }\n }\n /**\n * Focuses last focusable day in the month. Will go to previous visible month, if no day in the first month is focusable\n *\n * @hidden\n */\n focusEndDate() {\n let monthView = this.monthView;\n while (!this.focusLastDay(monthView) && monthView.prevMonthView) {\n monthView = monthView.prevMonthView;\n }\n }\n timedelta(date, units) {\n const ret = new Date(date);\n ret.setDate(ret.getDate() + units);\n return ret;\n }\n focusFirstDay(monthView) {\n const dates = monthView.dates.filter(d => d.isCurrentMonth);\n for (const date of dates) {\n if (date.isFocusable) {\n date.nativeElement.focus();\n return true;\n }\n }\n return false;\n }\n focusLastDay(monthView) {\n const dates = monthView.dates.filter(d => d.isCurrentMonth);\n for (let i = dates.length - 1; i >= 0; i--) {\n if (dates[i].isFocusable) {\n dates[i].nativeElement.focus();\n return true;\n }\n }\n return false;\n }\n}\nIgxDaysViewNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDaysViewNavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIgxDaysViewNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDaysViewNavigationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDaysViewNavigationService, decorators: [{\n type: Injectable\n }] });\n\nlet NEXT_ID$j = 0;\nclass IgxDaysViewComponent extends IgxCalendarBaseDirective {\n /**\n * @hidden\n * @internal\n */\n set activeDate(value) {\n this._activeDate = value;\n this.activeDateChange.emit(this._activeDate);\n }\n get activeDate() {\n return this._activeDate ? this._activeDate : this.viewDate.toLocaleDateString();\n }\n /**\n * @hidden\n */\n constructor(daysNavService, platform, _localeId) {\n super(platform, _localeId);\n this.daysNavService = daysNavService;\n /**\n * Sets/gets the `id` of the days view.\n * If not set, the `id` will have value `\"igx-days-view-0\"`.\n * ```html\n * \n * ```\n * ```typescript\n * let daysViewId = this.daysView.id;\n * ```\n */\n this.id = `igx-days-view-${NEXT_ID$j++}`;\n /**\n * @hidden\n */\n this.changeDaysView = false;\n /**\n * @hidden\n */\n this.dateSelection = new EventEmitter();\n /**\n * @hidden\n */\n this.viewChanging = new EventEmitter();\n /**\n * @hidden\n */\n this.activeDateChange = new EventEmitter();\n /**\n * @hidden\n */\n this.monthsViewBlur = new EventEmitter();\n /**\n * The default css class applied to the component.\n *\n * @hidden\n */\n this.styleClass = true;\n /** @hidden */\n this.shouldResetDate = true;\n }\n /**\n * @hidden\n * @internal\n */\n resetActiveMonth() {\n if (this.shouldResetDate) {\n const date = this.dates.find(day => day.selected && day.isCurrentMonth) ||\n this.dates.find(day => day.isToday && day.isCurrentMonth) ||\n this.dates.find(d => d.isFocusable);\n if (date) {\n this.activeDate = date.date.date.toLocaleDateString();\n }\n this.monthsViewBlur.emit();\n }\n this.shouldResetDate = true;\n }\n /**\n * @hidden\n * @internal\n */\n pointerDown() {\n this.shouldResetDate = false;\n }\n /**\n * @hidden\n */\n onKeydownArrow(event) {\n event.preventDefault();\n event.stopPropagation();\n this.shouldResetDate = false;\n this.daysNavService.focusNextDate(event.target, event.key);\n }\n /**\n * @hidden\n */\n onKeydownHome(event) {\n event.preventDefault();\n event.stopPropagation();\n this.shouldResetDate = false;\n this.getFirstMonthView().daysNavService.focusHomeDate();\n }\n /**\n * @hidden\n */\n onKeydownEnd(event) {\n event.preventDefault();\n event.stopPropagation();\n this.shouldResetDate = false;\n this.getLastMonthView().daysNavService.focusEndDate();\n }\n /**\n * @hidden\n */\n get getCalendarMonth() {\n return this.calendarModel.monthdatescalendar(this.viewDate.getFullYear(), this.viewDate.getMonth(), true);\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.daysNavService.monthView = this;\n }\n /**\n * @hidden\n */\n ngDoCheck() {\n if (!this.changeDaysView && this.dates) {\n this.disableOutOfRangeDates();\n }\n }\n /**\n * @hidden\n * @internal\n */\n tabIndex(day) {\n return this.activeDate && this.activeDate === day.date.toLocaleDateString() && day.isCurrentMonth ? 0 : -1;\n }\n /**\n * Returns the week number by date\n *\n * @hidden\n */\n getWeekNumber(date) {\n return this.calendarModel.getWeekNumber(date);\n }\n /**\n * Returns the locale representation of the date in the days view.\n *\n * @hidden\n */\n formattedDate(value) {\n if (this.formatViews.day) {\n return this.formatterDay.format(value);\n }\n return `${value.getDate()}`;\n }\n /**\n * @hidden\n */\n generateWeekHeader() {\n const dayNames = [];\n const rv = this.calendarModel.monthdatescalendar(this.viewDate.getFullYear(), this.viewDate.getMonth())[0];\n for (const day of rv) {\n dayNames.push(this.formatterWeekday.format(day.date));\n }\n return dayNames;\n }\n /**\n * @hidden\n */\n rowTracker(index, item) {\n return `${item[index].date.getMonth()}${item[index].date.getDate()}`;\n }\n /**\n * @hidden\n */\n dateTracker(index, item) {\n return `${item.date.getMonth()}--${item.date.getDate()}`;\n }\n /**\n * @hidden\n */\n isCurrentMonth(value) {\n return this.viewDate.getMonth() === value.getMonth();\n }\n /**\n * @hidden\n */\n isCurrentYear(value) {\n return this.viewDate.getFullYear() === value.getFullYear();\n }\n /**\n * @hidden\n */\n isSelected(date) {\n let selectedDates;\n if (this.isDateDisabled(date.date) || !this.value ||\n (Array.isArray(this.value) && this.value.length === 0)) {\n return false;\n }\n if (this.selection === CalendarSelection.SINGLE) {\n selectedDates = this.value;\n return this.getDateOnly(selectedDates).getTime() === date.date.getTime();\n }\n selectedDates = this.value;\n if (this.selection === CalendarSelection.RANGE && selectedDates.length === 1) {\n return this.getDateOnly(selectedDates[0]).getTime() === date.date.getTime();\n }\n if (this.selection === CalendarSelection.MULTI) {\n const start = this.getDateOnly(selectedDates[0]);\n const end = this.getDateOnly(selectedDates[selectedDates.length - 1]);\n if (this.isWithinRange(date.date, false, start, end)) {\n const currentDate = selectedDates.find(element => element.getTime() === date.date.getTime());\n return !!currentDate;\n }\n else {\n return false;\n }\n }\n else {\n return this.isWithinRange(date.date, true);\n }\n }\n /**\n * @hidden\n */\n isLastInRange(date) {\n if (this.isSingleSelection || !this.value) {\n return false;\n }\n const dates = this.value;\n const lastDate = dates[dates.length - 1];\n return isEqual(lastDate, date.date);\n }\n /**\n * @hidden\n */\n isFirstInRange(date) {\n if (this.isSingleSelection || !this.value) {\n return false;\n }\n return isEqual(this.value[0], date.date);\n }\n /**\n * @hidden\n */\n isWithinRange(date, checkForRange, min, max) {\n if (checkForRange && !(Array.isArray(this.value) && this.value.length > 1)) {\n return false;\n }\n min = min ? min : this.value[0];\n max = max ? max : this.value[this.value.length - 1];\n return isDateInRanges(date, [\n {\n type: DateRangeType.Between,\n dateRange: [min, max]\n }\n ]);\n }\n /**\n * @hidden\n */\n focusActiveDate() {\n let date = this.dates.find((d) => d.selected);\n if (!date) {\n date = this.dates.find((d) => d.isToday);\n }\n if (date.isFocusable) {\n date.nativeElement.focus();\n }\n }\n /**\n * @hidden\n */\n selectDay(event) {\n this.selectDateFromClient(event.date);\n this.dateSelection.emit(event);\n this.selected.emit(this.selectedDates);\n }\n /**\n * @hidden\n */\n getFirstMonthView() {\n let monthView = this;\n while (monthView.prevMonthView) {\n monthView = monthView.prevMonthView;\n }\n return monthView;\n }\n /**\n * @hidden\n */\n disableOutOfRangeDates() {\n const dateRange = [];\n this.dates.toArray().forEach((date) => {\n if (!date.isCurrentMonth) {\n dateRange.push(date.date.date);\n }\n });\n this.outOfRangeDates = [{\n type: DateRangeType.Specific,\n dateRange\n }];\n }\n /**\n * @hidden\n */\n getLastMonthView() {\n let monthView = this;\n while (monthView.nextMonthView) {\n monthView = monthView.nextMonthView;\n }\n return monthView;\n }\n /**\n * @hidden\n */\n get isSingleSelection() {\n return this.selection !== CalendarSelection.RANGE;\n }\n}\nIgxDaysViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDaysViewComponent, deps: [{ token: IgxDaysViewNavigationService }, { token: PlatformUtil }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component });\nIgxDaysViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDaysViewComponent, selector: \"igx-days-view\", inputs: { id: \"id\", changeDaysView: \"changeDaysView\", showWeekNumbers: \"showWeekNumbers\", activeDate: \"activeDate\" }, outputs: { dateSelection: \"dateSelection\", viewChanging: \"viewChanging\", activeDateChange: \"activeDateChange\", monthsViewBlur: \"monthsViewBlur\" }, host: { listeners: { \"focusout\": \"resetActiveMonth()\", \"keydown.pagedown\": \"pointerDown()\", \"keydown.pageup\": \"pointerDown()\", \"keydown.shift.pagedown\": \"pointerDown()\", \"keydown.shift.pageup\": \"pointerDown()\", \"pointerdown\": \"pointerDown()\", \"keydown.arrowleft\": \"onKeydownArrow($event)\", \"keydown.arrowright\": \"onKeydownArrow($event)\", \"keydown.arrowup\": \"onKeydownArrow($event)\", \"keydown.arrowdown\": \"onKeydownArrow($event)\", \"keydown.home\": \"onKeydownHome($event)\", \"keydown.end\": \"onKeydownEnd($event)\" }, properties: { \"attr.id\": \"this.id\", \"class.igx-calendar\": \"this.styleClass\" } }, providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: IgxDaysViewComponent\n },\n { provide: IgxDaysViewNavigationService, useClass: IgxDaysViewNavigationService }\n ], viewQueries: [{ propertyName: \"dates\", predicate: IgxDayItemComponent, descendants: true, read: IgxDayItemComponent }], usesInheritance: true, ngImport: i0, template: \"
    \\n
    \\n Wk\\n
    \\n \\n {{ dayName | titlecase }}\\n \\n
    \\n\\n
    \\n\\n
    \\n\\n \\n {{getWeekNumber(week[0].date)}}\\n \\n\\n
    \\n\\n \\n \\n {{ formattedDate(day.date) }}\\n \\n
    \\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxDayItemComponent, selector: \"igx-day-item\", inputs: [\"date\", \"selection\", \"selected\", \"disabledDates\", \"outOfRangeDates\", \"specialDates\", \"hideOutsideDays\", \"isLastInRange\", \"isFirstInRange\", \"isWithinRange\"], outputs: [\"dateSelection\"] }, { kind: \"pipe\", type: i1$1.TitleCasePipe, name: \"titlecase\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDaysViewComponent, decorators: [{\n type: Component,\n args: [{ providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: IgxDaysViewComponent\n },\n { provide: IgxDaysViewNavigationService, useClass: IgxDaysViewNavigationService }\n ], selector: 'igx-days-view', template: \"
    \\n
    \\n Wk\\n
    \\n \\n {{ dayName | titlecase }}\\n \\n
    \\n\\n
    \\n\\n
    \\n\\n \\n {{getWeekNumber(week[0].date)}}\\n \\n\\n
    \\n\\n \\n \\n {{ formattedDate(day.date) }}\\n \\n
    \\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: IgxDaysViewNavigationService }, { type: PlatformUtil }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }];\n }, propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], changeDaysView: [{\n type: Input\n }], showWeekNumbers: [{\n type: Input\n }], activeDate: [{\n type: Input\n }], dateSelection: [{\n type: Output\n }], viewChanging: [{\n type: Output\n }], activeDateChange: [{\n type: Output\n }], monthsViewBlur: [{\n type: Output\n }], dates: [{\n type: ViewChildren,\n args: [IgxDayItemComponent, { read: IgxDayItemComponent }]\n }], styleClass: [{\n type: HostBinding,\n args: ['class.igx-calendar']\n }], resetActiveMonth: [{\n type: HostListener,\n args: ['focusout']\n }], pointerDown: [{\n type: HostListener,\n args: ['keydown.pagedown']\n }, {\n type: HostListener,\n args: ['keydown.pageup']\n }, {\n type: HostListener,\n args: ['keydown.shift.pagedown']\n }, {\n type: HostListener,\n args: ['keydown.shift.pageup']\n }, {\n type: HostListener,\n args: ['pointerdown']\n }], onKeydownArrow: [{\n type: HostListener,\n args: ['keydown.arrowleft', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.arrowright', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.arrowup', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.arrowdown', ['$event']]\n }], onKeydownHome: [{\n type: HostListener,\n args: ['keydown.home', ['$event']]\n }], onKeydownEnd: [{\n type: HostListener,\n args: ['keydown.end', ['$event']]\n }] } });\n\nclass IgxMonthViewSlotsCalendar {\n transform(monthViews) {\n return new Array(monthViews);\n }\n}\nIgxMonthViewSlotsCalendar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMonthViewSlotsCalendar, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxMonthViewSlotsCalendar.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMonthViewSlotsCalendar, name: \"IgxMonthViewSlots\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMonthViewSlotsCalendar, decorators: [{\n type: Pipe,\n args: [{\n name: 'IgxMonthViewSlots'\n }]\n }] });\nclass IgxGetViewDateCalendar {\n constructor() {\n this.calendar = new Calendar();\n }\n transform(index, viewDate, wholeDate = true) {\n const date = this.calendar.timedelta(viewDate, 'month', index);\n return wholeDate ? date : date.getMonth();\n }\n}\nIgxGetViewDateCalendar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGetViewDateCalendar, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGetViewDateCalendar.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGetViewDateCalendar, name: \"IgxGetViewDate\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGetViewDateCalendar, decorators: [{\n type: Pipe,\n args: [{\n name: 'IgxGetViewDate'\n }]\n }], ctorParameters: function () { return []; } });\n\nlet NEXT_ID$i = 0;\n/**\n * Calendar provides a way to display date information.\n *\n * @igxModule IgxCalendarModule\n *\n * @igxTheme igx-calendar-theme, igx-icon-theme\n *\n * @igxKeywords calendar, datepicker, schedule, date\n *\n * @igxGroup Scheduling\n *\n * @remarks\n * The Ignite UI Calendar provides an easy way to display a calendar and allow users to select dates using single, multiple\n * or range selection.\n *\n * @example:\n * ```html\n * \n * ```\n */\nclass IgxCalendarComponent extends IgxMonthPickerBaseDirective {\n constructor() {\n super(...arguments);\n /**\n * Sets/gets the `id` of the calendar.\n *\n * @remarks\n * If not set, the `id` will have value `\"igx-calendar-0\"`.\n *\n * @example\n * ```html\n * \n * ```\n * @memberof IgxCalendarComponent\n */\n this.id = `igx-calendar-${NEXT_ID$i++}`;\n /**\n * Sets/gets whether the calendar has header.\n * Default value is `true`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.hasHeader = true;\n /**\n * Sets/gets whether the calendar header will be in vertical position.\n * Default value is `false`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.vertical = false;\n /**\n * Show/hide week numbers\n *\n * @example\n * ```html\n * \n * ``\n */\n this.showWeekNumbers = false;\n /**\n * Apply the different states for the transitions of animateChange\n *\n * @hidden\n * @internal\n */\n this.animationAction = '';\n /**\n * The default css class applied to the component.\n *\n * @hidden\n * @internal\n */\n this.styleClass = true;\n /**\n * @hidden\n * @internal\n */\n this.activeDate = new Date().toLocaleDateString();\n /**\n * Denote if the calendar view was changed with the keyboard\n *\n * @hidden\n * @internal\n */\n this.isKeydownTrigger = false;\n /**\n * @hidden\n * @internal\n */\n this._monthsViewNumber = 1;\n /**\n * Continious navigation through the previous months\n *\n * @hidden\n * @internal\n */\n this.startPrevMonthScroll = (isKeydownTrigger = false) => {\n this.startMonthScroll$.next();\n this.monthScrollDirection = ScrollMonth.PREV;\n this.animationAction = ScrollMonth.PREV;\n this.previousMonth(isKeydownTrigger);\n };\n /**\n * Continious navigation through the next months\n *\n * @hidden\n * @internal\n */\n this.startNextMonthScroll = (isKeydownTrigger = false) => {\n this.startMonthScroll$.next();\n this.monthScrollDirection = ScrollMonth.NEXT;\n this.animationAction = ScrollMonth.NEXT;\n this.nextMonth(isKeydownTrigger);\n };\n /**\n * Stop continuous navigation\n *\n * @hidden\n * @internal\n */\n this.stopMonthScroll = (event) => {\n event.stopPropagation();\n // generally the scrolling is built on the calendar component\n // and all start/stop scrolling methods are called on the calendar\n // if we change below lines to call stopMonthScroll$ on the calendar instead of on the views,\n // strange bug is introduced --> after changing number of months, continuous scrolling on mouse click does not happen\n this.daysView.stopMonthScroll$.next(true);\n this.daysView.stopMonthScroll$.complete();\n if (this.monthScrollDirection === ScrollMonth.PREV) {\n this.prevMonthBtn.nativeElement.focus();\n }\n else if (this.monthScrollDirection === ScrollMonth.NEXT) {\n this.nextMonthBtn.nativeElement.focus();\n }\n if (this.platform.isActivationKey(event)) {\n this.resetActiveDate();\n }\n this.monthScrollDirection = ScrollMonth.NONE;\n };\n }\n /**\n * Sets/gets the number of month views displayed.\n * Default value is `1`.\n *\n * @example\n * ```html\n * \n * ```\n */\n get monthsViewNumber() {\n return this._monthsViewNumber;\n }\n set monthsViewNumber(val) {\n if (val < 1) {\n return;\n }\n this._monthsViewNumber = val;\n }\n /**\n * The default css class applied to the component.\n *\n * @hidden\n * @internal\n */\n get styleVerticalClass() {\n return this.vertical;\n }\n /**\n * Denote if the year view is active.\n *\n * @hidden\n * @internal\n */\n get isYearView() {\n return this.activeView === CalendarView.YEAR || this.activeView === IgxCalendarView.Year;\n }\n /**\n * Gets the header template.\n *\n * @example\n * ```typescript\n * let headerTemplate = this.calendar.headerTeamplate;\n * ```\n * @memberof IgxCalendarComponent\n */\n get headerTemplate() {\n if (this.headerTemplateDirective) {\n return this.headerTemplateDirective.template;\n }\n return null;\n }\n /**\n * Sets the header template.\n *\n * @example\n * ```html\n * \n * ```\n * @memberof IgxCalendarComponent\n */\n set headerTemplate(directive) {\n this.headerTemplateDirective = directive;\n }\n /**\n * Gets the subheader template.\n *\n * @example\n * ```typescript\n * let subheaderTemplate = this.calendar.subheaderTemplate;\n * ```\n */\n get subheaderTemplate() {\n if (this.subheaderTemplateDirective) {\n return this.subheaderTemplateDirective.template;\n }\n return null;\n }\n /**\n * Sets the subheader template.\n *\n * @example\n * ```html\n * \n * ```\n * @memberof IgxCalendarComponent\n */\n set subheaderTemplate(directive) {\n this.subheaderTemplateDirective = directive;\n }\n /**\n * Gets the context for the template marked with the `igxCalendarHeader` directive.\n *\n * @example\n * ```typescript\n * let headerContext = this.calendar.headerContext;\n * ```\n */\n get headerContext() {\n const date = this.headerDate;\n return this.generateContext(date);\n }\n /**\n * Gets the context for the template marked with either `igxCalendarSubHeaderMonth`\n * or `igxCalendarSubHeaderYear` directive.\n *\n * @example\n * ```typescript\n * let context = this.calendar.context;\n * ```\n */\n get context() {\n const date = this.viewDate;\n return this.generateContext(date);\n }\n /**\n * Date displayed in header\n *\n * @hidden\n * @internal\n */\n get headerDate() {\n return this.selectedDates ? this.selectedDates : new Date();\n }\n /**\n * Keyboard navigation of the calendar\n *\n * @hidden\n * @internal\n */\n onKeydownPageDown(event) {\n event.preventDefault();\n if (!this.isDefaultView) {\n return;\n }\n const isPageDown = event.key === 'PageDown';\n const step = isPageDown ? 1 : -1;\n let monthView = this.daysView;\n let activeDate;\n while (!activeDate && monthView) {\n activeDate = monthView.dates.find((date) => date.nativeElement === document.activeElement);\n monthView = monthView.nextMonthView;\n }\n if (activeDate) {\n this.nextDate = new Date(activeDate.date.date);\n let year = this.nextDate.getFullYear();\n let month = this.nextDate.getMonth() + step;\n if (isPageDown) {\n if (month > 11) {\n month = 0;\n year += step;\n }\n }\n else {\n if (month < 0) {\n month = 11;\n year += step;\n }\n }\n const range = monthRange(this.nextDate.getFullYear(), month);\n let day = this.nextDate.getDate();\n if (day > range[1]) {\n day = range[1];\n }\n this.nextDate.setDate(day);\n this.nextDate.setMonth(month);\n this.nextDate.setFullYear(year);\n this.callback = (next) => {\n monthView = this.daysView;\n let dayItem;\n while ((!dayItem && monthView) || (dayItem && !dayItem.isCurrentMonth)) {\n dayItem = monthView.dates.find((d) => d.date.date.getTime() === next.getTime());\n monthView = monthView.nextMonthView;\n }\n if (dayItem && dayItem.isFocusable) {\n dayItem.nativeElement.focus();\n }\n };\n }\n if (isPageDown) {\n if (event.repeat) {\n requestAnimationFrame(() => this.nextMonth(true));\n }\n else {\n this.nextMonth(true);\n }\n }\n else {\n if (event.repeat) {\n requestAnimationFrame(() => this.previousMonth(true));\n }\n else {\n this.previousMonth(true);\n }\n }\n }\n /**\n * Keyboard navigation of the calendar\n *\n * @hidden\n * @internal\n */\n onKeydownShiftPageUp(event) {\n event.preventDefault();\n if (!this.isDefaultView) {\n return;\n }\n const isPageDown = event.key === 'PageDown';\n const step = isPageDown ? 1 : -1;\n this.previousViewDate = this.viewDate;\n this.viewDate = this.calendarModel.timedelta(this.viewDate, 'year', step);\n this.animationAction = isPageDown ? ScrollMonth.NEXT : ScrollMonth.PREV;\n this.isKeydownTrigger = true;\n let monthView = this.daysView;\n let activeDate;\n while (!activeDate && monthView) {\n activeDate = monthView.dates.find((date) => date.nativeElement === document.activeElement);\n monthView = monthView.nextMonthView;\n }\n if (activeDate) {\n this.nextDate = new Date(activeDate.date.date);\n const year = this.nextDate.getFullYear() + step;\n const range = monthRange(year, this.nextDate.getMonth());\n let day = this.nextDate.getDate();\n if (day > range[1]) {\n day = range[1];\n }\n this.nextDate.setDate(day);\n this.nextDate.setFullYear(year);\n this.callback = (next) => {\n monthView = this.daysView;\n let dayItem;\n while ((!dayItem && monthView) || (dayItem && !dayItem.isCurrentMonth)) {\n dayItem = monthView.dates.find((d) => d.date.date.getTime() === next.getTime());\n monthView = monthView.nextMonthView;\n }\n if (dayItem && dayItem.isFocusable) {\n dayItem.nativeElement.focus();\n }\n };\n }\n }\n /**\n * Keyboard navigation of the calendar\n *\n * @hidden\n * @internal\n */\n onKeydownHome(event) {\n if (this.daysView) {\n this.daysView.onKeydownHome(event);\n }\n }\n /**\n * Keyboard navigation of the calendar\n *\n * @hidden\n * @internal\n */\n onKeydownEnd(event) {\n if (this.daysView) {\n this.daysView.onKeydownEnd(event);\n }\n }\n /**\n * Stop continuous navigation on mouseup event\n *\n * @hidden\n * @internal\n */\n onMouseUp(event) {\n if (this.monthScrollDirection !== ScrollMonth.NONE) {\n this.stopMonthScroll(event);\n }\n }\n ngAfterViewInit() {\n this.setSiblingMonths(this.monthViews);\n this._monthViewsChanges$ = this.monthViews.changes.subscribe(c => {\n this.setSiblingMonths(c);\n });\n this.startMonthScroll$.pipe(takeUntil(this.stopMonthScroll$), switchMap(() => this.scrollMonth$.pipe(skipLast(1), debounce(() => interval(300)), takeUntil(this.stopMonthScroll$)))).subscribe(() => {\n switch (this.monthScrollDirection) {\n case ScrollMonth.PREV:\n this.previousMonth();\n break;\n case ScrollMonth.NEXT:\n this.nextMonth();\n break;\n case ScrollMonth.NONE:\n default:\n break;\n }\n });\n }\n /**\n * Returns the locale representation of the month in the month view if enabled,\n * otherwise returns the default `Date.getMonth()` value.\n *\n * @hidden\n * @internal\n */\n formattedMonth(value) {\n if (this.formatViews.month) {\n return this.formatterMonth.format(value);\n }\n return `${value.getMonth()}`;\n }\n /**\n * Change to previous month\n *\n * @hidden\n * @internal\n */\n previousMonth(isKeydownTrigger = false) {\n if (isKeydownTrigger && this.animationAction === ScrollMonth.NEXT) {\n return;\n }\n this.previousViewDate = this.viewDate;\n this.viewDate = this.calendarModel.getPrevMonth(this.viewDate);\n this.animationAction = ScrollMonth.PREV;\n this.isKeydownTrigger = isKeydownTrigger;\n }\n suppressBlur() {\n var _a;\n (_a = this.monthViews) === null || _a === void 0 ? void 0 : _a.forEach(d => d.shouldResetDate = false);\n if (this.daysView) {\n this.daysView.shouldResetDate = false;\n }\n }\n /**\n * Change to next month\n *\n * @hidden\n * @internal\n */\n nextMonth(isKeydownTrigger = false) {\n if (isKeydownTrigger && this.animationAction === 'prev') {\n return;\n }\n this.isKeydownTrigger = isKeydownTrigger;\n this.previousViewDate = this.viewDate;\n this.viewDate = this.calendarModel.getNextMonth(this.viewDate);\n this.animationAction = ScrollMonth.NEXT;\n }\n /**\n * @hidden\n * @internal\n */\n onActiveViewDecade(args, activeViewIdx) {\n super.activeViewDecade(activeViewIdx);\n requestAnimationFrame(() => {\n if (this.dacadeView) {\n this.dacadeView.date = args;\n this.dacadeView.calendarDir.find(date => date.isCurrentYear).nativeElement.focus();\n }\n });\n }\n /**\n * @hidden\n * @internal\n */\n onActiveViewDecadeKB(event, args, activeViewIdx) {\n super.activeViewDecadeKB(event, activeViewIdx);\n requestAnimationFrame(() => {\n if (this.dacadeView) {\n this.dacadeView.date = args;\n this.dacadeView.calendarDir.find(date => date.isCurrentYear).nativeElement.focus();\n }\n });\n }\n /**\n * @hidden\n * @internal\n */\n getFormattedDate() {\n const date = this.headerDate;\n return {\n monthday: this.formatterMonthday.format(date),\n weekday: this.formatterWeekday.format(date),\n };\n }\n /**\n * Handles invoked on date selection\n *\n * @hidden\n * @internal\n */\n childClicked(instance) {\n if (instance.isPrevMonth) {\n this.previousMonth();\n }\n if (instance.isNextMonth) {\n this.nextMonth();\n }\n // selectDateFromClient is called both here and in days-view.component\n // when multiple months are in view, 'shiftKey' and 'lastSelectedDate'\n // should be set before and after selectDateFromClient\n // in order all views to have the same values for these properties\n this.monthViews.forEach(m => {\n m.shiftKey = this.shiftKey;\n m.lastSelectedDate = this.lastSelectedDate;\n });\n this.selectDateFromClient(instance.date);\n if (this.selection === 'multi' && this._deselectDate) {\n this.deselectDateInMonthViews(instance.date);\n }\n this.selected.emit(this.selectedDates);\n this.monthViews.forEach(m => {\n m.shiftKey = this.shiftKey;\n m.lastSelectedDate = this.lastSelectedDate;\n });\n }\n /**\n * @hidden\n * @internal\n */\n viewChanging(args) {\n this.animationAction = args.monthAction;\n this.isKeydownTrigger = true;\n this.nextDate = args.nextDate;\n this.callback = (next) => {\n const day = this.daysView.dates.find((item) => item.date.date.getTime() === next.getTime());\n if (day) {\n this.daysView.daysNavService.focusNextDate(day.nativeElement, args.key, true);\n }\n };\n this.previousViewDate = this.viewDate;\n this.viewDate = this.nextDate;\n }\n /**\n * @hidden\n * @intenal\n */\n changeMonth(event) {\n this.previousViewDate = this.viewDate;\n this.viewDate = this.calendarModel.getFirstViewDate(event, 'month', this.activeViewIdx);\n this.activeView = IgxCalendarView.Month;\n requestAnimationFrame(() => {\n const elem = this.monthsBtns.find((e, idx) => idx === this.activeViewIdx);\n if (elem) {\n elem.nativeElement.focus();\n }\n });\n }\n /**\n * @hidden\n * @internal\n */\n onActiveViewYear(args, activeViewIdx) {\n this.activeView = IgxCalendarView.Year;\n this.activeViewIdx = activeViewIdx;\n requestAnimationFrame(() => {\n this.monthsView.date = args;\n this.focusMonth();\n });\n }\n /**\n * @hidden\n * @internal\n */\n onActiveViewYearKB(args, event, activeViewIdx) {\n if (this.platform.isActivationKey(event)) {\n event.preventDefault();\n this.onActiveViewYear(args, activeViewIdx);\n }\n }\n /**\n * Deselects date(s) (based on the selection type).\n *\n * @example\n * ```typescript\n * this.calendar.deselectDate(new Date(`2018-06-12`));\n * ````\n */\n deselectDate(value) {\n super.deselectDate(value);\n this.monthViews.forEach((view) => {\n view.selectedDates = this.selectedDates;\n view.rangeStarted = false;\n });\n this._onChangeCallback(this.selectedDates);\n }\n /**\n * @hidden\n * @internal\n */\n getViewDate(i) {\n const date = this.calendarModel.timedelta(this.viewDate, 'month', i);\n return date;\n }\n /**\n * Getter for the context object inside the calendar templates.\n *\n * @hidden\n * @internal\n */\n getContext(i) {\n const date = this.getViewDate(i);\n return this.generateContext(date, i);\n }\n /**\n * @hidden\n * @internal\n */\n animationDone(event) {\n if ((event.fromState === ScrollMonth.NONE && (event.toState === ScrollMonth.PREV || event.toState === ScrollMonth.NEXT)) ||\n (event.fromState === 'void' && event.toState === ScrollMonth.NONE)) {\n this.viewDateChanged.emit({ previousValue: this.previousViewDate, currentValue: this.viewDate });\n }\n if (!this.isKeydownTrigger) {\n this.resetActiveDate();\n }\n if (this.monthScrollDirection !== ScrollMonth.NONE) {\n this.scrollMonth$.next();\n }\n if (!this.isDefaultView) {\n return;\n }\n let monthView = this.daysView;\n let date = monthView.dates.find((d) => d.selected);\n while (!date && monthView.nextMonthView) {\n monthView = monthView.nextMonthView;\n date = monthView.dates.find((d) => d.selected);\n }\n if (date && date.isFocusable && !this.isKeydownTrigger) {\n setTimeout(() => {\n date.nativeElement.focus();\n }, parseInt(slideInRight.options.params.duration, 10));\n }\n else if (this.callback && (event.toState === ScrollMonth.NEXT || event.toState === ScrollMonth.PREV)) {\n this.callback(this.nextDate);\n }\n this.animationAction = ScrollMonth.NONE;\n }\n /**\n * @hidden\n * @internal\n */\n viewRendered(event) {\n if (event.fromState !== 'void') {\n this.activeViewChanged.emit(this.activeView);\n if (this.isDefaultView) {\n this.resetActiveDate();\n }\n }\n }\n /**\n * @hidden\n * @internal\n */\n resetActiveDate() {\n if (!this.monthViews) {\n return;\n }\n let dates = [];\n this.monthViews.map(mv => mv.dates).forEach(days => {\n dates = dates.concat(days.toArray());\n });\n const date = dates.find(day => day.selected && day.isCurrentMonth) || dates.find(day => day.isToday && day.isCurrentMonth)\n || dates.find(d => d.isFocusable);\n if (date) {\n this.activeDate = date.date.date.toLocaleDateString();\n }\n }\n /**\n * @hidden\n * @internal\n */\n ngOnDestroy() {\n if (this._monthViewsChanges$) {\n this._monthViewsChanges$.unsubscribe();\n }\n }\n /**\n * @hidden\n * @internal\n */\n getPrevMonth(date) {\n return this.calendarModel.getPrevMonth(date);\n }\n /**\n * @hidden\n * @internal\n */\n getNextMonth(date, viewIndex) {\n return this.calendarModel.getDateByView(date, 'Month', viewIndex);\n }\n /**\n * Helper method building and returning the context object inside\n * the calendar templates.\n *\n * @hidden\n * @internal\n */\n generateContext(value, i) {\n const formatObject = Object.assign({ index: i, monthView: () => this.onActiveViewYear(value, i), yearView: () => this.onActiveViewDecade(value, i) }, this.calendarModel.formatToParts(value, this.locale, this.formatOptions, ['era', 'year', 'month', 'day', 'weekday']));\n return { $implicit: formatObject };\n }\n /**\n * Helper method that sets references for prev/next months for each month in the view\n *\n * @hidden\n * @internal\n */\n setSiblingMonths(monthViews) {\n monthViews.forEach((item, index) => {\n const prevMonthView = this.getMonthView(index - 1);\n const nextMonthView = this.getMonthView(index + 1);\n item.nextMonthView = nextMonthView;\n item.prevMonthView = prevMonthView;\n });\n }\n /**\n * Helper method returning previous/next day views\n *\n * @hidden\n * @internal\n */\n getMonthView(index) {\n if (index === -1 || index === this.monthViews.length) {\n return null;\n }\n else {\n return this.monthViews.toArray()[index];\n }\n }\n /**\n * Helper method that does deselection for all month views when selection is \"multi\"\n * If not called, selection in other month views stays\n *\n * @hidden\n * @internal\n */\n deselectDateInMonthViews(value) {\n this.monthViews.forEach(m => {\n m.deselectMultipleInMonth(value);\n });\n }\n focusMonth() {\n const month = this.monthsView.monthsRef.find((e) => e.index === this.monthsView.date.getMonth());\n if (month) {\n month.nativeElement.focus();\n }\n }\n}\nIgxCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCalendarComponent, selector: \"igx-calendar\", inputs: { id: \"id\", hasHeader: \"hasHeader\", vertical: \"vertical\", monthsViewNumber: \"monthsViewNumber\", showWeekNumbers: \"showWeekNumbers\", animationAction: \"animationAction\" }, host: { listeners: { \"keydown.pagedown\": \"onKeydownPageDown($event)\", \"keydown.pageup\": \"onKeydownPageDown($event)\", \"keydown.shift.pageup\": \"onKeydownShiftPageUp($event)\", \"keydown.shift.pagedown\": \"onKeydownShiftPageUp($event)\", \"keydown.home\": \"onKeydownHome($event)\", \"keydown.end\": \"onKeydownEnd($event)\", \"document:mouseup\": \"onMouseUp($event)\" }, properties: { \"attr.id\": \"this.id\", \"class.igx-calendar--vertical\": \"this.styleVerticalClass\", \"class.igx-calendar\": \"this.styleClass\" } }, providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: IgxCalendarComponent\n }\n ], queries: [{ propertyName: \"headerTemplateDirective\", first: true, predicate: i0.forwardRef(function () { return IgxCalendarHeaderTemplateDirective; }), descendants: true, read: IgxCalendarHeaderTemplateDirective, static: true }, { propertyName: \"subheaderTemplateDirective\", first: true, predicate: i0.forwardRef(function () { return IgxCalendarSubheaderTemplateDirective; }), descendants: true, read: IgxCalendarSubheaderTemplateDirective, static: true }], viewQueries: [{ propertyName: \"monthsView\", first: true, predicate: [\"months\"], descendants: true, read: IgxMonthsViewComponent }, { propertyName: \"dacadeView\", first: true, predicate: [\"decade\"], descendants: true, read: IgxYearsViewComponent }, { propertyName: \"daysView\", first: true, predicate: [\"days\"], descendants: true, read: IgxDaysViewComponent }, { propertyName: \"prevMonthBtn\", first: true, predicate: [\"prevMonthBtn\"], descendants: true }, { propertyName: \"nextMonthBtn\", first: true, predicate: [\"nextMonthBtn\"], descendants: true }, { propertyName: \"monthsBtns\", predicate: [\"monthsBtn\"], descendants: true }, { propertyName: \"monthViews\", predicate: [\"days\"], descendants: true, read: IgxDaysViewComponent }], usesInheritance: true, ngImport: i0, template: \"\\n {{ getFormattedDate().weekday }}, \\n {{ getFormattedDate().monthday }}\\n\\n\\n\\n \\n {{ monthsViewNumber > 1 ? (resourceStrings.igx_calendar_first_picker_of.replace('{0}', monthsViewNumber.toString()) + ' ' + (getViewDate(obj.index) | date: 'LLLL yyyy')) : resourceStrings.igx_calendar_selected_month_is + (getViewDate(obj.index) | date: 'LLLL yyyy')}}\\n \\n \\n {{ formattedMonth(getViewDate(obj.index)) }}\\n \\n\\n \\n {{ formattedYear(getViewDate(obj.index)) }}\\n \\n\\n\\n\\n\\n
    \\n {{ formattedYear(headerDate) }}\\n
    \\n\\n

    \\n \\n \\n

    \\n\\n\\n
    \\n
    \\n \\n \\n {{ monthsViewNumber && monthsViewNumber > 1 ? resourceStrings.igx_calendar_multi_selection.replace('{0}', monthsViewNumber.toString()) : resourceStrings.igx_calendar_singular_multi_selection}}\\n \\n \\n {{ monthsViewNumber && monthsViewNumber > 1 ? resourceStrings.igx_calendar_range_selection.replace('{0}', monthsViewNumber.toString()) : resourceStrings.igx_calendar_singular_range_selection}}\\n \\n \\n {{ monthsViewNumber && monthsViewNumber > 1 ? resourceStrings.igx_calendar_single_selection.replace('{0}', monthsViewNumber.toString()) : resourceStrings.igx_calendar_singular_single_selection}}\\n \\n \\n \\n keyboard_arrow_left\\n
    \\n
    \\n \\n \\n
    \\n \\n keyboard_arrow_right\\n \\n \\n\\n
    \\n \\n \\n
    \\n\\n\\n\\n\\n\\n\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"component\", type: IgxDaysViewComponent, selector: \"igx-days-view\", inputs: [\"id\", \"changeDaysView\", \"showWeekNumbers\", \"activeDate\"], outputs: [\"dateSelection\", \"viewChanging\", \"activeDateChange\", \"monthsViewBlur\"] }, { kind: \"directive\", type: IgxCalendarScrollMonthDirective, selector: \"[igxCalendarScrollMonth]\", inputs: [\"startScroll\", \"stopScroll\"] }, { kind: \"component\", type: IgxMonthsViewComponent, selector: \"igx-months-view\", inputs: [\"id\", \"date\", \"monthFormat\", \"locale\", \"formatView\"], outputs: [\"selected\"] }, { kind: \"component\", type: IgxYearsViewComponent, selector: \"igx-years-view\", inputs: [\"formatView\", \"date\", \"yearFormat\", \"locale\"], outputs: [\"selected\"] }, { kind: \"pipe\", type: i1$1.DatePipe, name: \"date\" }, { kind: \"pipe\", type: IgxMonthViewSlotsCalendar, name: \"IgxMonthViewSlots\" }, { kind: \"pipe\", type: IgxGetViewDateCalendar, name: \"IgxGetViewDate\" }], animations: [\n trigger('animateView', [\n transition('void => 0', useAnimation(fadeIn)),\n transition('void => *', useAnimation(scaleInCenter, {\n params: {\n duration: '.2s',\n fromScale: .9\n }\n }))\n ]),\n trigger('animateChange', [\n transition('* => prev', useAnimation(slideInLeft, {\n params: {\n fromPosition: 'translateX(-30%)'\n }\n })),\n transition('* => next', useAnimation(slideInRight, {\n params: {\n fromPosition: 'translateX(30%)'\n }\n }))\n ])\n ] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarComponent, decorators: [{\n type: Component,\n args: [{ providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: IgxCalendarComponent\n }\n ], animations: [\n trigger('animateView', [\n transition('void => 0', useAnimation(fadeIn)),\n transition('void => *', useAnimation(scaleInCenter, {\n params: {\n duration: '.2s',\n fromScale: .9\n }\n }))\n ]),\n trigger('animateChange', [\n transition('* => prev', useAnimation(slideInLeft, {\n params: {\n fromPosition: 'translateX(-30%)'\n }\n })),\n transition('* => next', useAnimation(slideInRight, {\n params: {\n fromPosition: 'translateX(30%)'\n }\n }))\n ])\n ], selector: 'igx-calendar', template: \"\\n {{ getFormattedDate().weekday }}, \\n {{ getFormattedDate().monthday }}\\n\\n\\n\\n \\n {{ monthsViewNumber > 1 ? (resourceStrings.igx_calendar_first_picker_of.replace('{0}', monthsViewNumber.toString()) + ' ' + (getViewDate(obj.index) | date: 'LLLL yyyy')) : resourceStrings.igx_calendar_selected_month_is + (getViewDate(obj.index) | date: 'LLLL yyyy')}}\\n \\n \\n {{ formattedMonth(getViewDate(obj.index)) }}\\n \\n\\n \\n {{ formattedYear(getViewDate(obj.index)) }}\\n \\n\\n\\n\\n\\n
    \\n {{ formattedYear(headerDate) }}\\n
    \\n\\n

    \\n \\n \\n

    \\n\\n\\n
    \\n
    \\n \\n \\n {{ monthsViewNumber && monthsViewNumber > 1 ? resourceStrings.igx_calendar_multi_selection.replace('{0}', monthsViewNumber.toString()) : resourceStrings.igx_calendar_singular_multi_selection}}\\n \\n \\n {{ monthsViewNumber && monthsViewNumber > 1 ? resourceStrings.igx_calendar_range_selection.replace('{0}', monthsViewNumber.toString()) : resourceStrings.igx_calendar_singular_range_selection}}\\n \\n \\n {{ monthsViewNumber && monthsViewNumber > 1 ? resourceStrings.igx_calendar_single_selection.replace('{0}', monthsViewNumber.toString()) : resourceStrings.igx_calendar_singular_single_selection}}\\n \\n \\n \\n keyboard_arrow_left\\n
    \\n
    \\n \\n \\n
    \\n \\n keyboard_arrow_right\\n \\n \\n\\n
    \\n \\n \\n
    \\n\\n\\n\\n\\n\\n\\n\\n\" }]\n }], propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], hasHeader: [{\n type: Input\n }], vertical: [{\n type: Input\n }], monthsViewNumber: [{\n type: Input\n }], showWeekNumbers: [{\n type: Input\n }], animationAction: [{\n type: Input\n }], styleVerticalClass: [{\n type: HostBinding,\n args: ['class.igx-calendar--vertical']\n }], styleClass: [{\n type: HostBinding,\n args: ['class.igx-calendar']\n }], monthsView: [{\n type: ViewChild,\n args: ['months', { read: IgxMonthsViewComponent }]\n }], monthsBtns: [{\n type: ViewChildren,\n args: ['monthsBtn']\n }], dacadeView: [{\n type: ViewChild,\n args: ['decade', { read: IgxYearsViewComponent }]\n }], daysView: [{\n type: ViewChild,\n args: ['days', { read: IgxDaysViewComponent }]\n }], monthViews: [{\n type: ViewChildren,\n args: ['days', { read: IgxDaysViewComponent }]\n }], prevMonthBtn: [{\n type: ViewChild,\n args: ['prevMonthBtn']\n }], nextMonthBtn: [{\n type: ViewChild,\n args: ['nextMonthBtn']\n }], headerTemplateDirective: [{\n type: ContentChild,\n args: [forwardRef(() => IgxCalendarHeaderTemplateDirective), { read: IgxCalendarHeaderTemplateDirective, static: true }]\n }], subheaderTemplateDirective: [{\n type: ContentChild,\n args: [forwardRef(() => IgxCalendarSubheaderTemplateDirective), { read: IgxCalendarSubheaderTemplateDirective, static: true }]\n }], onKeydownPageDown: [{\n type: HostListener,\n args: ['keydown.pagedown', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.pageup', ['$event']]\n }], onKeydownShiftPageUp: [{\n type: HostListener,\n args: ['keydown.shift.pageup', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.shift.pagedown', ['$event']]\n }], onKeydownHome: [{\n type: HostListener,\n args: ['keydown.home', ['$event']]\n }], onKeydownEnd: [{\n type: HostListener,\n args: ['keydown.end', ['$event']]\n }], onMouseUp: [{\n type: HostListener,\n args: ['document:mouseup', ['$event']]\n }] } });\n\nlet NEXT_ID$h = 0;\nclass IgxMonthPickerComponent extends IgxMonthPickerBaseDirective {\n constructor() {\n super(...arguments);\n /**\n * Sets/gets the `id` of the month picker.\n * If not set, the `id` will have value `\"igx-month-picker-0\"`.\n */\n this.id = `igx-month-picker-${NEXT_ID$h++}`;\n /**\n * The default css class applied to the component.\n *\n * @hidden\n */\n this.styleClass = true;\n /**\n * @hidden\n */\n this.yearAction = '';\n }\n /**\n * @hidden\n */\n previousYear(event) {\n event === null || event === void 0 ? void 0 : event.preventDefault();\n if (event && this.yearAction === 'next') {\n return;\n }\n this.yearAction = 'prev';\n this.previousViewDate = this.viewDate;\n this.viewDate = this.calendarModel.getPrevYear(this.viewDate);\n }\n /**\n * @hidden\n */\n nextYear(event) {\n event === null || event === void 0 ? void 0 : event.preventDefault();\n if (event && this.yearAction === 'prev') {\n return;\n }\n this.yearAction = 'next';\n this.previousViewDate = this.viewDate;\n this.viewDate = this.calendarModel.getNextYear(this.viewDate);\n }\n /**\n * @hidden\n */\n onKeydownHome(event) {\n if (this.monthsView) {\n this.monthsView.el.nativeElement.focus();\n this.monthsView.onKeydownHome(event);\n }\n }\n /**\n * @hidden\n */\n onKeydownEnd(event) {\n if (this.monthsView) {\n this.monthsView.el.nativeElement.focus();\n this.monthsView.onKeydownEnd(event);\n }\n }\n /**\n * @hidden\n */\n animationDone(event) {\n if ((event.fromState === 'void' && event.toState === '') ||\n (event.fromState === '' && (event.toState === ScrollMonth.PREV || event.toState === ScrollMonth.NEXT))) {\n this.viewDateChanged.emit({ previousValue: this.previousViewDate, currentValue: this.viewDate });\n }\n this.yearAction = '';\n }\n /**\n * @hidden\n */\n viewRendered(event) {\n if (event.fromState !== 'void') {\n this.activeViewChanged.emit(this.activeView);\n }\n }\n /**\n * @hidden\n */\n activeViewDecadeKB(event) {\n super.activeViewDecadeKB(event);\n if (event.key === this.platform.KEYMAP.ARROW_RIGHT) {\n this.nextYear(event);\n }\n if (event.key === this.platform.KEYMAP.ARROW_LEFT) {\n this.previousYear(event);\n }\n requestAnimationFrame(() => {\n if (this.dacadeView) {\n this.dacadeView.el.nativeElement.focus();\n }\n });\n }\n /**\n * @hidden\n */\n activeViewDecade() {\n super.activeViewDecade();\n requestAnimationFrame(() => {\n this.dacadeView.el.nativeElement.focus();\n });\n }\n /**\n * @hidden\n */\n changeYearKB(event, next = true) {\n if (this.platform.isActivationKey(event)) {\n event.stopPropagation();\n if (next) {\n this.nextYear();\n }\n else {\n this.previousYear();\n }\n }\n }\n /**\n * @hidden\n */\n selectYear(event) {\n this.previousViewDate = this.viewDate;\n this.viewDate = new Date(event.getFullYear(), event.getMonth(), event.getDate());\n this.activeView = IgxCalendarView.Month;\n requestAnimationFrame(() => {\n if (this.yearsBtn) {\n this.yearsBtn.nativeElement.focus();\n }\n });\n }\n /**\n * @hidden\n */\n selectMonth(event) {\n this.selectDate(event);\n this.selected.emit(this.selectedDates);\n }\n /**\n * Selects a date.\n * ```typescript\n * this.monthPicker.selectDate(new Date(`2018-06-12`));\n * ```\n */\n selectDate(value) {\n if (!value) {\n return new Date();\n }\n super.selectDate(value);\n this.viewDate = value;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n if (value) {\n this.viewDate = this.selectedDates = value;\n }\n }\n /**\n * @hidden\n */\n getNextYear() {\n return this.calendarModel.getNextYear(this.viewDate).getFullYear();\n }\n /**\n * @hidden\n */\n getPreviousYear() {\n return this.calendarModel.getPrevYear(this.viewDate).getFullYear();\n }\n}\nIgxMonthPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMonthPickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxMonthPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxMonthPickerComponent, selector: \"igx-month-picker\", inputs: { id: \"id\" }, host: { listeners: { \"keydown.pageup\": \"previousYear($event)\", \"keydown.pagedown\": \"nextYear($event)\", \"keydown.home\": \"onKeydownHome($event)\", \"keydown.end\": \"onKeydownEnd($event)\" }, properties: { \"attr.id\": \"this.id\", \"class.igx-calendar\": \"this.styleClass\" } }, providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: IgxMonthPickerComponent\n }\n ], viewQueries: [{ propertyName: \"monthsView\", first: true, predicate: [\"months\"], descendants: true, read: IgxMonthsViewComponent }, { propertyName: \"dacadeView\", first: true, predicate: [\"decade\"], descendants: true, read: IgxYearsViewComponent }, { propertyName: \"daysView\", first: true, predicate: [\"days\"], descendants: true, read: IgxDaysViewComponent }, { propertyName: \"yearsBtn\", first: true, predicate: [\"yearsBtn\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"\\n\\n
    \\n \\n keyboard_arrow_left\\n
    \\n
    \\n \\n {{ formattedYear(viewDate) }}\\n \\n
    \\n \\n\\n keyboard_arrow_right\\n \\n \\n\\n \\n \\n\\n\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"component\", type: IgxMonthsViewComponent, selector: \"igx-months-view\", inputs: [\"id\", \"date\", \"monthFormat\", \"locale\", \"formatView\"], outputs: [\"selected\"] }, { kind: \"component\", type: IgxYearsViewComponent, selector: \"igx-years-view\", inputs: [\"formatView\", \"date\", \"yearFormat\", \"locale\"], outputs: [\"selected\"] }], animations: [\n trigger('animateView', [\n transition('void => 0', useAnimation(fadeIn)),\n transition('void => *', useAnimation(scaleInCenter, {\n params: {\n duration: '.2s',\n fromScale: .9\n }\n }))\n ]),\n trigger('animateChange', [\n transition('* => prev', useAnimation(slideInLeft, {\n params: {\n fromPosition: 'translateX(-30%)'\n }\n })),\n transition('* => next', useAnimation(slideInRight, {\n params: {\n fromPosition: 'translateX(30%)'\n }\n }))\n ])\n ] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxMonthPickerComponent, decorators: [{\n type: Component,\n args: [{ providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: IgxMonthPickerComponent\n }\n ], animations: [\n trigger('animateView', [\n transition('void => 0', useAnimation(fadeIn)),\n transition('void => *', useAnimation(scaleInCenter, {\n params: {\n duration: '.2s',\n fromScale: .9\n }\n }))\n ]),\n trigger('animateChange', [\n transition('* => prev', useAnimation(slideInLeft, {\n params: {\n fromPosition: 'translateX(-30%)'\n }\n })),\n transition('* => next', useAnimation(slideInRight, {\n params: {\n fromPosition: 'translateX(30%)'\n }\n }))\n ])\n ], selector: 'igx-month-picker', template: \"\\n\\n
    \\n \\n keyboard_arrow_left\\n
    \\n
    \\n \\n {{ formattedYear(viewDate) }}\\n \\n
    \\n \\n\\n keyboard_arrow_right\\n \\n \\n\\n \\n \\n\\n\\n\\n\" }]\n }], propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], styleClass: [{\n type: HostBinding,\n args: ['class.igx-calendar']\n }], monthsView: [{\n type: ViewChild,\n args: ['months', { read: IgxMonthsViewComponent }]\n }], dacadeView: [{\n type: ViewChild,\n args: ['decade', { read: IgxYearsViewComponent }]\n }], daysView: [{\n type: ViewChild,\n args: ['days', { read: IgxDaysViewComponent }]\n }], yearsBtn: [{\n type: ViewChild,\n args: ['yearsBtn']\n }], previousYear: [{\n type: HostListener,\n args: ['keydown.pageup', ['$event']]\n }], nextYear: [{\n type: HostListener,\n args: ['keydown.pagedown', ['$event']]\n }], onKeydownHome: [{\n type: HostListener,\n args: ['keydown.home', ['$event']]\n }], onKeydownEnd: [{\n type: HostListener,\n args: ['keydown.end', ['$event']]\n }] } });\n\n/**\n * @hidden\n */\nclass IgxCalendarModule {\n}\nIgxCalendarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxCalendarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarModule, declarations: [IgxCalendarBaseDirective,\n IgxMonthPickerBaseDirective,\n IgxDayItemComponent,\n IgxDaysViewComponent,\n IgxCalendarComponent,\n IgxCalendarHeaderTemplateDirective,\n IgxCalendarMonthDirective,\n IgxCalendarYearDirective,\n IgxCalendarSubheaderTemplateDirective,\n IgxCalendarScrollMonthDirective,\n IgxMonthsViewComponent,\n IgxYearsViewComponent,\n IgxMonthPickerComponent,\n IgxMonthViewSlotsCalendar,\n IgxGetViewDateCalendar], imports: [CommonModule, FormsModule, IgxIconModule], exports: [IgxCalendarComponent,\n IgxDaysViewComponent,\n IgxMonthsViewComponent,\n IgxYearsViewComponent,\n IgxMonthPickerComponent,\n IgxCalendarHeaderTemplateDirective,\n IgxCalendarMonthDirective,\n IgxCalendarYearDirective,\n IgxCalendarSubheaderTemplateDirective] });\nIgxCalendarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarModule, imports: [CommonModule, FormsModule, IgxIconModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxCalendarBaseDirective,\n IgxMonthPickerBaseDirective,\n IgxDayItemComponent,\n IgxDaysViewComponent,\n IgxCalendarComponent,\n IgxCalendarHeaderTemplateDirective,\n IgxCalendarMonthDirective,\n IgxCalendarYearDirective,\n IgxCalendarSubheaderTemplateDirective,\n IgxCalendarScrollMonthDirective,\n IgxMonthsViewComponent,\n IgxYearsViewComponent,\n IgxMonthPickerComponent,\n IgxMonthViewSlotsCalendar,\n IgxGetViewDateCalendar\n ],\n exports: [\n IgxCalendarComponent,\n IgxDaysViewComponent,\n IgxMonthsViewComponent,\n IgxYearsViewComponent,\n IgxMonthPickerComponent,\n IgxCalendarHeaderTemplateDirective,\n IgxCalendarMonthDirective,\n IgxCalendarYearDirective,\n IgxCalendarSubheaderTemplateDirective\n ],\n imports: [CommonModule, FormsModule, IgxIconModule]\n }]\n }] });\n\nlet NEXT_ID$g = 0;\n/**\n * IgxCardMedia is container for the card media section.\n * Use it to wrap images and videos.\n */\nclass IgxCardMediaDirective {\n constructor() {\n /** @hidden @internal */\n this.cssClass = 'igx-card__media';\n /**\n * An @Input property that sets the `width` and `min-width` style property\n * of the media container. If not provided it will be set to `auto`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.width = 'auto';\n /**\n * An @Input property that sets the `height` style property of the media container.\n * If not provided it will be set to `auto`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.height = 'auto';\n /**\n * An @Input property that sets the `role` attribute of the media container.\n */\n this.role = 'img';\n }\n}\nIgxCardMediaDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardMediaDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxCardMediaDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCardMediaDirective, selector: \"igx-card-media\", inputs: { width: \"width\", height: \"height\", role: \"role\" }, host: { properties: { \"class.igx-card__media\": \"this.cssClass\", \"style.width\": \"this.width\", \"style.min-width\": \"this.width\", \"style.height\": \"this.height\", \"attr.role\": \"this.role\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardMediaDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'igx-card-media'\n }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-card__media']\n }], width: [{\n type: HostBinding,\n args: ['style.width']\n }, {\n type: HostBinding,\n args: ['style.min-width']\n }, {\n type: Input\n }], height: [{\n type: HostBinding,\n args: ['style.height']\n }, {\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }, {\n type: Input\n }] } });\n/**\n * IgxCardHeader is container for the card header\n */\nclass IgxCardHeaderComponent {\n constructor() {\n /** @hidden @internal */\n this.cssClass = 'igx-card-header';\n /**\n * An @Input property that sets the layout style of the header.\n * By default the header elements(thumbnail and title/subtitle) are aligned horizontally.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.vertical = false;\n }\n}\nIgxCardHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxCardHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCardHeaderComponent, selector: \"igx-card-header\", inputs: { vertical: \"vertical\" }, host: { properties: { \"class.igx-card-header\": \"this.cssClass\", \"class.igx-card-header--vertical\": \"this.vertical\" } }, ngImport: i0, template: \"
    \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n\\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardHeaderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-card-header', template: \"
    \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n\\n\" }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-card-header']\n }], vertical: [{\n type: HostBinding,\n args: ['class.igx-card-header--vertical']\n }, {\n type: Input\n }] } });\n/**\n * IgxCardThumbnail is container for the card thumbnail section.\n * Use it to wrap anything you want to be used as a thumbnail.\n */\nclass IgxCardThumbnailDirective {\n}\nIgxCardThumbnailDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardThumbnailDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxCardThumbnailDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCardThumbnailDirective, selector: \"[igxCardThumbnail]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardThumbnailDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCardThumbnail]'\n }]\n }] });\n/**\n * igxCardHeaderTitle is used to denote the header title in a card.\n * Use it to tag text nodes.\n */\nclass IgxCardHeaderTitleDirective {\n constructor() {\n /** @hidden @internal */\n this.cssClass = 'igx-card__header__title';\n }\n}\nIgxCardHeaderTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardHeaderTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxCardHeaderTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCardHeaderTitleDirective, selector: \"[igxCardHeaderTitle]\", host: { properties: { \"class.igx-card-header__title\": \"this.cssClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardHeaderTitleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCardHeaderTitle]'\n }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-card-header__title']\n }] } });\n/**\n * igxCardHeaderSubtitle is used to denote the header subtitle in a card.\n * Use it to tag text nodes.\n */\nclass IgxCardHeaderSubtitleDirective {\n constructor() {\n /** @hidden @internal */\n this.cssClass = 'igx-card-header__subtitle';\n }\n}\nIgxCardHeaderSubtitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardHeaderSubtitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxCardHeaderSubtitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCardHeaderSubtitleDirective, selector: \"[igxCardHeaderSubtitle]\", host: { properties: { \"class.igx-card-header__subtitle\": \"this.cssClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardHeaderSubtitleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCardHeaderSubtitle]'\n }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-card-header__subtitle']\n }] } });\n/**\n * IgxCardContent is container for the card content.\n */\nclass IgxCardContentDirective {\n constructor() {\n /** @hidden @internal */\n this.cssClass = 'igx-card-content';\n }\n}\nIgxCardContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxCardContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCardContentDirective, selector: \"igx-card-content\", host: { properties: { \"class.igx-card-content\": \"this.cssClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardContentDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'igx-card-content'\n }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-card-content']\n }] } });\n/**\n * IgxCardFooter is container for the card footer\n */\nclass IgxCardFooterDirective {\n constructor() {\n /**\n * An @Input property that sets the value of the `role` attribute of the card footer.\n * By default the value is set to `footer`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.role = 'footer';\n }\n}\nIgxCardFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxCardFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCardFooterDirective, selector: \"igx-card-footer\", inputs: { role: \"role\" }, host: { properties: { \"attr.role\": \"this.role\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardFooterDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'igx-card-footer'\n }]\n }], propDecorators: { role: [{\n type: HostBinding,\n args: ['attr.role']\n }, {\n type: Input\n }] } });\n/**\n * Card provides a way to display organized content in appealing way.\n *\n * @igxModule IgxCardModule\n *\n * @igxTheme igx-card-theme, igx-icon-theme, igx-button-theme\n *\n * @igxKeywords card, button, avatar, icon\n *\n * @igxGroup Layouts\n *\n * @remarks\n * The Ignite UI Card serves as a container that allows custom content to be organized in an appealing way. There are\n * five sections in a card that you can use to organize your content. These are header, media, content, actions, and footer.\n *\n * @example\n * ```html\n * \n * \n *

    {{title}}

    \n *
    {{subtitle}}
    \n *
    \n * \n * \n * \n * \n *
    \n * ```\n */\nconst IgxCardType = mkenum({\n ELEVATED: 'elevated',\n OUTLINED: 'outlined'\n});\nclass IgxCardComponent {\n constructor() {\n /**\n * Sets/gets the `id` of the card.\n * If not set, `id` will have value `\"igx-card-0\"`;\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let cardId = this.card.id;\n * ```\n */\n this.id = `igx-card-${NEXT_ID$g++}`;\n /**\n * An @Input property that sets the value of the `role` attribute of the card.\n * By default the value is set to `group`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.role = 'group';\n /**\n * An @Input property that sets the value of the `type` attribute of the card.\n * By default the value is set to `elevated`. You can make the card use the\n * outlined style by setting the value to `outlined`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.type = IgxCardType.ELEVATED;\n /**\n * An @Input property that sets the value of the `horizontal` attribute of the card.\n * Setting this to `true` will make the different card sections align horizontally,\n * essentially flipping the card to the side.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.horizontal = false;\n }\n /**\n * A getter which will return true if the card type is `outlined`.\n */\n get isOutlinedCard() {\n return this.type === IgxCardType.OUTLINED;\n }\n}\nIgxCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCardComponent, selector: \"igx-card\", inputs: { id: \"id\", role: \"role\", type: \"type\", horizontal: \"horizontal\" }, host: { properties: { \"attr.id\": \"this.id\", \"attr.role\": \"this.role\", \"class.igx-card\": \"this.type\", \"class.igx-card--outlined\": \"this.isOutlinedCard\", \"class.igx-card--horizontal\": \"this.horizontal\" } }, ngImport: i0, template: \"\\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-card', template: \"\\n\" }]\n }], propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }, {\n type: Input\n }], type: [{\n type: HostBinding,\n args: ['class.igx-card']\n }, {\n type: Input\n }], isOutlinedCard: [{\n type: HostBinding,\n args: ['class.igx-card--outlined']\n }], horizontal: [{\n type: HostBinding,\n args: ['class.igx-card--horizontal']\n }, {\n type: Input\n }] } });\nconst IgxCardActionsLayout = mkenum({\n START: 'start',\n JUSTIFY: 'justify'\n});\n/**\n * IgxCardActions is container for the card actions.\n */\nclass IgxCardActionsComponent {\n /**\n * A getter that returns `true` when the layout has been\n * set to `justify`.\n */\n get isJustifyLayout() {\n return this.layout === IgxCardActionsLayout.JUSTIFY;\n }\n constructor(card) {\n this.card = card;\n /**\n * An @Input property that sets the layout style of the actions.\n * You can justify the elements slotted in the igx-card-action container\n * so that they are positioned equally from one another taking up all the\n * space available along the card actions axis.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.layout = IgxCardActionsLayout.START;\n /**\n * An @Input property that sets the vertical attribute of the actions.\n * When set to `true` the actions will be layed out vertically.\n */\n this.vertical = false;\n /**\n * @deprecated in version 15.1.0.\n *\n * An @Input property that reverses the order of the buttons in the actions area.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.reverse = false;\n this.isVerticalSet = false;\n }\n /**\n * @hidden\n * @internal\n */\n ngOnChanges(changes) {\n for (const prop in changes) {\n if (prop === 'vertical') {\n this.isVerticalSet = true;\n }\n }\n }\n /**\n * @hidden\n * @internal\n */\n ngOnInit() {\n if (!this.isVerticalSet && this.card.horizontal) {\n this.vertical = true;\n }\n ;\n }\n}\nIgxCardActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardActionsComponent, deps: [{ token: IgxCardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxCardActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCardActionsComponent, selector: \"igx-card-actions\", inputs: { layout: \"layout\", vertical: \"vertical\", reverse: \"reverse\" }, host: { properties: { \"class.igx-card-actions\": \"this.layout\", \"class.igx-card-actions--vertical\": \"this.vertical\", \"class.igx-card-actions--justify\": \"this.isJustifyLayout\", \"class.igx-card-actions--reverse\": \"this.reverse\" } }, usesOnChanges: true, ngImport: i0, template: \"
    \\n \\n
    \\n\\n\\n\\n
    \\n \\n
    \\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardActionsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-card-actions', template: \"
    \\n \\n
    \\n\\n\\n\\n
    \\n \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: IgxCardComponent, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IgxCardComponent]\n }] }];\n }, propDecorators: { layout: [{\n type: HostBinding,\n args: ['class.igx-card-actions']\n }, {\n type: Input\n }], vertical: [{\n type: HostBinding,\n args: ['class.igx-card-actions--vertical']\n }, {\n type: Input\n }], isJustifyLayout: [{\n type: HostBinding,\n args: ['class.igx-card-actions--justify']\n }], reverse: [{\n type: HostBinding,\n args: ['class.igx-card-actions--reverse']\n }, {\n type: Input\n }] } });\n/**\n * @hidden\n */\nclass IgxCardModule {\n}\nIgxCardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxCardModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardModule, declarations: [IgxCardComponent, IgxCardHeaderComponent, IgxCardMediaDirective, IgxCardContentDirective, IgxCardActionsComponent, IgxCardFooterDirective, IgxCardHeaderTitleDirective, IgxCardHeaderSubtitleDirective, IgxCardThumbnailDirective], imports: [CommonModule, IgxButtonModule], exports: [IgxCardComponent, IgxCardHeaderComponent, IgxCardMediaDirective, IgxCardContentDirective, IgxCardActionsComponent, IgxCardFooterDirective, IgxCardHeaderTitleDirective, IgxCardHeaderSubtitleDirective, IgxCardThumbnailDirective] });\nIgxCardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardModule, imports: [CommonModule, IgxButtonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCardModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxCardComponent,\n IgxCardHeaderComponent,\n IgxCardMediaDirective,\n IgxCardContentDirective,\n IgxCardActionsComponent,\n IgxCardFooterDirective,\n IgxCardHeaderTitleDirective,\n IgxCardHeaderSubtitleDirective,\n IgxCardThumbnailDirective,\n ],\n exports: [\n IgxCardComponent,\n IgxCardHeaderComponent,\n IgxCardMediaDirective,\n IgxCardContentDirective,\n IgxCardActionsComponent,\n IgxCardFooterDirective,\n IgxCardHeaderTitleDirective,\n IgxCardHeaderSubtitleDirective,\n IgxCardThumbnailDirective,\n ],\n imports: [CommonModule, IgxButtonModule]\n }]\n }] });\n\nvar Direction;\n(function (Direction) {\n Direction[Direction[\"NONE\"] = 0] = \"NONE\";\n Direction[Direction[\"NEXT\"] = 1] = \"NEXT\";\n Direction[Direction[\"PREV\"] = 2] = \"PREV\";\n})(Direction || (Direction = {}));\nconst HorizontalAnimationType = mkenum({\n none: 'none',\n slide: 'slide',\n fade: 'fade'\n});\n/** @hidden */\nlet IgxCarouselComponentBase = class IgxCarouselComponentBase {\n constructor(animationService, cdr) {\n this.animationService = animationService;\n this.cdr = cdr;\n /** @hidden */\n this.animationType = HorizontalAnimationType.slide;\n /** @hidden @internal */\n this.enterAnimationDone = new EventEmitter();\n /** @hidden @internal */\n this.leaveAnimationDone = new EventEmitter();\n /** @hidden */\n this.defaultAnimationDuration = 320;\n /** @hidden */\n this.animationPosition = 0;\n /** @hidden */\n this.newDuration = 0;\n }\n /** @hidden */\n triggerAnimations() {\n if (this.animationType !== HorizontalAnimationType.none) {\n if (this.animationStarted(this.leaveAnimationPlayer) || this.animationStarted(this.enterAnimationPlayer)) {\n requestAnimationFrame(() => {\n this.resetAnimations();\n this.playAnimations();\n });\n }\n else {\n this.playAnimations();\n }\n }\n }\n /** @hidden */\n animationStarted(animation) {\n return animation && animation.hasStarted();\n }\n /** @hidden */\n playAnimations() {\n this.playLeaveAnimation();\n this.playEnterAnimation();\n }\n resetAnimations() {\n if (this.animationStarted(this.leaveAnimationPlayer)) {\n this.leaveAnimationPlayer.reset();\n this.leaveAnimationDone.emit();\n }\n if (this.animationStarted(this.enterAnimationPlayer)) {\n this.enterAnimationPlayer.reset();\n this.enterAnimationDone.emit();\n this.cdr.markForCheck();\n }\n }\n getAnimation() {\n let duration;\n if (this.newDuration) {\n duration = this.animationPosition ? this.animationPosition * this.newDuration : this.newDuration;\n }\n else {\n duration = this.animationPosition ? this.animationPosition * this.defaultAnimationDuration : this.defaultAnimationDuration;\n }\n switch (this.animationType) {\n case HorizontalAnimationType.slide:\n const trans = this.animationPosition ? this.animationPosition * 100 : 100;\n return {\n enterAnimation: useAnimation(slideInLeft, {\n params: {\n delay: '0s',\n duration: `${duration}ms`,\n endOpacity: 1,\n startOpacity: 1,\n fromPosition: `translateX(${this.currentItem.direction === 1 ? trans : -trans}%)`,\n toPosition: 'translateX(0%)'\n }\n }),\n leaveAnimation: useAnimation(slideInLeft, {\n params: {\n delay: '0s',\n duration: `${duration}ms`,\n endOpacity: 1,\n startOpacity: 1,\n fromPosition: `translateX(0%)`,\n toPosition: `translateX(${this.currentItem.direction === 1 ? -trans : trans}%)`,\n }\n })\n };\n case HorizontalAnimationType.fade:\n return {\n enterAnimation: useAnimation(fadeIn, { params: { duration: `${duration}ms`, startOpacity: `${this.animationPosition}` } }),\n leaveAnimation: null\n };\n }\n return {\n enterAnimation: null,\n leaveAnimation: null\n };\n }\n playEnterAnimation() {\n const animation = this.getAnimation().enterAnimation;\n if (!animation) {\n return;\n }\n this.enterAnimationPlayer = this.animationService.buildAnimation(animation, this.getCurrentElement());\n this.enterAnimationPlayer.animationEnd.subscribe(() => {\n // TODO: animation may never end. Find better way to clean up the player\n if (this.enterAnimationPlayer) {\n this.enterAnimationPlayer.reset();\n this.enterAnimationPlayer = null;\n }\n this.animationPosition = 0;\n this.newDuration = 0;\n this.previousItem.previous = false;\n this.enterAnimationDone.emit();\n this.cdr.markForCheck();\n });\n this.previousItem.previous = true;\n this.enterAnimationPlayer.play();\n }\n playLeaveAnimation() {\n const animation = this.getAnimation().leaveAnimation;\n if (!animation) {\n return;\n }\n this.leaveAnimationPlayer = this.animationService.buildAnimation(animation, this.getPreviousElement());\n this.leaveAnimationPlayer.animationEnd.subscribe(() => {\n // TODO: animation may never end. Find better way to clean up the player\n if (this.leaveAnimationPlayer) {\n this.leaveAnimationPlayer.reset();\n this.leaveAnimationPlayer = null;\n }\n this.animationPosition = 0;\n this.newDuration = 0;\n this.leaveAnimationDone.emit();\n });\n this.leaveAnimationPlayer.play();\n }\n};\nIgxCarouselComponentBase = __decorate([\n __param(0, Inject(IgxAngularAnimationService))\n], IgxCarouselComponentBase);\n\nclass IgxCarouselIndicatorDirective {\n}\nIgxCarouselIndicatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCarouselIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxCarouselIndicatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCarouselIndicatorDirective, selector: \"[igxCarouselIndicator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCarouselIndicatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCarouselIndicator]'\n }]\n }] });\nclass IgxCarouselNextButtonDirective {\n}\nIgxCarouselNextButtonDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCarouselNextButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxCarouselNextButtonDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCarouselNextButtonDirective, selector: \"[igxCarouselNextButton]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCarouselNextButtonDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCarouselNextButton]'\n }]\n }] });\nclass IgxCarouselPrevButtonDirective {\n}\nIgxCarouselPrevButtonDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCarouselPrevButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxCarouselPrevButtonDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCarouselPrevButtonDirective, selector: \"[igxCarouselPrevButton]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCarouselPrevButtonDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCarouselPrevButton]'\n }]\n }] });\n\n/**\n * A slide component that usually holds an image and/or a caption text.\n * IgxSlideComponent is usually a child component of an IgxCarouselComponent.\n *\n * ```\n * \n * \n * \n * ```\n *\n * @export\n */\nclass IgxSlideComponent {\n /**\n * Returns the `tabIndex` of the slide component.\n * ```typescript\n * let tabIndex = this.carousel.tabIndex;\n * ```\n *\n * @memberof IgxSlideComponent\n */\n get tabIndex() {\n return this.active ? 0 : null;\n }\n /**\n * Gets/sets the `active` state of the slide.\n * ```html\n * \n * \n * \n * ```\n *\n * Two-way data binding.\n * ```html\n * \n * \n * \n * ```\n *\n * @memberof IgxSlideComponent\n */\n get active() {\n return this._active;\n }\n set active(value) {\n this._active = !!value;\n this.activeChange.emit(this._active);\n }\n constructor(elementRef) {\n this.elementRef = elementRef;\n /**\n * Returns the `role` of the slide component.\n * By default is set to `tabpanel`\n *\n * @memberof IgxSlideComponent\n */\n this.tab = 'tabpanel';\n /**\n * Returns the class of the slide component.\n * ```typescript\n * let class = this.slide.cssClass;\n * ```\n *\n * @memberof IgxSlideComponent\n */\n this.cssClass = 'igx-slide';\n this.previous = false;\n /**\n * @hidden\n */\n this.activeChange = new EventEmitter();\n this._active = false;\n this._destroy$ = new Subject();\n }\n /**\n * Returns a reference to the carousel element in the DOM.\n * ```typescript\n * let nativeElement = this.slide.nativeElement;\n * ```\n *\n * @memberof IgxSlideComponent\n */\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n /**\n * @hidden\n */\n get isDestroyed() {\n return this._destroy$;\n }\n ngAfterContentChecked() {\n this.id = `panel-${this.index}`;\n this.ariaLabelledBy = `tab-${this.index}-${this.total}`;\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this._destroy$.next(true);\n this._destroy$.complete();\n }\n}\nIgxSlideComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSlideComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxSlideComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSlideComponent, selector: \"igx-slide\", inputs: { index: \"index\", direction: \"direction\", total: \"total\", active: \"active\", previous: \"previous\" }, outputs: { activeChange: \"activeChange\" }, host: { properties: { \"attr.tabindex\": \"this.tabIndex\", \"attr.id\": \"this.id\", \"attr.role\": \"this.tab\", \"attr.aria-labelledby\": \"this.ariaLabelledBy\", \"class.igx-slide\": \"this.cssClass\", \"class.igx-slide--current\": \"this.active\", \"class.igx-slide--previous\": \"this.previous\" } }, ngImport: i0, template: \"\\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSlideComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-slide', template: \"\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { index: [{\n type: Input\n }], direction: [{\n type: Input\n }], total: [{\n type: Input\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }], tab: [{\n type: HostBinding,\n args: ['attr.role']\n }], ariaLabelledBy: [{\n type: HostBinding,\n args: ['attr.aria-labelledby']\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-slide']\n }], active: [{\n type: HostBinding,\n args: ['class.igx-slide--current']\n }, {\n type: Input\n }], previous: [{\n type: HostBinding,\n args: ['class.igx-slide--previous']\n }, {\n type: Input\n }], activeChange: [{\n type: Output\n }] } });\n\nlet NEXT_ID$f = 0;\nconst CarouselIndicatorsOrientation = mkenum({\n bottom: 'bottom',\n top: 'top'\n});\nclass CarouselHammerConfig extends HammerGestureConfig {\n constructor() {\n super(...arguments);\n this.overrides = {\n pan: { direction: Hammer.DIRECTION_HORIZONTAL }\n };\n }\n}\nCarouselHammerConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: CarouselHammerConfig, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\nCarouselHammerConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: CarouselHammerConfig });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: CarouselHammerConfig, decorators: [{\n type: Injectable\n }] });\n/**\n * **Ignite UI for Angular Carousel** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/carousel.html)\n *\n * The Ignite UI Carousel is used to browse or navigate through a collection of slides. Slides can contain custom\n * content such as images or cards and be used for things such as on-boarding tutorials or page-based interfaces.\n * It can be used as a separate fullscreen element or inside another component.\n *\n * Example:\n * ```html\n * \n * \n *

    First Slide Header

    \n *

    First slide Content

    \n * \n * \n *

    Second Slide Header

    \n *

    Second Slide Content

    \n *
    \n * ```\n */\nclass IgxCarouselComponent extends IgxCarouselComponentBase {\n /** @hidden */\n get labelId() {\n return this.showIndicatorsLabel ? `${this.id}-label` : null;\n }\n /**\n * Gets the `touch-action` style of the `list item`.\n * ```typescript\n * let touchAction = this.listItem.touchAction;\n * ```\n */\n get touchAction() {\n return this.gesturesSupport ? 'pan-y' : 'auto';\n }\n /**\n * An accessor that sets the resource strings.\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /**\n * An accessor that returns the resource strings.\n */\n get resourceStrings() {\n return this._resourceStrings;\n }\n /** @hidden */\n get getIndicatorTemplate() {\n if (this.indicatorTemplate) {\n return this.indicatorTemplate;\n }\n return this.defaultIndicator;\n }\n /** @hidden */\n get getNextButtonTemplate() {\n if (this.nextButtonTemplate) {\n return this.nextButtonTemplate;\n }\n return this.defaultNextButton;\n }\n /** @hidden */\n get getPrevButtonTemplate() {\n if (this.prevButtonTemplate) {\n return this.prevButtonTemplate;\n }\n return this.defaultPrevButton;\n }\n /** @hidden */\n get indicatorsOrientationClass() {\n return `igx-carousel-indicators--${this.indicatorsOrientation}`;\n }\n /** @hidden */\n get showIndicators() {\n return this.total <= this.maximumIndicatorsCount && this.total > 0;\n }\n /** @hidden */\n get showIndicatorsLabel() {\n return this.total > this.maximumIndicatorsCount;\n }\n /** @hidden */\n get getCarouselLabel() {\n return `${this.current + 1} ${this.resourceStrings.igx_carousel_of} ${this.total}`;\n }\n /**\n * Returns the total number of `slides` in the carousel.\n * ```typescript\n * let slideCount = this.carousel.total;\n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n get total() {\n var _a;\n return (_a = this.slides) === null || _a === void 0 ? void 0 : _a.length;\n }\n /**\n * The index of the slide being currently shown.\n * ```typescript\n * let currentSlideNumber = this.carousel.current;\n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n get current() {\n return !this.currentItem ? 0 : this.currentItem.index;\n }\n /**\n * Returns a boolean indicating if the carousel is playing.\n * ```typescript\n * let isPlaying = this.carousel.isPlaying;\n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n get isPlaying() {\n return this.playing;\n }\n /**\n * Returns а boolean indicating if the carousel is destroyed.\n * ```typescript\n * let isDestroyed = this.carousel.isDestroyed;\n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n get isDestroyed() {\n return this.destroyed;\n }\n /**\n * Returns a reference to the carousel element in the DOM.\n * ```typescript\n * let nativeElement = this.carousel.nativeElement;\n * ```\n *\n * @memberof IgxCarouselComponent\n */\n get nativeElement() {\n return this.element.nativeElement;\n }\n /**\n * Returns the time `interval` in milliseconds before the slide changes.\n * ```typescript\n * let timeInterval = this.carousel.interval;\n * ```\n *\n * @memberof IgxCarouselComponent\n */\n get interval() {\n return this._interval;\n }\n /**\n * Sets the time `interval` in milliseconds before the slide changes.\n * If not set, the carousel will not change `slides` automatically.\n * ```html\n * \n * ```\n *\n * @memberof IgxCarouselComponent\n */\n set interval(value) {\n this._interval = +value;\n this.restartInterval();\n }\n constructor(cdr, element, iterableDiffers, animationService, platformUtil) {\n super(animationService, cdr);\n this.element = element;\n this.iterableDiffers = iterableDiffers;\n this.platformUtil = platformUtil;\n /**\n * Sets the `id` of the carousel.\n * If not set, the `id` of the first carousel component will be `\"igx-carousel-0\"`.\n * ```html\n * \n * ```\n *\n * @memberof IgxCarouselComponent\n */\n this.id = `igx-carousel-${NEXT_ID$f++}`;\n /**\n * Returns the `role` attribute of the carousel.\n * ```typescript\n * let carouselRole = this.carousel.role;\n * ```\n *\n * @memberof IgxCarouselComponent\n */\n this.role = 'region';\n /** @hidden */\n this.roleDescription = 'carousel';\n /**\n * Returns the class of the carousel component.\n * ```typescript\n * let class = this.carousel.cssClass;\n * ```\n *\n * @memberof IgxCarouselComponent\n */\n this.cssClass = 'igx-carousel';\n /**\n * Sets whether the carousel should `loop` back to the first slide after reaching the last slide.\n * Default value is `true`.\n * ```html\n * \n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n this.loop = true;\n /**\n * Sets whether the carousel will `pause` the slide transitions on user interactions.\n * Default value is `true`.\n * ```html\n * \n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n this.pause = true;\n /**\n * Controls whether the carousel should render the left/right `navigation` buttons.\n * Default value is `true`.\n * ```html\n * \n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n this.navigation = true;\n /**\n * Controls whether the carousel should support keyboard navigation.\n * Default value is `true`.\n * ```html\n * \n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n this.keyboardSupport = true;\n /**\n * Controls whether the carousel should support gestures.\n * Default value is `true`.\n * ```html\n * \n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n this.gesturesSupport = true;\n /**\n * Controls the maximum indexes that can be shown.\n * Default value is `5`.\n * ```html\n * \n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n this.maximumIndicatorsCount = 5;\n /**\n * Gets/sets the display mode of carousel indicators. It can be top or bottom.\n * Default value is `bottom`.\n * ```html\n * \n * \n * ```\n *\n * @memberOf IgxSlideComponent\n */\n this.indicatorsOrientation = CarouselIndicatorsOrientation.bottom;\n /**\n * Gets/sets the animation type of carousel.\n * Default value is `slide`.\n * ```html\n * \n * \n * ```\n *\n * @memberOf IgxSlideComponent\n */\n this.animationType = HorizontalAnimationType.slide;\n /**\n * The custom template, if any, that should be used when rendering carousel indicators\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.carousel.indicatorTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n * brightness_7\n * brightness_5\n * \n * \n * ```\n */\n this.indicatorTemplate = null;\n /**\n * The custom template, if any, that should be used when rendering carousel next button\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.carousel.nextButtonTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n * \n * \n * \n * ```\n */\n this.nextButtonTemplate = null;\n /**\n * The custom template, if any, that should be used when rendering carousel previous button\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.carousel.nextButtonTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n * \n * \n * \n * ```\n */\n this.prevButtonTemplate = null;\n /**\n * An event that is emitted after a slide transition has happened.\n * Provides references to the `IgxCarouselComponent` and `IgxSlideComponent` as event arguments.\n * ```html\n * \n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n this.slideChanged = new EventEmitter();\n /**\n * An event that is emitted after a slide has been added to the carousel.\n * Provides references to the `IgxCarouselComponent` and `IgxSlideComponent` as event arguments.\n * ```html\n * \n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n this.slideAdded = new EventEmitter();\n /**\n * An event that is emitted after a slide has been removed from the carousel.\n * Provides references to the `IgxCarouselComponent` and `IgxSlideComponent` as event arguments.\n * ```html\n * \n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n this.slideRemoved = new EventEmitter();\n /**\n * An event that is emitted after the carousel has been paused.\n * Provides a reference to the `IgxCarouselComponent` as an event argument.\n * ```html\n * \n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n this.carouselPaused = new EventEmitter();\n /**\n * An event that is emitted after the carousel has resumed transitioning between `slides`.\n * Provides a reference to the `IgxCarouselComponent` as an event argument.\n * ```html\n * \n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n this.carouselPlaying = new EventEmitter();\n this._resourceStrings = CurrentResourceStrings.CarouselResStrings;\n this.destroy$ = new Subject();\n this.differ = null;\n this.differ = this.iterableDiffers.find([]).create(null);\n }\n /** @hidden */\n onKeydownArrowRight(event) {\n if (this.keyboardSupport) {\n event.preventDefault();\n this.next();\n this.focusSlideElement();\n }\n }\n /** @hidden */\n onKeydownArrowLeft(event) {\n if (this.keyboardSupport) {\n event.preventDefault();\n this.prev();\n this.focusSlideElement();\n }\n }\n /** @hidden */\n onTap(event) {\n // play pause only when tap on slide\n if (event.target && event.target.classList.contains('igx-slide')) {\n if (this.isPlaying) {\n if (this.pause) {\n this.stoppedByInteraction = true;\n }\n this.stop();\n }\n else if (this.stoppedByInteraction) {\n this.play();\n }\n }\n }\n /** @hidden */\n onKeydownHome(event) {\n if (this.keyboardSupport && this.slides.length > 0) {\n event.preventDefault();\n this.slides.first.active = true;\n this.focusSlideElement();\n }\n }\n /** @hidden */\n onKeydownEnd(event) {\n if (this.keyboardSupport && this.slides.length > 0) {\n event.preventDefault();\n this.slides.last.active = true;\n this.focusSlideElement();\n }\n }\n /** @hidden */\n onMouseEnter() {\n if (this.pause && this.isPlaying) {\n this.stoppedByInteraction = true;\n }\n this.stop();\n }\n /** @hidden */\n onMouseLeave() {\n if (this.stoppedByInteraction) {\n this.play();\n }\n }\n /** @hidden */\n onPanLeft(event) {\n this.pan(event);\n }\n /** @hidden */\n onPanRight(event) {\n this.pan(event);\n }\n /**\n * @hidden\n */\n onPanEnd(event) {\n if (!this.gesturesSupport) {\n return;\n }\n event.preventDefault();\n const slideWidth = this.currentItem.nativeElement.offsetWidth;\n const panOffset = (slideWidth / 1000);\n const deltaX = Math.abs(event.deltaX) + panOffset < slideWidth ? Math.abs(event.deltaX) : slideWidth - panOffset;\n const velocity = Math.abs(event.velocity);\n this.resetSlideStyles(this.currentItem);\n if (this.incomingSlide) {\n this.resetSlideStyles(this.incomingSlide);\n if (slideWidth / 2 < deltaX || velocity > 1) {\n this.incomingSlide.direction = event.deltaX < 0 ? Direction.NEXT : Direction.PREV;\n this.incomingSlide.previous = false;\n this.animationPosition = this.animationType === HorizontalAnimationType.fade ?\n deltaX / slideWidth : (slideWidth - deltaX) / slideWidth;\n if (velocity > 1) {\n this.newDuration = this.defaultAnimationDuration / velocity;\n }\n this.incomingSlide.active = true;\n }\n else {\n this.currentItem.direction = event.deltaX > 0 ? Direction.NEXT : Direction.PREV;\n this.previousItem = this.incomingSlide;\n this.previousItem.previous = true;\n this.animationPosition = this.animationType === HorizontalAnimationType.fade ?\n Math.abs((slideWidth - deltaX) / slideWidth) : deltaX / slideWidth;\n this.playAnimations();\n }\n }\n if (this.stoppedByInteraction) {\n this.play();\n }\n }\n /** @hidden */\n ngAfterContentInit() {\n this.slides.changes\n .pipe(takeUntil(this.destroy$))\n .subscribe((change) => this.initSlides(change));\n this.initSlides(this.slides);\n }\n /** @hidden */\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n this.destroyed = true;\n if (this.lastInterval) {\n clearInterval(this.lastInterval);\n }\n }\n /**\n * Returns the slide corresponding to the provided `index` or null.\n * ```typescript\n * let slide1 = this.carousel.get(1);\n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n get(index) {\n return this.slides.find((slide) => slide.index === index);\n }\n /**\n * Adds a new slide to the carousel.\n * ```typescript\n * this.carousel.add(newSlide);\n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n add(slide) {\n const newSlides = this.slides.toArray();\n newSlides.push(slide);\n this.slides.reset(newSlides);\n this.slides.notifyOnChanges();\n }\n /**\n * Removes a slide from the carousel.\n * ```typescript\n * this.carousel.remove(slide);\n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n remove(slide) {\n if (slide && slide === this.get(slide.index)) { // check if the requested slide for delete is present in the carousel\n const newSlides = this.slides.toArray();\n newSlides.splice(slide.index, 1);\n this.slides.reset(newSlides);\n this.slides.notifyOnChanges();\n }\n }\n /**\n * Kicks in a transition for a given slide with a given `direction`.\n * ```typescript\n * this.carousel.select(this.carousel.get(2), Direction.NEXT);\n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n select(slide, direction = Direction.NONE) {\n if (slide && slide !== this.currentItem) {\n slide.direction = direction;\n slide.active = true;\n }\n }\n /**\n * Transitions to the next slide in the carousel.\n * ```typescript\n * this.carousel.next();\n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n next() {\n const index = this.getNextIndex();\n if (index === 0 && !this.loop) {\n this.stop();\n return;\n }\n return this.select(this.get(index), Direction.NEXT);\n }\n /**\n * Transitions to the previous slide in the carousel.\n * ```typescript\n * this.carousel.prev();\n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n prev() {\n const index = this.getPrevIndex();\n if (!this.loop && index === this.total - 1) {\n this.stop();\n return;\n }\n return this.select(this.get(index), Direction.PREV);\n }\n /**\n * Resumes playing of the carousel if in paused state.\n * No operation otherwise.\n * ```typescript\n * this.carousel.play();\n * }\n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n play() {\n if (!this.playing) {\n this.playing = true;\n this.carouselPlaying.emit(this);\n this.restartInterval();\n this.stoppedByInteraction = false;\n }\n }\n /**\n * Stops slide transitions if the `pause` option is set to `true`.\n * No operation otherwise.\n * ```typescript\n * this.carousel.stop();\n * }\n * ```\n *\n * @memberOf IgxCarouselComponent\n */\n stop() {\n if (this.pause) {\n this.playing = false;\n this.carouselPaused.emit(this);\n this.resetInterval();\n }\n }\n getPreviousElement() {\n return this.previousItem.nativeElement;\n }\n getCurrentElement() {\n return this.currentItem.nativeElement;\n }\n resetInterval() {\n if (this.lastInterval) {\n clearInterval(this.lastInterval);\n this.lastInterval = null;\n }\n }\n restartInterval() {\n this.resetInterval();\n if (!isNaN(this.interval) && this.interval > 0 && this.platformUtil.isBrowser) {\n this.lastInterval = setInterval(() => {\n const tick = +this.interval;\n if (this.playing && this.total && !isNaN(tick) && tick > 0) {\n this.next();\n }\n else {\n this.stop();\n }\n }, this.interval);\n }\n }\n /** @hidden */\n get nextButtonDisabled() {\n return !this.loop && this.current === (this.total - 1);\n }\n /** @hidden */\n get prevButtonDisabled() {\n return !this.loop && this.current === 0;\n }\n getNextIndex() {\n return (this.current + 1) % this.total;\n }\n getPrevIndex() {\n return this.current - 1 < 0 ? this.total - 1 : this.current - 1;\n }\n resetSlideStyles(slide) {\n slide.nativeElement.style.transform = '';\n slide.nativeElement.style.opacity = '';\n }\n pan(event) {\n const slideWidth = this.currentItem.nativeElement.offsetWidth;\n const panOffset = (slideWidth / 1000);\n const deltaX = event.deltaX;\n const index = deltaX < 0 ? this.getNextIndex() : this.getPrevIndex();\n const offset = deltaX < 0 ? slideWidth + deltaX : -slideWidth + deltaX;\n if (!this.gesturesSupport || event.isFinal || Math.abs(deltaX) + panOffset >= slideWidth) {\n return;\n }\n if (!this.loop && ((this.current === 0 && deltaX > 0) || (this.current === this.total - 1 && deltaX < 0))) {\n this.incomingSlide = null;\n return;\n }\n event.preventDefault();\n if (this.isPlaying) {\n this.stoppedByInteraction = true;\n this.stop();\n }\n if (this.previousItem && this.previousItem.previous) {\n this.previousItem.previous = false;\n }\n this.finishAnimations();\n if (this.incomingSlide) {\n if (index !== this.incomingSlide.index) {\n this.resetSlideStyles(this.incomingSlide);\n this.incomingSlide.previous = false;\n this.incomingSlide = this.get(index);\n }\n }\n else {\n this.incomingSlide = this.get(index);\n }\n this.incomingSlide.previous = true;\n if (this.animationType === HorizontalAnimationType.fade) {\n this.currentItem.nativeElement.style.opacity = `${Math.abs(offset) / slideWidth}`;\n }\n else {\n this.currentItem.nativeElement.style.transform = `translateX(${deltaX}px)`;\n this.incomingSlide.nativeElement.style.transform = `translateX(${offset}px)`;\n }\n }\n unsubscriber(slide) {\n return merge(this.destroy$, slide.isDestroyed);\n }\n onSlideActivated(slide) {\n if (slide.active && slide !== this.currentItem) {\n if (slide.direction === Direction.NONE) {\n const newIndex = slide.index;\n slide.direction = newIndex > this.current ? Direction.NEXT : Direction.PREV;\n }\n if (this.currentItem) {\n if (this.previousItem && this.previousItem.previous) {\n this.previousItem.previous = false;\n }\n this.currentItem.direction = slide.direction;\n this.currentItem.active = false;\n this.previousItem = this.currentItem;\n this.currentItem = slide;\n this.triggerAnimations();\n }\n else {\n this.currentItem = slide;\n }\n this.slideChanged.emit({ carousel: this, slide });\n this.restartInterval();\n }\n }\n finishAnimations() {\n if (this.animationStarted(this.leaveAnimationPlayer)) {\n this.leaveAnimationPlayer.finish();\n }\n if (this.animationStarted(this.enterAnimationPlayer)) {\n this.enterAnimationPlayer.finish();\n }\n }\n initSlides(change) {\n const diff = this.differ.diff(change.toArray());\n if (diff) {\n this.slides.reduce((any, c, ind) => c.index = ind, 0); // reset slides indexes\n diff.forEachAddedItem((record) => {\n const slide = record.item;\n slide.total = this.total;\n this.slideAdded.emit({ carousel: this, slide });\n if (slide.active) {\n this.currentItem = slide;\n }\n slide.activeChange.pipe(takeUntil(this.unsubscriber(slide))).subscribe(() => this.onSlideActivated(slide));\n });\n diff.forEachRemovedItem((record) => {\n const slide = record.item;\n this.slideRemoved.emit({ carousel: this, slide });\n if (slide.active) {\n slide.active = false;\n this.currentItem = this.get(slide.index < this.total ? slide.index : this.total - 1);\n }\n });\n this.updateSlidesSelection();\n }\n }\n updateSlidesSelection() {\n if (this.platformUtil.isBrowser) {\n requestAnimationFrame(() => {\n if (this.currentItem) {\n this.currentItem.active = true;\n const activeSlides = this.slides.filter(slide => slide.active && slide.index !== this.currentItem.index);\n activeSlides.forEach(slide => slide.active = false);\n }\n else if (this.total) {\n this.slides.first.active = true;\n }\n this.play();\n });\n }\n }\n focusSlideElement() {\n if (this.leaveAnimationPlayer) {\n this.leaveAnimationPlayer.animationEnd\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.slides.find(s => s.active).nativeElement.focus();\n });\n }\n else {\n requestAnimationFrame(() => this.slides.find(s => s.active).nativeElement.focus());\n }\n }\n}\nIgxCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCarouselComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.IterableDiffers }, { token: IgxAngularAnimationService }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nIgxCarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCarouselComponent, selector: \"igx-carousel\", inputs: { id: \"id\", loop: \"loop\", pause: \"pause\", navigation: \"navigation\", keyboardSupport: \"keyboardSupport\", gesturesSupport: \"gesturesSupport\", maximumIndicatorsCount: \"maximumIndicatorsCount\", indicatorsOrientation: \"indicatorsOrientation\", animationType: \"animationType\", resourceStrings: \"resourceStrings\", interval: \"interval\" }, outputs: { slideChanged: \"slideChanged\", slideAdded: \"slideAdded\", slideRemoved: \"slideRemoved\", carouselPaused: \"carouselPaused\", carouselPlaying: \"carouselPlaying\" }, host: { listeners: { \"keydown.arrowright\": \"onKeydownArrowRight($event)\", \"keydown.arrowleft\": \"onKeydownArrowLeft($event)\", \"tap\": \"onTap($event)\", \"keydown.home\": \"onKeydownHome($event)\", \"keydown.end\": \"onKeydownEnd($event)\", \"mouseenter\": \"onMouseEnter()\", \"mouseleave\": \"onMouseLeave()\", \"panleft\": \"onPanLeft($event)\", \"panright\": \"onPanRight($event)\", \"panend\": \"onPanEnd($event)\" }, properties: { \"attr.id\": \"this.id\", \"attr.role\": \"this.role\", \"attr.aria-roledescription\": \"this.roleDescription\", \"attr.aria-labelledby\": \"this.labelId\", \"class.igx-carousel\": \"this.cssClass\", \"style.touch-action\": \"this.touchAction\" } }, providers: [\n {\n provide: HAMMER_GESTURE_CONFIG,\n useClass: CarouselHammerConfig\n }\n ], queries: [{ propertyName: \"indicatorTemplate\", first: true, predicate: IgxCarouselIndicatorDirective, descendants: true, read: TemplateRef }, { propertyName: \"nextButtonTemplate\", first: true, predicate: IgxCarouselNextButtonDirective, descendants: true, read: TemplateRef }, { propertyName: \"prevButtonTemplate\", first: true, predicate: IgxCarouselPrevButtonDirective, descendants: true, read: TemplateRef }, { propertyName: \"slides\", predicate: IgxSlideComponent }], viewQueries: [{ propertyName: \"defaultIndicator\", first: true, predicate: [\"defaultIndicator\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"defaultNextButton\", first: true, predicate: [\"defaultNextButton\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"defaultPrevButton\", first: true, predicate: [\"defaultPrevButton\"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: \"\\n
    \\n
    \\n
    \\n\\n\\n \\n arrow_forward\\n \\n\\n\\n\\n \\n arrow_back\\n \\n\\n\\n
    \\n \\n
    \\n\\n
    \\n {{getCarouselLabel}}\\n
    \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\", styles: [\":host{display:block;outline-style:none}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCarouselComponent, decorators: [{\n type: Component,\n args: [{ providers: [\n {\n provide: HAMMER_GESTURE_CONFIG,\n useClass: CarouselHammerConfig\n }\n ], selector: 'igx-carousel', template: \"\\n
    \\n
    \\n
    \\n\\n\\n \\n arrow_forward\\n \\n\\n\\n\\n \\n arrow_back\\n \\n\\n\\n
    \\n \\n
    \\n\\n
    \\n {{getCarouselLabel}}\\n
    \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\", styles: [\":host{display:block;outline-style:none}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.IterableDiffers }, { type: undefined, decorators: [{\n type: Inject,\n args: [IgxAngularAnimationService]\n }] }, { type: PlatformUtil }];\n }, propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], roleDescription: [{\n type: HostBinding,\n args: ['attr.aria-roledescription']\n }], labelId: [{\n type: HostBinding,\n args: ['attr.aria-labelledby']\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-carousel']\n }], touchAction: [{\n type: HostBinding,\n args: ['style.touch-action']\n }], loop: [{\n type: Input\n }], pause: [{\n type: Input\n }], navigation: [{\n type: Input\n }], keyboardSupport: [{\n type: Input\n }], gesturesSupport: [{\n type: Input\n }], maximumIndicatorsCount: [{\n type: Input\n }], indicatorsOrientation: [{\n type: Input\n }], animationType: [{\n type: Input\n }], indicatorTemplate: [{\n type: ContentChild,\n args: [IgxCarouselIndicatorDirective, { read: TemplateRef, static: false }]\n }], nextButtonTemplate: [{\n type: ContentChild,\n args: [IgxCarouselNextButtonDirective, { read: TemplateRef, static: false }]\n }], prevButtonTemplate: [{\n type: ContentChild,\n args: [IgxCarouselPrevButtonDirective, { read: TemplateRef, static: false }]\n }], slides: [{\n type: ContentChildren,\n args: [IgxSlideComponent]\n }], slideChanged: [{\n type: Output\n }], slideAdded: [{\n type: Output\n }], slideRemoved: [{\n type: Output\n }], carouselPaused: [{\n type: Output\n }], carouselPlaying: [{\n type: Output\n }], defaultIndicator: [{\n type: ViewChild,\n args: ['defaultIndicator', { read: TemplateRef, static: true }]\n }], defaultNextButton: [{\n type: ViewChild,\n args: ['defaultNextButton', { read: TemplateRef, static: true }]\n }], defaultPrevButton: [{\n type: ViewChild,\n args: ['defaultPrevButton', { read: TemplateRef, static: true }]\n }], resourceStrings: [{\n type: Input\n }], interval: [{\n type: Input\n }], onKeydownArrowRight: [{\n type: HostListener,\n args: ['keydown.arrowright', ['$event']]\n }], onKeydownArrowLeft: [{\n type: HostListener,\n args: ['keydown.arrowleft', ['$event']]\n }], onTap: [{\n type: HostListener,\n args: ['tap', ['$event']]\n }], onKeydownHome: [{\n type: HostListener,\n args: ['keydown.home', ['$event']]\n }], onKeydownEnd: [{\n type: HostListener,\n args: ['keydown.end', ['$event']]\n }], onMouseEnter: [{\n type: HostListener,\n args: ['mouseenter']\n }], onMouseLeave: [{\n type: HostListener,\n args: ['mouseleave']\n }], onPanLeft: [{\n type: HostListener,\n args: ['panleft', ['$event']]\n }], onPanRight: [{\n type: HostListener,\n args: ['panright', ['$event']]\n }], onPanEnd: [{\n type: HostListener,\n args: ['panend', ['$event']]\n }] } });\n/**\n * @hidden\n */\nclass IgxCarouselModule {\n}\nIgxCarouselModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCarouselModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxCarouselModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCarouselModule, declarations: [IgxCarouselComponent, IgxSlideComponent,\n IgxCarouselIndicatorDirective,\n IgxCarouselNextButtonDirective,\n IgxCarouselPrevButtonDirective], imports: [CommonModule, IgxIconModule], exports: [IgxCarouselComponent, IgxSlideComponent,\n IgxCarouselIndicatorDirective,\n IgxCarouselNextButtonDirective,\n IgxCarouselPrevButtonDirective] });\nIgxCarouselModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCarouselModule, imports: [CommonModule, IgxIconModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCarouselModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxCarouselComponent,\n IgxSlideComponent,\n IgxCarouselIndicatorDirective,\n IgxCarouselNextButtonDirective,\n IgxCarouselPrevButtonDirective\n ],\n exports: [\n IgxCarouselComponent,\n IgxSlideComponent,\n IgxCarouselIndicatorDirective,\n IgxCarouselNextButtonDirective,\n IgxCarouselPrevButtonDirective\n ],\n imports: [CommonModule, IgxIconModule]\n }]\n }] });\n\nlet CHIP_ID = 0;\n/**\n * Chip is compact visual component that displays information in an obround.\n *\n * @igxModule IgxChipsModule\n *\n * @igxTheme igx-chip-theme\n *\n * @igxKeywords chip\n *\n * @igxGroup display\n *\n * @remarks\n * The Ignite UI Chip can be templated, deleted, and selected.\n * Multiple chips can be reordered and visually connected to each other.\n * Chips reside in a container called chips area which is responsible for managing the interactions between the chips.\n *\n * @example\n * ```html\n * \n * \n * \n * ```\n */\nclass IgxChipComponent extends DisplayDensityBase {\n /**\n * An @Input property that sets the value of `tabindex` attribute. If not provided it will use the element's tabindex if set.\n *\n * @example\n * ```html\n * \n * ```\n */\n set tabIndex(value) {\n this._tabIndex = value;\n }\n get tabIndex() {\n if (this._tabIndex !== null) {\n return this._tabIndex;\n }\n return !this.disabled ? 0 : null;\n }\n /**\n * Sets the `IgxChipComponent` selected state.\n *\n * @example\n * ```html\n * \n * ```\n *\n * Two-way data binding:\n * ```html\n * \n * ```\n */\n set selected(newValue) {\n this.changeSelection(newValue);\n }\n /**\n * Returns if the `IgxChipComponent` is selected.\n *\n * @example\n * ```typescript\n * @ViewChild('myChip')\n * public chip: IgxChipComponent;\n * selectedChip(){\n * let selectedChip = this.chip.selected;\n * }\n * ```\n */\n get selected() {\n return this._selected;\n }\n /**\n * An @Input property that sets the `IgxChipComponent` background color.\n * The `color` property supports string, rgb, hex.\n *\n * @example\n * ```html\n * \n * ```\n */\n set color(newColor) {\n this.chipArea.nativeElement.style.backgroundColor = newColor;\n }\n /**\n * Returns the background color of the `IgxChipComponent`.\n *\n * @example\n * ```typescript\n * @ViewChild('myChip')\n * public chip: IgxChipComponent;\n * ngAfterViewInit(){\n * let chipColor = this.chip.color;\n * }\n * ```\n */\n get color() {\n return this.chipArea.nativeElement.style.backgroundColor;\n }\n /**\n * An accessor that sets the resource strings.\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /**\n * An accessor that returns the resource strings.\n */\n get resourceStrings() {\n return this._resourceStrings;\n }\n /**\n * @hidden\n * @internal\n */\n get removeButtonTemplate() {\n return this.removeIcon || this.defaultRemoveIcon;\n }\n /**\n * @hidden\n * @internal\n */\n get selectIconTemplate() {\n return this.selectIcon || this.defaultSelectIcon;\n }\n /**\n * @hidden\n * @internal\n */\n get ghostClass() {\n return this.getComponentDensityClass('igx-chip__ghost');\n }\n /** @hidden @internal */\n get nativeElement() {\n return this.ref.nativeElement;\n }\n constructor(cdr, ref, renderer, _displayDensityOptions) {\n super(_displayDensityOptions);\n this.cdr = cdr;\n this.ref = ref;\n this.renderer = renderer;\n this._displayDensityOptions = _displayDensityOptions;\n /**\n * An @Input property that sets the value of `id` attribute. If not provided it will be automatically generated.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.id = `igx-chip-${CHIP_ID++}`;\n /**\n * Returns the `role` attribute of the chip.\n *\n * @example\n * ```typescript\n * let chipRole = this.chip.role;\n * ```\n */\n this.role = 'option';\n /**\n * An @Input property that defines if the `IgxChipComponent` can be dragged in order to change it's position.\n * By default it is set to false.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.draggable = false;\n /**\n * An @Input property that enables/disables the draggable element animation when the element is released.\n * By default it's set to true.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.animateOnRelease = true;\n /**\n * An @Input property that enables/disables the hiding of the base element that has been dragged.\n * By default it's set to true.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.hideBaseOnDrag = true;\n /**\n * An @Input property that defines if the `IgxChipComponent` should render remove button and throw remove events.\n * By default it is set to false.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.removable = false;\n /**\n * An @Input property that defines if the `IgxChipComponent` can be selected on click or through navigation,\n * By default it is set to false.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.selectable = false;\n /**\n * An @Input property that defines if the `IgxChipComponent` is disabled. When disabled it restricts user interactions\n * like focusing on click or tab, selection on click or Space, dragging.\n * By default it is set to false.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.disabled = false;\n /**\n * @hidden\n * @internal\n */\n this.selectedChange = new EventEmitter();\n /**\n * Emits an event when the `IgxChipComponent` moving starts.\n * Returns the moving `IgxChipComponent`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.moveStart = new EventEmitter();\n /**\n * Emits an event when the `IgxChipComponent` moving ends.\n * Returns the moved `IgxChipComponent`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.moveEnd = new EventEmitter();\n /**\n * Emits an event when the `IgxChipComponent` is removed.\n * Returns the removed `IgxChipComponent`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.remove = new EventEmitter();\n /**\n * Emits an event when the `IgxChipComponent` is clicked.\n * Returns the clicked `IgxChipComponent`, whether the event should be canceled.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.chipClick = new EventEmitter();\n /**\n * Emits event when the `IgxChipComponent` is selected/deselected.\n * Returns the selected chip reference, whether the event should be canceled, what is the next selection state and\n * when the event is triggered by interaction `originalEvent` is provided, otherwise `originalEvent` is `null`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.selectedChanging = new EventEmitter();\n /**\n * Emits event when the `IgxChipComponent` is selected/deselected and any related animations and transitions also end.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.selectedChanged = new EventEmitter();\n /**\n * Emits an event when the `IgxChipComponent` keyboard navigation is being used.\n * Returns the focused/selected `IgxChipComponent`, whether the event should be canceled,\n * if the `alt`, `shift` or `control` key is pressed and the pressed key name.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.keyDown = new EventEmitter();\n /**\n * Emits an event when the `IgxChipComponent` has entered the `IgxChipsAreaComponent`.\n * Returns the target `IgxChipComponent`, the drag `IgxChipComponent`, as well as\n * the original drop event arguments.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.dragEnter = new EventEmitter();\n /**\n * Emits an event when the `IgxChipComponent` has left the `IgxChipsAreaComponent`.\n * Returns the target `IgxChipComponent`, the drag `IgxChipComponent`, as well as\n * the original drop event arguments.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.dragLeave = new EventEmitter();\n /**\n * Emits an event when the `IgxChipComponent` is over the `IgxChipsAreaComponent`.\n * Returns the target `IgxChipComponent`, the drag `IgxChipComponent`, as well as\n * the original drop event arguments.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.dragOver = new EventEmitter();\n /**\n * Emits an event when the `IgxChipComponent` has been dropped in the `IgxChipsAreaComponent`.\n * Returns the target `IgxChipComponent`, the drag `IgxChipComponent`, as well as\n * the original drop event arguments.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.dragDrop = new EventEmitter();\n /**\n * @hidden\n * @internal\n */\n this.hideBaseElement = false;\n /**\n * @hidden\n * @internal\n */\n this.destroy$ = new Subject();\n this._tabIndex = null;\n this._selected = false;\n this._selectedItemClass = 'igx-chip__item--selected';\n this._movedWhileRemoving = false;\n this._resourceStrings = CurrentResourceStrings.ChipResStrings;\n }\n get hostClass() {\n const classes = [this.getComponentDensityClass('igx-chip')];\n // Add the base class first for each density\n if (!classes.includes('igx-chip')) {\n classes.unshift('igx-chip');\n }\n classes.push(this.disabled ? 'igx-chip--disabled' : '');\n return classes.join(' ').toString().trim();\n }\n /**\n * @hidden\n * @internal\n */\n keyEvent(event) {\n this.onChipKeyDown(event);\n }\n /**\n * @hidden\n * @internal\n */\n selectClass(condition) {\n const SELECT_CLASS = 'igx-chip__select';\n return {\n [SELECT_CLASS]: condition,\n [`${SELECT_CLASS}--hidden`]: !condition\n };\n }\n onSelectTransitionDone(event) {\n if (!!event.target.tagName) {\n // Trigger onSelectionDone on when `width` property is changed and the target is valid element(not comment).\n this.selectedChanged.emit({\n owner: this,\n originalEvent: event\n });\n }\n }\n /**\n * @hidden\n * @internal\n */\n onChipKeyDown(event) {\n const keyDownArgs = {\n originalEvent: event,\n owner: this,\n cancel: false\n };\n this.keyDown.emit(keyDownArgs);\n if (keyDownArgs.cancel) {\n return;\n }\n if ((event.key === 'Delete' || event.key === 'Del') && this.removable) {\n this.remove.emit({\n originalEvent: event,\n owner: this\n });\n }\n if ((event.key === ' ' || event.key === 'Spacebar') && this.selectable && !this.disabled) {\n this.changeSelection(!this.selected, event);\n }\n if (event.key !== 'Tab') {\n event.preventDefault();\n }\n }\n /**\n * @hidden\n * @internal\n */\n onRemoveBtnKeyDown(event) {\n if (event.key === ' ' || event.key === 'Spacebar' || event.key === 'Enter') {\n this.remove.emit({\n originalEvent: event,\n owner: this\n });\n event.preventDefault();\n event.stopPropagation();\n }\n }\n onRemoveMouseDown(event) {\n event.stopPropagation();\n }\n /**\n * @hidden\n * @internal\n */\n onRemoveClick(event) {\n this.remove.emit({\n originalEvent: event,\n owner: this\n });\n }\n /**\n * @hidden\n * @internal\n */\n onRemoveTouchMove() {\n // We don't remove chip if user starting touch interacting on the remove button moves the chip\n this._movedWhileRemoving = true;\n }\n /**\n * @hidden\n * @internal\n */\n onRemoveTouchEnd(event) {\n if (!this._movedWhileRemoving) {\n this.onRemoveClick(event);\n }\n this._movedWhileRemoving = false;\n }\n /**\n * @hidden\n * @internal\n */\n // -----------------------------\n // Start chip igxDrag behavior\n onChipDragStart(event) {\n this.moveStart.emit({\n originalEvent: event,\n owner: this\n });\n event.cancel = !this.draggable || this.disabled;\n }\n /**\n * @hidden\n * @internal\n */\n onChipDragEnd() {\n if (this.animateOnRelease) {\n this.dragDirective.transitionToOrigin();\n }\n }\n /**\n * @hidden\n * @internal\n */\n onChipMoveEnd(event) {\n // moveEnd is triggered after return animation has finished. This happen when we drag and release the chip.\n this.moveEnd.emit({\n originalEvent: event,\n owner: this\n });\n if (this.selected) {\n this.chipArea.nativeElement.focus();\n }\n }\n /**\n * @hidden\n * @internal\n */\n onChipGhostCreate() {\n this.hideBaseElement = this.hideBaseOnDrag;\n }\n /**\n * @hidden\n * @internal\n */\n onChipGhostDestroy() {\n this.hideBaseElement = false;\n }\n /**\n * @hidden\n * @internal\n */\n onChipDragClicked(event) {\n const clickEventArgs = {\n originalEvent: event,\n owner: this,\n cancel: false\n };\n this.chipClick.emit(clickEventArgs);\n if (!clickEventArgs.cancel && this.selectable && !this.disabled) {\n this.changeSelection(!this.selected, event);\n }\n }\n // End chip igxDrag behavior\n /**\n * @hidden\n * @internal\n */\n // -----------------------------\n // Start chip igxDrop behavior\n onChipDragEnterHandler(event) {\n var _a;\n if (this.dragDirective === event.drag) {\n return;\n }\n const eventArgs = {\n owner: this,\n dragChip: (_a = event.drag.data) === null || _a === void 0 ? void 0 : _a.chip,\n originalEvent: event\n };\n this.dragEnter.emit(eventArgs);\n }\n /**\n * @hidden\n * @internal\n */\n onChipDragLeaveHandler(event) {\n var _a;\n if (this.dragDirective === event.drag) {\n return;\n }\n const eventArgs = {\n owner: this,\n dragChip: (_a = event.drag.data) === null || _a === void 0 ? void 0 : _a.chip,\n originalEvent: event\n };\n this.dragLeave.emit(eventArgs);\n }\n /**\n * @hidden\n * @internal\n */\n onChipDrop(event) {\n var _a;\n // Cancel the default drop logic\n event.cancel = true;\n if (this.dragDirective === event.drag) {\n return;\n }\n const eventArgs = {\n owner: this,\n dragChip: (_a = event.drag.data) === null || _a === void 0 ? void 0 : _a.chip,\n originalEvent: event\n };\n this.dragDrop.emit(eventArgs);\n }\n /**\n * @hidden\n * @internal\n */\n onChipOverHandler(event) {\n var _a;\n if (this.dragDirective === event.drag) {\n return;\n }\n const eventArgs = {\n owner: this,\n dragChip: (_a = event.drag.data) === null || _a === void 0 ? void 0 : _a.chip,\n originalEvent: event\n };\n this.dragOver.emit(eventArgs);\n }\n // End chip igxDrop behavior\n changeSelection(newValue, srcEvent = null) {\n const onSelectArgs = {\n originalEvent: srcEvent,\n owner: this,\n selected: false,\n cancel: false\n };\n fromEvent(this.selectContainer.nativeElement, 'transitionend')\n .pipe(filter(event => event.propertyName === 'width'), take(1))\n .subscribe(event => this.onSelectTransitionDone(event));\n if (newValue && !this._selected) {\n onSelectArgs.selected = true;\n this.selectedChanging.emit(onSelectArgs);\n if (!onSelectArgs.cancel) {\n this.renderer.addClass(this.chipArea.nativeElement, this._selectedItemClass);\n this._selected = newValue;\n this.selectedChange.emit(this._selected);\n }\n }\n else if (!newValue && this._selected) {\n this.selectedChanging.emit(onSelectArgs);\n if (!onSelectArgs.cancel) {\n this.renderer.removeClass(this.chipArea.nativeElement, this._selectedItemClass);\n this._selected = newValue;\n this.selectedChange.emit(this._selected);\n }\n }\n }\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\nIgxChipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxChipComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxChipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxChipComponent, selector: \"igx-chip\", inputs: { id: \"id\", tabIndex: \"tabIndex\", data: \"data\", draggable: \"draggable\", animateOnRelease: \"animateOnRelease\", hideBaseOnDrag: \"hideBaseOnDrag\", removable: \"removable\", removeIcon: \"removeIcon\", selectable: \"selectable\", selectIcon: \"selectIcon\", disabled: \"disabled\", selected: \"selected\", color: \"color\", resourceStrings: \"resourceStrings\" }, outputs: { selectedChange: \"selectedChange\", moveStart: \"moveStart\", moveEnd: \"moveEnd\", remove: \"remove\", chipClick: \"chipClick\", selectedChanging: \"selectedChanging\", selectedChanged: \"selectedChanged\", keyDown: \"keyDown\", dragEnter: \"dragEnter\", dragLeave: \"dragLeave\", dragOver: \"dragOver\", dragDrop: \"dragDrop\" }, host: { listeners: { \"keydown\": \"keyEvent($event)\" }, properties: { \"attr.id\": \"this.id\", \"attr.role\": \"this.role\", \"attr.tabIndex\": \"this.tabIndex\", \"attr.aria-selected\": \"this.selected\", \"class\": \"this.hostClass\" } }, viewQueries: [{ propertyName: \"dragDirective\", first: true, predicate: [\"chipArea\"], descendants: true, read: IgxDragDirective, static: true }, { propertyName: \"chipArea\", first: true, predicate: [\"chipArea\"], descendants: true, read: ElementRef, static: true }, { propertyName: \"selectContainer\", first: true, predicate: [\"selectContainer\"], descendants: true, read: ElementRef, static: true }, { propertyName: \"defaultRemoveIcon\", first: true, predicate: [\"defaultRemoveIcon\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"defaultSelectIcon\", first: true, predicate: [\"defaultSelectIcon\"], descendants: true, read: TemplateRef, static: true }], 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 done\\n\\n\\n\\n cancel\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxDragDirective, selector: \"[igxDrag]\", inputs: [\"igxDrag\", \"dragTolerance\", \"dragDirection\", \"dragChannel\", \"ghost\", \"ghostClass\", \"ghostTemplate\", \"ghostHost\", \"scrollContainer\", \"ghostOffsetX\", \"ghostOffsetY\"], outputs: [\"dragStart\", \"dragMove\", \"dragEnd\", \"dragClick\", \"ghostCreate\", \"ghostDestroy\", \"transitioned\"], exportAs: [\"drag\"] }, { kind: \"directive\", type: IgxDropDirective, selector: \"[igxDrop]\", inputs: [\"igxDrop\", \"dropChannel\", \"dropStrategy\"], outputs: [\"enter\", \"over\", \"leave\", \"dropped\"], exportAs: [\"drop\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxChipComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-chip', template: \"
    \\n\\n
    \\n \\n
    \\n\\n \\n\\n
    \\n \\n
    \\n\\n \\n\\n
    \\n \\n
    \\n
    \\n\\n\\n done\\n\\n\\n\\n cancel\\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }];\n }, propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabIndex']\n }, {\n type: Input\n }], data: [{\n type: Input\n }], draggable: [{\n type: Input\n }], animateOnRelease: [{\n type: Input\n }], hideBaseOnDrag: [{\n type: Input\n }], removable: [{\n type: Input\n }], removeIcon: [{\n type: Input\n }], selectable: [{\n type: Input\n }], selectIcon: [{\n type: Input\n }], disabled: [{\n type: Input\n }], selected: [{\n type: HostBinding,\n args: ['attr.aria-selected']\n }, {\n type: Input\n }], selectedChange: [{\n type: Output\n }], color: [{\n type: Input\n }], resourceStrings: [{\n type: Input\n }], moveStart: [{\n type: Output\n }], moveEnd: [{\n type: Output\n }], remove: [{\n type: Output\n }], chipClick: [{\n type: Output\n }], selectedChanging: [{\n type: Output\n }], selectedChanged: [{\n type: Output\n }], keyDown: [{\n type: Output\n }], dragEnter: [{\n type: Output\n }], dragLeave: [{\n type: Output\n }], dragOver: [{\n type: Output\n }], dragDrop: [{\n type: Output\n }], dragDirective: [{\n type: ViewChild,\n args: ['chipArea', { read: IgxDragDirective, static: true }]\n }], chipArea: [{\n type: ViewChild,\n args: ['chipArea', { read: ElementRef, static: true }]\n }], selectContainer: [{\n type: ViewChild,\n args: ['selectContainer', { read: ElementRef, static: true }]\n }], defaultRemoveIcon: [{\n type: ViewChild,\n args: ['defaultRemoveIcon', { read: TemplateRef, static: true }]\n }], defaultSelectIcon: [{\n type: ViewChild,\n args: ['defaultSelectIcon', { read: TemplateRef, static: true }]\n }], hostClass: [{\n type: HostBinding,\n args: ['class']\n }], keyEvent: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n\n/**\n * The chip area allows you to perform more complex scenarios with chips that require interaction,\n * like dragging, selection, navigation, etc.\n *\n * @igxModule IgxChipsModule\n *\n * @igxTheme igx-chip-theme\n *\n * @igxKeywords chip area, chip\n *\n * @igxGroup display\n *\n * @example\n * ```html\n * \n * \n * {{chip.text}}\n * \n * \n * ```\n */\nclass IgxChipsAreaComponent {\n /** @hidden @internal */\n get _widthToRem() {\n return rem(this.width);\n }\n /** @hidden @internal */\n get _heightToRem() {\n return rem(this.height);\n }\n constructor(cdr, element, _iterableDiffers) {\n this.cdr = cdr;\n this.element = element;\n this._iterableDiffers = _iterableDiffers;\n /**\n * Returns the `role` attribute of the chips area.\n *\n * @example\n * ```typescript\n * let chipsAreaRole = this.chipsArea.role;\n * ```\n */\n this.role = 'listbox';\n /**\n * Returns the `aria-label` attribute of the chips area.\n *\n * @example\n * ```typescript\n * let ariaLabel = this.chipsArea.ariaLabel;\n * ```\n *\n */\n this.ariaLabel = 'chip area';\n /**\n * Emits an event when `IgxChipComponent`s in the `IgxChipsAreaComponent` should be reordered.\n * Returns an array of `IgxChipComponent`s.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.reorder = new EventEmitter();\n /**\n * Emits an event when an `IgxChipComponent` in the `IgxChipsAreaComponent` is selected/deselected.\n * Fired after the chips area is initialized if there are initially selected chips as well.\n * Returns an array of selected `IgxChipComponent`s and the `IgxChipAreaComponent`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.selectionChange = new EventEmitter();\n /**\n * Emits an event when an `IgxChipComponent` in the `IgxChipsAreaComponent` is moved.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.moveStart = new EventEmitter();\n /**\n * Emits an event after an `IgxChipComponent` in the `IgxChipsAreaComponent` is moved.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.moveEnd = new EventEmitter();\n this.destroy$ = new Subject();\n this.hostClass = 'igx-chip-area';\n this._differ = null;\n this._differ = this._iterableDiffers.find([]).create(null);\n }\n /**\n * @hidden\n * @internal\n */\n ngAfterViewInit() {\n // If we have initially selected chips through their inputs, we need to get them, because we cannot listen to their events yet.\n if (this.chipsList.length) {\n const selectedChips = this.chipsList.filter((item) => item.selected);\n if (selectedChips.length) {\n this.selectionChange.emit({\n originalEvent: null,\n newSelection: selectedChips,\n owner: this\n });\n }\n }\n }\n /**\n * @hidden\n * @internal\n */\n ngDoCheck() {\n if (this.chipsList) {\n const changes = this._differ.diff(this.chipsList.toArray());\n if (changes) {\n changes.forEachAddedItem((addedChip) => {\n addedChip.item.moveStart.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {\n this.onChipMoveStart(args);\n });\n addedChip.item.moveEnd.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {\n this.onChipMoveEnd(args);\n });\n addedChip.item.dragEnter.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {\n this.onChipDragEnter(args);\n });\n addedChip.item.keyDown.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {\n this.onChipKeyDown(args);\n });\n if (addedChip.item.selectable) {\n addedChip.item.selectedChanging.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {\n this.onChipSelectionChange(args);\n });\n }\n });\n this.modifiedChipsArray = this.chipsList.toArray();\n }\n }\n }\n /**\n * @hidden\n * @internal\n */\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n /**\n * @hidden\n * @internal\n */\n onChipKeyDown(event) {\n let orderChanged = false;\n const chipsArray = this.chipsList.toArray();\n const dragChipIndex = chipsArray.findIndex((el) => el === event.owner);\n if (event.originalEvent.shiftKey === true) {\n if (event.originalEvent.key === 'ArrowLeft' || event.originalEvent.key === 'Left') {\n orderChanged = this.positionChipAtIndex(dragChipIndex, dragChipIndex - 1, false, event.originalEvent);\n if (orderChanged) {\n setTimeout(() => {\n this.chipsList.get(dragChipIndex - 1).nativeElement.focus();\n });\n }\n }\n else if (event.originalEvent.key === 'ArrowRight' || event.originalEvent.key === 'Right') {\n orderChanged = this.positionChipAtIndex(dragChipIndex, dragChipIndex + 1, true, event.originalEvent);\n }\n }\n else {\n if ((event.originalEvent.key === 'ArrowLeft' || event.originalEvent.key === 'Left') && dragChipIndex > 0) {\n chipsArray[dragChipIndex - 1].nativeElement.focus();\n }\n else if ((event.originalEvent.key === 'ArrowRight' || event.originalEvent.key === 'Right') &&\n dragChipIndex < chipsArray.length - 1) {\n chipsArray[dragChipIndex + 1].nativeElement.focus();\n }\n }\n }\n /**\n * @hidden\n * @internal\n */\n onChipMoveStart(event) {\n this.moveStart.emit({\n originalEvent: event.originalEvent,\n owner: this\n });\n }\n /**\n * @hidden\n * @internal\n */\n onChipMoveEnd(event) {\n this.moveEnd.emit({\n originalEvent: event.originalEvent,\n owner: this\n });\n }\n /**\n * @hidden\n * @internal\n */\n onChipDragEnter(event) {\n const dropChipIndex = this.chipsList.toArray().findIndex((el) => el === event.owner);\n const dragChipIndex = this.chipsList.toArray().findIndex((el) => el === event.dragChip);\n if (dragChipIndex < dropChipIndex) {\n // from the left to right\n this.positionChipAtIndex(dragChipIndex, dropChipIndex, true, event.originalEvent);\n }\n else {\n // from the right to left\n this.positionChipAtIndex(dragChipIndex, dropChipIndex, false, event.originalEvent);\n }\n }\n /**\n * @hidden\n * @internal\n */\n positionChipAtIndex(chipIndex, targetIndex, shiftRestLeft, originalEvent) {\n if (chipIndex < 0 || this.chipsList.length <= chipIndex ||\n targetIndex < 0 || this.chipsList.length <= targetIndex) {\n return false;\n }\n const chipsArray = this.chipsList.toArray();\n const result = [];\n for (let i = 0; i < chipsArray.length; i++) {\n if (shiftRestLeft) {\n if (chipIndex <= i && i < targetIndex) {\n result.push(chipsArray[i + 1]);\n }\n else if (i === targetIndex) {\n result.push(chipsArray[chipIndex]);\n }\n else {\n result.push(chipsArray[i]);\n }\n }\n else {\n if (targetIndex < i && i <= chipIndex) {\n result.push(chipsArray[i - 1]);\n }\n else if (i === targetIndex) {\n result.push(chipsArray[chipIndex]);\n }\n else {\n result.push(chipsArray[i]);\n }\n }\n }\n this.modifiedChipsArray = result;\n const eventData = {\n chipsArray: this.modifiedChipsArray,\n originalEvent,\n owner: this\n };\n this.reorder.emit(eventData);\n return true;\n }\n /**\n * @hidden\n * @internal\n */\n onChipSelectionChange(event) {\n let selectedChips = this.chipsList.filter((chip) => chip.selected);\n if (event.selected && !selectedChips.includes(event.owner)) {\n selectedChips.push(event.owner);\n }\n else if (!event.selected && selectedChips.includes(event.owner)) {\n selectedChips = selectedChips.filter((chip) => chip.id !== event.owner.id);\n }\n this.selectionChange.emit({\n originalEvent: event.originalEvent,\n newSelection: selectedChips,\n owner: this\n });\n }\n}\nIgxChipsAreaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxChipsAreaComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });\nIgxChipsAreaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxChipsAreaComponent, selector: \"igx-chips-area\", inputs: { width: \"width\", height: \"height\" }, outputs: { reorder: \"reorder\", selectionChange: \"selectionChange\", moveStart: \"moveStart\", moveEnd: \"moveEnd\" }, host: { properties: { \"attr.role\": \"this.role\", \"attr.aria-label\": \"this.ariaLabel\", \"style.width.rem\": \"this._widthToRem\", \"style.height.rem\": \"this._heightToRem\", \"class\": \"this.hostClass\" } }, queries: [{ propertyName: \"chipsList\", predicate: IgxChipComponent, descendants: true }], ngImport: i0, template: \"\\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxChipsAreaComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-chips-area', template: \"\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.IterableDiffers }]; }, propDecorators: { role: [{\n type: HostBinding,\n args: ['attr.role']\n }], ariaLabel: [{\n type: HostBinding,\n args: ['attr.aria-label']\n }], width: [{\n type: Input\n }], _widthToRem: [{\n type: HostBinding,\n args: ['style.width.rem']\n }], height: [{\n type: Input\n }], _heightToRem: [{\n type: HostBinding,\n args: ['style.height.rem']\n }], reorder: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], moveStart: [{\n type: Output\n }], moveEnd: [{\n type: Output\n }], chipsList: [{\n type: ContentChildren,\n args: [IgxChipComponent, { descendants: true }]\n }], hostClass: [{\n type: HostBinding,\n args: ['class']\n }] } });\n\n/**\n * @hidden\n */\nclass IgxChipsModule {\n}\nIgxChipsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxChipsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxChipsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxChipsModule, declarations: [IgxChipsAreaComponent,\n IgxChipComponent], imports: [CommonModule,\n IgxRippleModule,\n IgxIconModule,\n IgxButtonModule,\n IgxAvatarModule,\n IgxDragDropModule,\n IgxPrefixModule,\n IgxSuffixModule], exports: [IgxChipsAreaComponent,\n IgxChipComponent,\n IgxPrefixDirective,\n IgxSuffixDirective] });\nIgxChipsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxChipsModule, imports: [CommonModule,\n IgxRippleModule,\n IgxIconModule,\n IgxButtonModule,\n IgxAvatarModule,\n IgxDragDropModule,\n IgxPrefixModule,\n IgxSuffixModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxChipsModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxChipsAreaComponent,\n IgxChipComponent\n ],\n exports: [\n IgxChipsAreaComponent,\n IgxChipComponent,\n IgxPrefixDirective,\n IgxSuffixDirective\n ],\n imports: [\n CommonModule,\n IgxRippleModule,\n IgxIconModule,\n IgxButtonModule,\n IgxAvatarModule,\n IgxDragDropModule,\n IgxPrefixModule,\n IgxSuffixModule\n ]\n }]\n }] });\n\n/**\n * @hidden\n */\nclass IgxComboAPIService {\n constructor() {\n this.disableTransitions = false;\n }\n get valueKey() {\n return this.combo.valueKey !== null && this.combo.valueKey !== undefined ? this.combo.valueKey : null;\n }\n get item_focusable() {\n return false;\n }\n get isRemote() {\n return this.combo.isRemote;\n }\n get comboID() {\n return this.combo.id;\n }\n register(combo) {\n this.combo = combo;\n }\n clear() {\n this.combo = null;\n }\n add_custom_item() {\n if (!this.combo) {\n return;\n }\n this.combo.addItemToCollection();\n }\n set_selected_item(itemID, event) {\n const selected = this.combo.isItemSelected(itemID);\n if (itemID === undefined) {\n return;\n }\n if (!selected) {\n this.combo.select([itemID], false, event);\n }\n else {\n this.combo.deselect([itemID], event);\n }\n }\n is_item_selected(itemID) {\n return this.combo.isItemSelected(itemID);\n }\n}\nIgxComboAPIService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboAPIService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIgxComboAPIService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboAPIService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboAPIService, decorators: [{\n type: Injectable\n }] });\n\n/** @hidden */\nclass IgxComboItemComponent extends IgxDropDownItemComponent {\n /** @hidden @internal */\n get _itemHeightToRem() {\n return rem(this.itemHeight);\n }\n get ariaLabel() {\n const valueKey = this.comboAPI.valueKey;\n return (valueKey !== null && this.value != null) ? this.value[valueKey] : this.value;\n }\n /**\n * @hidden\n */\n get itemID() {\n const valueKey = this.comboAPI.valueKey;\n return valueKey !== null ? this.value[valueKey] : this.value;\n }\n /**\n * @hidden\n */\n get comboID() {\n return this.comboAPI.comboID;\n }\n /**\n * @hidden\n * @internal\n */\n get disableTransitions() {\n return this.comboAPI.disableTransitions;\n }\n constructor(comboAPI, dropDown, elementRef, selection) {\n super(dropDown, elementRef, null, selection);\n this.comboAPI = comboAPI;\n /**\n * Gets the height of a list item\n *\n * @hidden\n */\n this.itemHeight = '';\n }\n /**\n * @hidden\n */\n get selected() {\n return this.comboAPI.is_item_selected(this.itemID);\n }\n set selected(value) {\n if (this.isHeader) {\n return;\n }\n this._selected = value;\n }\n /**\n * @hidden\n */\n isVisible(direction) {\n const rect = this.element.nativeElement.getBoundingClientRect();\n const parentDiv = this.element.nativeElement.parentElement.parentElement.getBoundingClientRect();\n if (direction === Navigate.Down) {\n return rect.y + rect.height <= parentDiv.y + parentDiv.height;\n }\n return rect.y >= parentDiv.y;\n }\n clicked(event) {\n this.comboAPI.disableTransitions = false;\n if (!this.isSelectable) {\n return;\n }\n this.dropDown.navigateItem(this.index);\n this.comboAPI.set_selected_item(this.itemID, event);\n }\n /**\n * @hidden\n * @internal\n * The event that is prevented is the click on the checkbox label element.\n * That is the only visible element that a user can interact with.\n * The click propagates to the host and the preventDefault is to stop it from\n * switching focus to the input it's base on.\n * The toggle happens in an internal handler in the drop-down on the next task queue cycle.\n */\n disableCheck(event) {\n event.preventDefault();\n }\n}\nIgxComboItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboItemComponent, deps: [{ token: IgxComboAPIService }, { token: IGX_DROPDOWN_BASE }, { token: i0.ElementRef }, { token: IgxSelectionAPIService }], target: i0.ɵɵFactoryTarget.Component });\nIgxComboItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboItemComponent, selector: \"igx-combo-item\", inputs: { itemHeight: \"itemHeight\", ariaLabel: \"ariaLabel\", singleMode: \"singleMode\" }, host: { properties: { \"style.height.rem\": \"this._itemHeightToRem\", \"attr.aria-label\": \"this.ariaLabel\" } }, usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxCheckboxComponent, selector: \"igx-checkbox\", inputs: [\"id\", \"labelId\", \"value\", \"name\", \"tabindex\", \"labelPosition\", \"disableRipple\", \"required\", \"aria-labelledby\", \"aria-label\", \"indeterminate\", \"checked\", \"disabled\", \"invalid\", \"readonly\", \"disableTransitions\"], outputs: [\"change\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-combo-item', template: \"\\n \\n \\n\\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: IgxComboAPIService }, { type: undefined, decorators: [{\n type: Inject,\n args: [IGX_DROPDOWN_BASE]\n }] }, { type: i0.ElementRef }, { type: IgxSelectionAPIService, decorators: [{\n type: Inject,\n args: [IgxSelectionAPIService]\n }] }];\n }, propDecorators: { itemHeight: [{\n type: Input\n }], _itemHeightToRem: [{\n type: HostBinding,\n args: ['style.height.rem']\n }], ariaLabel: [{\n type: HostBinding,\n args: ['attr.aria-label']\n }, {\n type: Input\n }], singleMode: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass IgxComboAddItemComponent extends IgxComboItemComponent {\n get selected() {\n return false;\n }\n set selected(value) {\n }\n clicked(event) {\n this.comboAPI.disableTransitions = false;\n this.comboAPI.add_custom_item();\n }\n}\nIgxComboAddItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboAddItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxComboAddItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboAddItemComponent, selector: \"igx-combo-add-item\", providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }], usesInheritance: true, ngImport: i0, template: '', isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboAddItemComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'igx-combo-add-item',\n template: '',\n providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }]\n }]\n }] });\n\n/**\n * Allows a custom element to be added at the beginning of the combo list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * \n * \n *
    Custom header
    \n * \n *
    \n *
    \n */\nclass IgxComboHeaderDirective {\n}\nIgxComboHeaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboHeaderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxComboHeaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboHeaderDirective, selector: \"[igxComboHeader]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboHeaderDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxComboHeader]' }]\n }] });\n/**\n * Allows a custom element to be added at the end of the combo list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * \n * \n *
    Custom footer
    \n * \n *
    \n *
    \n */\nclass IgxComboFooterDirective {\n}\nIgxComboFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxComboFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboFooterDirective, selector: \"[igxComboFooter]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboFooterDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxComboFooter]' }]\n }] });\n/**\n * Allows the combo's items to be modified with a custom template\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * \n *\t\n *\t\t
    \n *\t\t\tState: {{ display[key] }}\n *\t \t\tRegion: {{ display.region }}\n *\t \t
    \n *\t
    \n *
    \n */\nclass IgxComboItemDirective {\n}\nIgxComboItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxComboItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboItemDirective, selector: \"[igxComboItem]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboItemDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxComboItem]' }]\n }] });\n/**\n * Defines the custom template that will be displayed when the combo's list is empty\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * \n * \n *
    \n * There are no items to display\n *
    \n *
    \n *
    \n */\nclass IgxComboEmptyDirective {\n}\nIgxComboEmptyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboEmptyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxComboEmptyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboEmptyDirective, selector: \"[igxComboEmpty]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboEmptyDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxComboEmpty]' }]\n }] });\n/**\n * Defines the custom template that will be used when rendering header items for groups in the combo's list\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * \n * \n *
    Group header for {{ item[key] }}
    \n *
    \n *
    \n */\nclass IgxComboHeaderItemDirective {\n}\nIgxComboHeaderItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboHeaderItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxComboHeaderItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboHeaderItemDirective, selector: \"[igxComboHeaderItem]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboHeaderItemDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxComboHeaderItem]' }]\n }] });\n/**\n * Defines the custom template that will be used to display the `ADD` button\n *\n * @remarks To show the `ADD` button, the `allowCustomValues` option must be enabled\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * \n * \n * \n * \n * \n */\nclass IgxComboAddItemDirective {\n}\nIgxComboAddItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboAddItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxComboAddItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboAddItemDirective, selector: \"[igxComboAddItem]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboAddItemDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxComboAddItem]' }]\n }] });\n/**\n * The custom template that will be used when rendering the combo's toggle button\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * \n * \n * {{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}\n * \n * \n */\nclass IgxComboToggleIconDirective {\n}\nIgxComboToggleIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboToggleIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxComboToggleIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboToggleIconDirective, selector: \"[igxComboToggleIcon]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboToggleIconDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxComboToggleIcon]' }]\n }] });\n/**\n * Defines the custom template that will be used when rendering the combo's clear icon\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * \n * \n * clear\n * \n * \n */\nclass IgxComboClearIconDirective {\n}\nIgxComboClearIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboClearIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxComboClearIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboClearIconDirective, selector: \"[igxComboClearIcon]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboClearIconDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxComboClearIcon]' }]\n }] });\n\nconst IGX_COMBO_COMPONENT = new InjectionToken('IgxComboComponentToken');\nlet NEXT_ID$e = 0;\n/**\n * @hidden\n * The default number of items that should be in the combo's\n * drop-down list if no `[itemsMaxHeight]` is specified\n */\nconst itemsInContainer = 10; // TODO: make private readonly\n/** @hidden @internal */\nconst ItemHeights = {\n comfortable: 40,\n cosy: 32,\n compact: 28,\n};\n/** @hidden @internal */\nvar DataTypes;\n(function (DataTypes) {\n DataTypes[\"EMPTY\"] = \"empty\";\n DataTypes[\"PRIMITIVE\"] = \"primitive\";\n DataTypes[\"COMPLEX\"] = \"complex\";\n DataTypes[\"PRIMARYKEY\"] = \"valueKey\";\n})(DataTypes || (DataTypes = {}));\nvar IgxComboState;\n(function (IgxComboState) {\n /**\n * Combo with initial state.\n */\n IgxComboState[IgxComboState[\"INITIAL\"] = 0] = \"INITIAL\";\n /**\n * Combo with valid state.\n */\n IgxComboState[IgxComboState[\"VALID\"] = 1] = \"VALID\";\n /**\n * Combo with invalid state.\n */\n IgxComboState[IgxComboState[\"INVALID\"] = 2] = \"INVALID\";\n})(IgxComboState || (IgxComboState = {}));\nclass IgxComboBaseDirective extends DisplayDensityBase {\n /**\n * Configures the drop down list height\n *\n * ```typescript\n * // get\n * let myComboItemsMaxHeight = this.combo.itemsMaxHeight;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n get itemsMaxHeight() {\n if (this._itemsMaxHeight === null || this._itemsMaxHeight === undefined) {\n return this.itemHeight * itemsInContainer;\n }\n return this._itemsMaxHeight;\n }\n set itemsMaxHeight(val) {\n this._itemsMaxHeight = val;\n }\n /** @hidden */\n get itemsMaxHeightInRem() {\n return rem(this.itemsMaxHeight);\n }\n /**\n * Configures the drop down list item height\n *\n * ```typescript\n * // get\n * let myComboItemHeight = this.combo.itemHeight;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n get itemHeight() {\n if (this._itemHeight === null || this._itemHeight === undefined) {\n return ItemHeights[this.displayDensity];\n }\n return this._itemHeight;\n }\n set itemHeight(val) {\n this._itemHeight = val;\n }\n /**\n * Combo data source.\n *\n * ```html\n * \n * \n * ```\n */\n get data() {\n return this._data;\n }\n set data(val) {\n // igxFor directive ignores undefined values\n // if the combo uses simple data and filtering is applied\n // an error will occur due to the mismatch of the length of the data\n // this can occur during filtering for the igx-combo and\n // during filtering & selection for the igx-simple-combo\n // since the simple combo's input is both a container for the selection and a filter\n this._data = (val) ? val.filter(x => x !== undefined) : [];\n }\n set displayKey(val) {\n this._displayKey = val;\n }\n /**\n * Determines which column in the data source is used to determine the display value.\n *\n * ```typescript\n * // get\n * let myComboDisplayKey = this.combo.displayKey;\n *\n * // set\n * this.combo.displayKey = 'val';\n *\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n get displayKey() {\n return this._displayKey ? this._displayKey : this.valueKey;\n }\n /**\n * The item property by which items should be grouped inside the items list. Not usable if data is not of type Object[].\n *\n * ```html\n * \n * \n * ```\n */\n set groupKey(val) {\n this._groupKey = val;\n }\n /**\n * The item property by which items should be grouped inside the items list. Not usable if data is not of type Object[].\n *\n * ```typescript\n * // get\n * let currentGroupKey = this.combo.groupKey;\n * ```\n */\n get groupKey() {\n return this._groupKey;\n }\n /**\n * An @Input property that sets groups sorting order.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * public groupSortingDirection = SortingDirection.Asc;\n * ```\n */\n get groupSortingDirection() {\n return this._groupSortingDirection;\n }\n set groupSortingDirection(val) {\n this._groupSortingDirection = val;\n }\n /**\n * An @Input property that sets how the combo will be styled.\n * The allowed values are `line`, `box`, `border` and `search`. The default is `box`.\n * ```html\n * \n * ```\n */\n get type() {\n return this._type || this._inputGroupType || 'box';\n }\n set type(val) {\n this._type = val;\n }\n /**\n * Gets/Sets the resource strings.\n *\n * @remarks\n * By default it uses EN resources.\n */\n get resourceStrings() {\n if (!this._resourceStrings) {\n this._resourceStrings = CurrentResourceStrings.ComboResStrings;\n }\n return this._resourceStrings;\n }\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /** @hidden @internal */\n get searchValue() {\n return this._searchValue;\n }\n set searchValue(val) {\n this.filterValue = val;\n this._searchValue = val;\n }\n /** @hidden @internal */\n get isRemote() {\n return this.totalItemCount > 0 &&\n this.valueKey &&\n this.dataType === DataTypes.COMPLEX;\n }\n /** @hidden @internal */\n get dataType() {\n if (this.displayKey) {\n return DataTypes.COMPLEX;\n }\n return DataTypes.PRIMITIVE;\n }\n /**\n * Gets if control is valid, when used in a form\n *\n * ```typescript\n * // get\n * let valid = this.combo.valid;\n * ```\n */\n get valid() {\n return this._valid;\n }\n /**\n * Sets if control is valid, when used in a form\n *\n * ```typescript\n * // set\n * this.combo.valid = IgxComboState.INVALID;\n * ```\n */\n set valid(valid) {\n this._valid = valid;\n this.comboInput.valid = IgxInputState[IgxComboState[valid]];\n }\n /**\n * The text displayed in the combo input\n *\n * ```typescript\n * // get\n * let comboValue = this.combo.value;\n * ```\n */\n get value() {\n return this._value;\n }\n /**\n * Defines the current state of the virtualized data. It contains `startIndex` and `chunkSize`\n *\n * ```typescript\n * // get\n * let state = this.combo.virtualizationState;\n * ```\n */\n get virtualizationState() {\n return this.virtDir.state;\n }\n /**\n * Sets the current state of the virtualized data.\n *\n * ```typescript\n * // set\n * this.combo.virtualizationState(state);\n * ```\n */\n set virtualizationState(state) {\n this.virtDir.state = state;\n }\n /**\n * Gets drop down state.\n *\n * ```typescript\n * let state = this.combo.collapsed;\n * ```\n */\n get collapsed() {\n return this.dropdown.collapsed;\n }\n /**\n * Gets total count of the virtual data items, when using remote service.\n *\n * ```typescript\n * // get\n * let count = this.combo.totalItemCount;\n * ```\n */\n get totalItemCount() {\n return this.virtDir.totalItemCount;\n }\n /**\n * Sets total count of the virtual data items, when using remote service.\n *\n * ```typescript\n * // set\n * this.combo.totalItemCount(remoteService.count);\n * ```\n */\n set totalItemCount(count) {\n this.virtDir.totalItemCount = count;\n }\n /** @hidden @internal */\n get template() {\n this._dataType = this.dataType;\n if (this.itemTemplate) {\n return this.itemTemplate;\n }\n if (this._dataType === DataTypes.COMPLEX) {\n return this.complexTemplate;\n }\n return this.primitiveTemplate;\n }\n /**\n * Configures the way combo items will be filtered.\n *\n * ```typescript\n * // get\n * let myFilteringOptions = this.combo.filteringOptions;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n get filteringOptions() {\n return this._filteringOptions || this._defaultFilteringOptions;\n }\n set filteringOptions(value) {\n this._filteringOptions = value;\n }\n constructor(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector) {\n super(_displayDensityOptions);\n this.elementRef = elementRef;\n this.cdr = cdr;\n this.selectionService = selectionService;\n this.comboAPI = comboAPI;\n this._iconService = _iconService;\n this._displayDensityOptions = _displayDensityOptions;\n this._inputGroupType = _inputGroupType;\n this._injector = _injector;\n /**\n * Defines whether the caseSensitive icon should be shown in the search input\n *\n * ```typescript\n * // get\n * let myComboShowSearchCaseIcon = this.combo.showSearchCaseIcon;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.showSearchCaseIcon = false;\n /**\n * Set custom overlay settings that control how the combo's list of items is displayed.\n * Set:\n * ```html\n * \n * ```\n *\n * ```typescript\n * const customSettings = { positionStrategy: { settings: { target: myTarget } } };\n * combo.overlaySettings = customSettings;\n * ```\n * Get any custom overlay settings used by the combo:\n * ```typescript\n * const comboOverlaySettings: OverlaySettings = myCombo.overlaySettings;\n * ```\n */\n this.overlaySettings = null;\n /**\n * Gets/gets combo id.\n *\n * ```typescript\n * // get\n * let id = this.combo.id;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.id = `igx-combo-${NEXT_ID$e++}`;\n /**\n * Controls whether custom values can be added to the collection\n *\n * ```typescript\n * // get\n * let comboAllowsCustomValues = this.combo.allowCustomValues;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.allowCustomValues = false;\n /**\n * Determines which column in the data source is used to determine the value.\n *\n * ```typescript\n * // get\n * let myComboValueKey = this.combo.valueKey;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.valueKey = null;\n /** @hidden @internal */\n this.cssClass = 'igx-combo'; // Independent of display density for the time being\n /**\n * An @Input property that enabled/disables combo. The default is `false`.\n * ```html\n * \n * ```\n */\n this.disabled = false;\n /**\n * Emitted before the dropdown is opened\n *\n * ```html\n * \n * ```\n */\n this.opening = new EventEmitter();\n /**\n * Emitted after the dropdown is opened\n *\n * ```html\n * \n * ```\n */\n this.opened = new EventEmitter();\n /**\n * Emitted before the dropdown is closed\n *\n * ```html\n * \n * ```\n */\n this.closing = new EventEmitter();\n /**\n * Emitted after the dropdown is closed\n *\n * ```html\n * \n * ```\n */\n this.closed = new EventEmitter();\n /**\n * Emitted when an item is being added to the data collection\n *\n * ```html\n * \n * ```\n */\n this.addition = new EventEmitter();\n /**\n * Emitted when the value of the search input changes (e.g. typing, pasting, clear, etc.)\n *\n * ```html\n * \n * ```\n */\n this.searchInputUpdate = new EventEmitter();\n /**\n * Emitted when new chunk of data is loaded from the virtualization\n *\n * ```html\n * \n * ```\n */\n this.dataPreLoad = new EventEmitter();\n /**\n * The custom template, if any, that should be used when rendering ITEMS in the combo list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.combo.itemTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n *
    \n *
    {{ item[key] }}
    \n *
    {{ item.cost }}
    \n *
    \n *
    \n *
    \n * ```\n */\n this.itemTemplate = null;\n /**\n * The custom template, if any, that should be used when rendering the HEADER for the combo items list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.combo.headerTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n *
    \n * This is a custom header\n *
    \n *
    \n *
    \n * ```\n */\n this.headerTemplate = null;\n /**\n * The custom template, if any, that should be used when rendering the FOOTER for the combo items list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.combo.footerTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n *
    \n * This is a custom footer\n *
    \n *
    \n *
    \n * ```\n */\n this.footerTemplate = null;\n /**\n * The custom template, if any, that should be used when rendering HEADER ITEMS for groups in the combo list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.combo.headerItemTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n *
    Group header for {{ item[key] }}
    \n *
    \n *
    \n * ```\n */\n this.headerItemTemplate = null;\n /**\n * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.combo.addItemTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n * \n * \n * \n * ```\n */\n this.addItemTemplate = null;\n /**\n * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.combo.emptyTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n *
    \n * There are no items to display\n *
    \n *
    \n *
    \n * ```\n */\n this.emptyTemplate = null;\n /**\n * The custom template, if any, that should be used when rendering the combo TOGGLE(open/close) button\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.combo.toggleIconTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n * {{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}\n * \n * \n * ```\n */\n this.toggleIconTemplate = null;\n /**\n * The custom template, if any, that should be used when rendering the combo CLEAR button\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.combo.clearIconTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n * clear\n * \n * \n * ```\n */\n this.clearIconTemplate = null;\n /** @hidden @internal */\n this.searchInput = null;\n this.dropdownContainer = null;\n /** @hidden @internal */\n this.customValueFlag = true;\n /** @hidden @internal */\n this.filterValue = '';\n /** @hidden @internal */\n this.defaultFallbackGroup = 'Other';\n /** @hidden @internal */\n this.activeDescendant = '';\n this._data = [];\n this._value = '';\n this._groupKey = '';\n this._searchValue = '';\n this._filteredData = [];\n this._remoteSelection = {};\n this._valid = IgxComboState.INITIAL;\n this.ngControl = null;\n this.destroy$ = new Subject();\n this._onTouchedCallback = noop;\n this._onChangeCallback = noop;\n this._type = null;\n this._dataType = '';\n this._itemHeight = null;\n this._itemsMaxHeight = null;\n this._groupSortingDirection = SortingDirection.Asc;\n this._defaultFilteringOptions = { caseSensitive: false, filterable: true };\n this.onStatusChanged = () => {\n if ((this.ngControl.control.touched || this.ngControl.control.dirty) &&\n (this.ngControl.control.validator || this.ngControl.control.asyncValidator)) {\n if (!this.collapsed || this.inputGroup.isFocused) {\n this.valid = this.ngControl.invalid ? IgxComboState.INVALID : IgxComboState.VALID;\n }\n else {\n this.valid = this.ngControl.invalid ? IgxComboState.INVALID : IgxComboState.INITIAL;\n }\n }\n else {\n // B.P. 18 May 2021: IgxDatePicker does not reset its state upon resetForm #9526\n this.valid = IgxComboState.INITIAL;\n }\n this.manageRequiredAsterisk();\n };\n this.findMatch = (element) => {\n var _a;\n const value = this.displayKey ? element[this.displayKey] : element;\n const searchValue = this.searchValue || ((_a = this.comboInput) === null || _a === void 0 ? void 0 : _a.value);\n return (value === null || value === void 0 ? void 0 : value.toString().trim().toLowerCase()) === searchValue.trim().toLowerCase();\n };\n }\n ngAfterViewChecked() {\n const targetElement = this.inputGroup.element.nativeElement.querySelector('.igx-input-group__bundle');\n this._overlaySettings = {\n target: targetElement,\n scrollStrategy: new AbsoluteScrollStrategy(),\n positionStrategy: new AutoPositionStrategy(),\n modal: false,\n closeOnOutsideClick: true,\n excludeFromOutsideClick: [targetElement]\n };\n }\n /** @hidden @internal */\n ngAfterContentChecked() {\n var _a, _b;\n if (this.inputGroup && ((_a = this.prefixes) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n this.inputGroup.prefixes = this.prefixes;\n }\n if (this.inputGroup && ((_b = this.suffixes) === null || _b === void 0 ? void 0 : _b.length) > 0) {\n this.inputGroup.suffixes = this.suffixes;\n }\n }\n /** @hidden @internal */\n ngOnInit() {\n super.ngOnInit();\n this.ngControl = this._injector.get(NgControl, null);\n this.selectionService.set(this.id, new Set());\n this._iconService.addSvgIconFromText(caseSensitive.name, caseSensitive.value, 'imx-icons');\n }\n /** @hidden @internal */\n ngAfterViewInit() {\n this.filteredData = [...this.data];\n if (this.ngControl) {\n this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged);\n this.manageRequiredAsterisk();\n this.cdr.detectChanges();\n }\n this.virtDir.chunkPreload.pipe(takeUntil(this.destroy$)).subscribe((e) => {\n const eventArgs = Object.assign({}, e, { owner: this });\n this.dataPreLoad.emit(eventArgs);\n });\n }\n /** @hidden @internal */\n ngDoCheck() {\n var _a;\n if (((_a = this.data) === null || _a === void 0 ? void 0 : _a.length) && this.selection.length && !this._value) {\n this._value = this.createDisplayText(this.selection, []);\n }\n super.ngDoCheck();\n }\n /** @hidden @internal */\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n this.comboAPI.clear();\n this.selectionService.clear(this.id);\n }\n /**\n * A method that opens/closes the combo.\n *\n * ```html\n * \n * \n * ```\n */\n toggle() {\n if (this.collapsed && this._value.length !== 0) {\n this.filterValue = '';\n this.cdr.detectChanges();\n }\n const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);\n this.dropdown.toggle(overlaySettings);\n if (!this.collapsed) {\n this.setActiveDescendant();\n }\n }\n /**\n * A method that opens the combo.\n *\n * ```html\n * \n * \n * ```\n */\n open() {\n if (this.collapsed && this._value.length !== 0) {\n this.filterValue = '';\n this.cdr.detectChanges();\n }\n const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);\n this.dropdown.open(overlaySettings);\n this.setActiveDescendant();\n }\n /**\n * A method that closes the combo.\n *\n * ```html\n * \n * \n * ```\n */\n close() {\n this.dropdown.close();\n }\n /**\n * Triggers change detection on the combo view\n */\n triggerCheck() {\n this.cdr.detectChanges();\n }\n /**\n * Get current selection state\n *\n * @returns Array of selected items\n * ```typescript\n * let mySelection = this.combo.selection;\n * ```\n */\n get selection() {\n const items = Array.from(this.selectionService.get(this.id));\n return items;\n }\n /**\n * Returns if the specified itemID is selected\n *\n * @hidden\n * @internal\n */\n isItemSelected(item) {\n return this.selectionService.is_item_selected(this.id, item);\n }\n /** @hidden @internal */\n get toggleIcon() {\n if (this.inputGroup.theme === 'material') {\n return this.dropdown.collapsed\n ? 'expand_more'\n : 'expand_less';\n }\n return this.dropdown.collapsed\n ? 'arrow_drop_down'\n : 'arrow_drop_up';\n }\n /** @hidden @internal */\n get clearIcon() {\n return this.inputGroup.theme === 'material'\n ? 'cancel'\n : 'clear';\n }\n /** @hidden @internal */\n addItemToCollection() {\n var _a;\n if (!this.searchValue) {\n return;\n }\n const addedItem = this.displayKey ? {\n [this.valueKey]: this.searchValue,\n [this.displayKey]: this.searchValue\n } : this.searchValue;\n if (this.groupKey) {\n Object.assign(addedItem, { [this.groupKey]: this.defaultFallbackGroup });\n }\n // expose shallow copy instead of this.data in event args so this.data can't be mutated\n const oldCollection = [...this.data];\n const newCollection = [...this.data, addedItem];\n const args = {\n oldCollection, addedItem, newCollection, owner: this, cancel: false\n };\n this.addition.emit(args);\n if (args.cancel) {\n return;\n }\n this.data.push(args.addedItem);\n // trigger re-render\n this.data = cloneArray(this.data);\n this.select(this.valueKey !== null && this.valueKey !== undefined ?\n [args.addedItem[this.valueKey]] : [args.addedItem], false);\n this.customValueFlag = false;\n (_a = this.searchInput) === null || _a === void 0 ? void 0 : _a.nativeElement.focus();\n this.dropdown.focusedItem = null;\n this.virtDir.scrollTo(0);\n }\n /** @hidden @internal */\n isAddButtonVisible() {\n // This should always return a boolean value. If this.searchValue was '', it returns '' instead of false;\n return this.searchValue !== '' && this.customValueFlag;\n }\n /** @hidden @internal */\n handleInputChange(event) {\n if (event !== undefined) {\n const args = {\n searchText: typeof event === 'string' ? event : event.target.value,\n owner: this,\n cancel: false\n };\n this.searchInputUpdate.emit(args);\n if (args.cancel) {\n this.filterValue = null;\n }\n }\n this.checkMatch();\n }\n /**\n * Event handlers\n *\n * @hidden\n * @internal\n */\n handleOpening(e) {\n const args = { owner: this, event: e.event, cancel: e.cancel };\n this.opening.emit(args);\n e.cancel = args.cancel;\n }\n /** @hidden @internal */\n handleClosing(e) {\n var _a;\n const args = { owner: this, event: e.event, cancel: e.cancel };\n this.closing.emit(args);\n e.cancel = args.cancel;\n if (e.cancel) {\n return;\n }\n this.searchValue = '';\n if (!e.event) {\n (_a = this.comboInput) === null || _a === void 0 ? void 0 : _a.nativeElement.focus();\n }\n }\n /** @hidden @internal */\n handleClosed() {\n this.closed.emit({ owner: this });\n }\n /** @hidden @internal */\n handleKeyDown(event) {\n if (event.key === 'ArrowUp' || event.key === 'Up') {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n }\n }\n /** @hidden @internal */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /** @hidden @internal */\n registerOnTouched(fn) {\n this._onTouchedCallback = fn;\n }\n /** @hidden @internal */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /** @hidden @internal */\n onClick(event) {\n event.stopPropagation();\n event.preventDefault();\n if (!this.disabled) {\n this.toggle();\n }\n }\n /** @hidden @internal */\n onBlur() {\n if (this.collapsed) {\n this._onTouchedCallback();\n if (this.ngControl && this.ngControl.invalid) {\n this.valid = IgxComboState.INVALID;\n }\n else {\n this.valid = IgxComboState.INITIAL;\n }\n }\n }\n /** @hidden @internal */\n setActiveDescendant() {\n var _a;\n this.activeDescendant = ((_a = this.dropdown.focusedItem) === null || _a === void 0 ? void 0 : _a.id) || '';\n }\n /** @hidden @internal */\n toggleCaseSensitive() {\n this.filteringOptions = Object.assign({}, this.filteringOptions, { caseSensitive: !this.filteringOptions.caseSensitive });\n }\n /** if there is a valueKey - map the keys to data items, else - just return the keys */\n convertKeysToItems(keys) {\n if (this.comboAPI.valueKey === null) {\n return keys;\n }\n // map keys vs. filter data to retain the order of the selected items\n return keys.map(key => isNaNvalue(key)\n ? this.data.find(entry => isNaNvalue(entry[this.valueKey]))\n : this.data.find(entry => entry[this.valueKey] === key))\n .filter(e => e !== undefined);\n }\n checkMatch() {\n const itemMatch = this.filteredData.some(this.findMatch);\n this.customValueFlag = this.allowCustomValues && !itemMatch;\n }\n manageRequiredAsterisk() {\n if (this.ngControl) {\n if (this.ngControl.control.validator) {\n // Run the validation with empty object to check if required is enabled.\n const error = this.ngControl.control.validator({});\n this.inputGroup.isRequired = error && error.required;\n }\n else {\n // P.M. 18 May 2022: IgxCombo's asterisk not removed when removing required validator dynamically in reactive form #11543\n this.inputGroup.isRequired = false;\n }\n }\n }\n /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */\n registerRemoteEntries(ids, add = true) {\n if (add) {\n const selection = this.getValueDisplayPairs(ids);\n for (const entry of selection) {\n this._remoteSelection[entry[this.valueKey]] = entry[this.displayKey];\n }\n }\n else {\n for (const entry of ids) {\n delete this._remoteSelection[entry];\n }\n }\n }\n /**\n * For `id: any[]` returns a mapped `{ [combo.valueKey]: any, [combo.displayKey]: any }[]`\n */\n getValueDisplayPairs(ids) {\n return this.data.filter(entry => ids.indexOf(entry[this.valueKey]) > -1).map(e => ({\n [this.valueKey]: e[this.valueKey],\n [this.displayKey]: e[this.displayKey]\n }));\n }\n getRemoteSelection(newSelection, oldSelection) {\n if (!newSelection.length) {\n // If new selection is empty, clear all items\n this.registerRemoteEntries(oldSelection, false);\n return '';\n }\n const removedItems = oldSelection.filter(e => newSelection.indexOf(e) < 0);\n const addedItems = newSelection.filter(e => oldSelection.indexOf(e) < 0);\n this.registerRemoteEntries(addedItems);\n this.registerRemoteEntries(removedItems, false);\n return Object.keys(this._remoteSelection).map(e => this._remoteSelection[e]).join(', ');\n }\n get required() {\n if (this.ngControl && this.ngControl.control && this.ngControl.control.validator) {\n // Run the validation with empty object to check if required is enabled.\n const error = this.ngControl.control.validator({});\n return error && error.required;\n }\n return false;\n }\n}\nIgxComboBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboBaseDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxSelectionAPIService }, { token: IgxComboAPIService }, { token: IgxIconService }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }, { token: i0.Injector, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nIgxComboBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboBaseDirective, inputs: { showSearchCaseIcon: \"showSearchCaseIcon\", overlaySettings: \"overlaySettings\", id: \"id\", width: \"width\", allowCustomValues: \"allowCustomValues\", itemsMaxHeight: \"itemsMaxHeight\", itemHeight: \"itemHeight\", itemsWidth: \"itemsWidth\", placeholder: \"placeholder\", data: \"data\", valueKey: \"valueKey\", displayKey: \"displayKey\", groupKey: \"groupKey\", groupSortingDirection: \"groupSortingDirection\", filterFunction: \"filterFunction\", ariaLabelledBy: \"ariaLabelledBy\", disabled: \"disabled\", type: \"type\", resourceStrings: \"resourceStrings\", filteringOptions: \"filteringOptions\" }, outputs: { opening: \"opening\", opened: \"opened\", closing: \"closing\", closed: \"closed\", addition: \"addition\", searchInputUpdate: \"searchInputUpdate\", dataPreLoad: \"dataPreLoad\" }, host: { properties: { \"attr.id\": \"this.id\", \"style.width\": \"this.width\", \"class.igx-combo\": \"this.cssClass\" } }, queries: [{ propertyName: \"itemTemplate\", first: true, predicate: IgxComboItemDirective, descendants: true, read: TemplateRef }, { propertyName: \"headerTemplate\", first: true, predicate: IgxComboHeaderDirective, descendants: true, read: TemplateRef }, { propertyName: \"footerTemplate\", first: true, predicate: IgxComboFooterDirective, descendants: true, read: TemplateRef }, { propertyName: \"headerItemTemplate\", first: true, predicate: IgxComboHeaderItemDirective, descendants: true, read: TemplateRef }, { propertyName: \"addItemTemplate\", first: true, predicate: IgxComboAddItemDirective, descendants: true, read: TemplateRef }, { propertyName: \"emptyTemplate\", first: true, predicate: IgxComboEmptyDirective, descendants: true, read: TemplateRef }, { propertyName: \"toggleIconTemplate\", first: true, predicate: IgxComboToggleIconDirective, descendants: true, read: TemplateRef }, { propertyName: \"clearIconTemplate\", first: true, predicate: IgxComboClearIconDirective, descendants: true, read: TemplateRef }, { propertyName: \"label\", first: true, predicate: i0.forwardRef(function () { return IgxLabelDirective; }), descendants: true, static: true }, { propertyName: \"prefixes\", predicate: IgxPrefixDirective, descendants: true }, { propertyName: \"suffixes\", predicate: IgxSuffixDirective, descendants: true }], viewQueries: [{ propertyName: \"inputGroup\", first: true, predicate: [\"inputGroup\"], descendants: true, read: IgxInputGroupComponent, static: true }, { propertyName: \"comboInput\", first: true, predicate: [\"comboInput\"], descendants: true, read: IgxInputDirective, static: true }, { propertyName: \"searchInput\", first: true, predicate: [\"searchInput\"], descendants: true }, { propertyName: \"virtualScrollContainer\", first: true, predicate: IgxForOfDirective, descendants: true, static: true }, { propertyName: \"virtDir\", first: true, predicate: IgxForOfDirective, descendants: true, read: IgxForOfDirective, static: true }, { propertyName: \"dropdownContainer\", first: true, predicate: [\"dropdownItemContainer\"], descendants: true, static: true }, { propertyName: \"primitiveTemplate\", first: true, predicate: [\"primitive\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"complexTemplate\", first: true, predicate: [\"complex\"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboBaseDirective, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: IgxComboAPIService }, { type: IgxIconService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IGX_INPUT_GROUP_TYPE]\n }] }, { type: i0.Injector, decorators: [{\n type: Optional\n }] }];\n }, propDecorators: { showSearchCaseIcon: [{\n type: Input\n }], overlaySettings: [{\n type: Input\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], width: [{\n type: HostBinding,\n args: ['style.width']\n }, {\n type: Input\n }], allowCustomValues: [{\n type: Input\n }], itemsMaxHeight: [{\n type: Input\n }], itemHeight: [{\n type: Input\n }], itemsWidth: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], data: [{\n type: Input\n }], valueKey: [{\n type: Input\n }], displayKey: [{\n type: Input\n }], groupKey: [{\n type: Input\n }], groupSortingDirection: [{\n type: Input\n }], filterFunction: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-combo']\n }], disabled: [{\n type: Input\n }], type: [{\n type: Input\n }], resourceStrings: [{\n type: Input\n }], opening: [{\n type: Output\n }], opened: [{\n type: Output\n }], closing: [{\n type: Output\n }], closed: [{\n type: Output\n }], addition: [{\n type: Output\n }], searchInputUpdate: [{\n type: Output\n }], dataPreLoad: [{\n type: Output\n }], itemTemplate: [{\n type: ContentChild,\n args: [IgxComboItemDirective, { read: TemplateRef }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [IgxComboHeaderDirective, { read: TemplateRef }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [IgxComboFooterDirective, { read: TemplateRef }]\n }], headerItemTemplate: [{\n type: ContentChild,\n args: [IgxComboHeaderItemDirective, { read: TemplateRef }]\n }], addItemTemplate: [{\n type: ContentChild,\n args: [IgxComboAddItemDirective, { read: TemplateRef }]\n }], emptyTemplate: [{\n type: ContentChild,\n args: [IgxComboEmptyDirective, { read: TemplateRef }]\n }], toggleIconTemplate: [{\n type: ContentChild,\n args: [IgxComboToggleIconDirective, { read: TemplateRef }]\n }], clearIconTemplate: [{\n type: ContentChild,\n args: [IgxComboClearIconDirective, { read: TemplateRef }]\n }], label: [{\n type: ContentChild,\n args: [forwardRef(() => IgxLabelDirective), { static: true }]\n }], inputGroup: [{\n type: ViewChild,\n args: ['inputGroup', { read: IgxInputGroupComponent, static: true }]\n }], comboInput: [{\n type: ViewChild,\n args: ['comboInput', { read: IgxInputDirective, static: true }]\n }], searchInput: [{\n type: ViewChild,\n args: ['searchInput']\n }], virtualScrollContainer: [{\n type: ViewChild,\n args: [IgxForOfDirective, { static: true }]\n }], virtDir: [{\n type: ViewChild,\n args: [IgxForOfDirective, { read: IgxForOfDirective, static: true }]\n }], dropdownContainer: [{\n type: ViewChild,\n args: ['dropdownItemContainer', { static: true }]\n }], primitiveTemplate: [{\n type: ViewChild,\n args: ['primitive', { read: TemplateRef, static: true }]\n }], complexTemplate: [{\n type: ViewChild,\n args: ['complex', { read: TemplateRef, static: true }]\n }], prefixes: [{\n type: ContentChildren,\n args: [IgxPrefixDirective, { descendants: true }]\n }], suffixes: [{\n type: ContentChildren,\n args: [IgxSuffixDirective, { descendants: true }]\n }], filteringOptions: [{\n type: Input\n }] } });\n\n/** @hidden */\nclass IgxComboDropDownComponent extends IgxDropDownComponent {\n /** @hidden @internal */\n get scrollContainer() {\n return this.virtDir.dc.location.nativeElement;\n }\n get isScrolledToLast() {\n const scrollTop = this.virtDir.scrollPosition;\n const scrollHeight = this.virtDir.getScroll().scrollHeight;\n return Math.floor(scrollTop + this.virtDir.igxForContainerSize) === scrollHeight;\n }\n get lastVisibleIndex() {\n return this.combo.totalItemCount ?\n Math.floor(this.combo.itemsMaxHeight / this.combo.itemHeight) :\n this.items.length - 1;\n }\n get sortedChildren() {\n if (this.children !== undefined) {\n return this.children.toArray()\n .sort((a, b) => a.index - b.index);\n }\n return null;\n }\n /**\n * Get all non-header items\n *\n * ```typescript\n * let myDropDownItems = this.dropdown.items;\n * ```\n */\n get items() {\n const items = [];\n if (this.children !== undefined) {\n const sortedChildren = this.sortedChildren;\n for (const child of sortedChildren) {\n if (!child.isHeader) {\n items.push(child);\n }\n }\n }\n return items;\n }\n constructor(elementRef, cdr, selection, combo, comboAPI, _displayDensityOptions) {\n super(elementRef, cdr, selection, _displayDensityOptions);\n this.combo = combo;\n this.comboAPI = comboAPI;\n /** @hidden @internal */\n this.singleMode = false;\n /**\n * @hidden\n * @internal\n */\n this.children = null;\n this.scrollHandler = () => {\n this.comboAPI.disableTransitions = true;\n };\n }\n /**\n * @hidden @internal\n */\n onFocus() {\n this.focusedItem = this._focusedItem || this.items[0];\n this.combo.setActiveDescendant();\n }\n /**\n * @hidden @internal\n */\n onBlur(_evt) {\n this.focusedItem = null;\n this.combo.setActiveDescendant();\n }\n /**\n * @hidden @internal\n */\n onToggleOpened() {\n this.opened.emit();\n }\n /**\n * @hidden\n */\n navigateFirst() {\n this.navigateItem(this.virtDir.igxForOf.findIndex(e => !(e === null || e === void 0 ? void 0 : e.isHeader)));\n this.combo.setActiveDescendant();\n }\n /**\n * @hidden\n */\n navigatePrev() {\n if (this._focusedItem && this._focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {\n this.combo.focusSearchInput(false);\n }\n else {\n super.navigatePrev();\n }\n this.combo.setActiveDescendant();\n }\n /**\n * @hidden\n */\n navigateNext() {\n const lastIndex = this.combo.totalItemCount ? this.combo.totalItemCount - 1 : this.virtDir.igxForOf.length - 1;\n if (this._focusedItem && this._focusedItem.index === lastIndex) {\n this.focusAddItemButton();\n }\n else {\n super.navigateNext();\n }\n this.combo.setActiveDescendant();\n }\n /**\n * @hidden @internal\n */\n selectItem(item) {\n if (item === null || item === undefined) {\n return;\n }\n this.comboAPI.set_selected_item(item.itemID);\n this._focusedItem = item;\n this.combo.setActiveDescendant();\n }\n /**\n * @hidden @internal\n */\n updateScrollPosition() {\n this.virtDir.getScroll().scrollTop = this._scrollPosition;\n }\n /**\n * @hidden @internal\n */\n onItemActionKey(key) {\n switch (key) {\n case DropDownActionKey.ENTER:\n this.handleEnter();\n break;\n case DropDownActionKey.SPACE:\n this.handleSpace();\n break;\n case DropDownActionKey.ESCAPE:\n this.close();\n }\n }\n ngAfterViewInit() {\n this.virtDir.getScroll().addEventListener('scroll', this.scrollHandler);\n }\n /**\n * @hidden @internal\n */\n ngOnDestroy() {\n this.virtDir.getScroll().removeEventListener('scroll', this.scrollHandler);\n super.ngOnDestroy();\n }\n scrollToHiddenItem(_newItem) { }\n handleEnter() {\n if (this.isAddItemFocused()) {\n this.combo.addItemToCollection();\n return;\n }\n if (this.singleMode && this.focusedItem) {\n this.combo.select(this.focusedItem.itemID);\n }\n this.close();\n }\n handleSpace() {\n if (this.isAddItemFocused()) {\n return;\n }\n else {\n this.selectItem(this.focusedItem);\n }\n }\n isAddItemFocused() {\n return this.focusedItem instanceof IgxComboAddItemComponent;\n }\n focusAddItemButton() {\n if (this.combo.isAddButtonVisible()) {\n this.focusedItem = this.items[this.items.length - 1];\n }\n }\n}\nIgxComboDropDownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboDropDownComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxSelectionAPIService }, { token: IGX_COMBO_COMPONENT }, { token: IgxComboAPIService }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxComboDropDownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboDropDownComponent, selector: \"igx-combo-drop-down\", inputs: { singleMode: \"singleMode\" }, providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }], queries: [{ propertyName: \"children\", predicate: IgxComboItemComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: \"
    \\n
    \\n \\n \\n \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxToggleDirective, selector: \"[igxToggle]\", inputs: [\"id\"], outputs: [\"opened\", \"opening\", \"closed\", \"closing\", \"appended\"], exportAs: [\"toggle\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboDropDownComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-combo-drop-down', providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }], template: \"
    \\n
    \\n \\n \\n \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: undefined, decorators: [{\n type: Inject,\n args: [IGX_COMBO_COMPONENT]\n }] }, { type: IgxComboAPIService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }];\n }, propDecorators: { singleMode: [{\n type: Input\n }], children: [{\n type: ContentChildren,\n args: [IgxComboItemComponent, { descendants: true }]\n }] } });\n\n/** @hidden */\nclass IgxComboFilteringPipe {\n transform(collection, searchValue, displayKey, filteringOptions, filterFunction = defaultFilterFunction) {\n var _a;\n if (!collection) {\n return [];\n }\n if (!filteringOptions.filterable) {\n return collection;\n }\n filteringOptions.filteringKey = (_a = filteringOptions.filteringKey) !== null && _a !== void 0 ? _a : displayKey;\n return filterFunction(collection, searchValue, filteringOptions);\n }\n}\nIgxComboFilteringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboFilteringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxComboFilteringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboFilteringPipe, name: \"comboFiltering\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboFilteringPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'comboFiltering' }]\n }] });\n/** @hidden */\nclass IgxComboGroupingPipe {\n constructor(combo) {\n this.combo = combo;\n }\n transform(collection, groupKey, valueKey, sortingDirection) {\n // TODO: should filteredData be changed here?\n this.combo.filteredData = collection;\n if ((!groupKey && groupKey !== 0) || !collection.length) {\n return collection;\n }\n const sorted = DataUtil.sort(cloneArray(collection), [{\n fieldName: groupKey,\n dir: sortingDirection,\n ignoreCase: true,\n strategy: DefaultSortingStrategy.instance()\n }]);\n const data = cloneArray(sorted);\n let inserts = 0;\n let currentHeader = null;\n for (let i = 0; i < sorted.length; i++) {\n let insertFlag = 0;\n if (currentHeader !== sorted[i][groupKey]) {\n currentHeader = sorted[i][groupKey];\n insertFlag = 1;\n }\n if (insertFlag) {\n data.splice(i + inserts, 0, {\n [valueKey]: currentHeader,\n [groupKey]: currentHeader,\n isHeader: true\n });\n inserts++;\n }\n }\n return data;\n }\n}\nIgxComboGroupingPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboGroupingPipe, deps: [{ token: IGX_COMBO_COMPONENT }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxComboGroupingPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboGroupingPipe, name: \"comboGrouping\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboGroupingPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'comboGrouping' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_COMBO_COMPONENT]\n }] }];\n } });\nfunction defaultFilterFunction(collection, searchValue, filteringOptions) {\n if (!searchValue) {\n return collection;\n }\n const searchTerm = filteringOptions.caseSensitive ? searchValue : searchValue.toLowerCase();\n if (filteringOptions.filteringKey != null) {\n return collection.filter(e => {\n var _a, _b;\n return filteringOptions.caseSensitive ?\n (_a = e[filteringOptions.filteringKey]) === null || _a === void 0 ? void 0 : _a.includes(searchTerm) :\n (_b = e[filteringOptions.filteringKey]) === null || _b === void 0 ? void 0 : _b.toString().toLowerCase().includes(searchTerm);\n });\n }\n else {\n return collection.filter(e => filteringOptions.caseSensitive ?\n e === null || e === void 0 ? void 0 : e.includes(searchTerm) :\n e === null || e === void 0 ? void 0 : e.toString().toLowerCase().includes(searchTerm));\n }\n}\n\n/**\n * When called with sets A & B, returns A - B (as array);\n *\n * @hidden\n */\nconst diffInSets = (set1, set2) => {\n const results = [];\n set1.forEach(entry => {\n if (!set2.has(entry)) {\n results.push(entry);\n }\n });\n return results;\n};\n/**\n * Represents a drop-down list that provides editable functionalities, allowing users to choose an option from a predefined list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @remarks\n * It provides the ability to filter items as well as perform selection with the provided data.\n * Additionally, it exposes keyboard navigation and custom styling capabilities.\n * @example\n * ```html\n * \n * \n * ```\n */\nclass IgxComboComponent extends IgxComboBaseDirective {\n /**\n * @deprecated in version 14.0.0. Use the IComboFilteringOptions.filterable\n *\n * An @Input property that enabled/disables filtering in the list. The default is `true`.\n * ```html\n * \n * ```\n */\n get filterable() {\n return this.filteringOptions.filterable;\n }\n set filterable(value) {\n this.filteringOptions = Object.assign({}, this.filteringOptions, { filterable: value });\n }\n /**\n * @hidden @internal\n */\n get inputEmpty() {\n return !this.value && !this.placeholder;\n }\n /** @hidden @internal */\n get filteredData() {\n return this.filteringOptions.filterable ? this._filteredData : this.data;\n }\n /** @hidden @internal */\n set filteredData(val) {\n this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;\n this.checkMatch();\n }\n constructor(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector) {\n super(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector);\n /**\n * An @Input property that controls whether the combo's search box\n * should be focused after the `opened` event is called\n * When `false`, the combo's list item container will be focused instead\n */\n this.autoFocusSearch = true;\n /**\n * Defines the placeholder value for the combo dropdown search field\n *\n * ```typescript\n * // get\n * let myComboSearchPlaceholder = this.combo.searchPlaceholder;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.searchPlaceholder = 'Enter a Search Term';\n /**\n * Emitted when item selection is changing, before the selection completes\n *\n * ```html\n * \n * ```\n */\n this.selectionChanging = new EventEmitter();\n /**\n * @hidden @internal\n */\n this.filteringLogic = FilteringLogic.Or;\n this.stringFilters = IgxStringFilteringOperand;\n this.booleanFilters = IgxBooleanFilteringOperand;\n this._prevInputValue = '';\n this.comboAPI.register(this);\n }\n onArrowDown(event) {\n event.preventDefault();\n event.stopPropagation();\n this.open();\n }\n /** @hidden @internal */\n get displaySearchInput() {\n return this.filteringOptions.filterable || this.allowCustomValues;\n }\n /**\n * @hidden @internal\n */\n handleKeyUp(event) {\n // TODO: use PlatformUtil for keyboard navigation\n if (event.key === 'ArrowDown' || event.key === 'Down') {\n this.dropdown.focusedItem = this.dropdown.items[0];\n this.dropdownContainer.nativeElement.focus();\n }\n else if (event.key === 'Escape' || event.key === 'Esc') {\n this.toggle();\n }\n }\n /**\n * @hidden @internal\n */\n handleSelectAll(evt) {\n if (evt.checked) {\n this.selectAllItems();\n }\n else {\n this.deselectAllItems();\n }\n }\n /**\n * @hidden @internal\n */\n writeValue(value) {\n const selection = Array.isArray(value) ? value.filter(x => x !== undefined) : [];\n const oldSelection = this.selection;\n this.selectionService.select_items(this.id, selection, true);\n this.cdr.markForCheck();\n this._value = this.createDisplayText(this.selection, oldSelection);\n }\n /**\n * @hidden\n */\n getEditElement() {\n return this.comboInput.nativeElement;\n }\n /**\n * @hidden @internal\n */\n get context() {\n return {\n $implicit: this\n };\n }\n /**\n * @hidden @internal\n */\n handleClearItems(event) {\n if (this.disabled) {\n return;\n }\n this.deselectAllItems(true, event);\n if (this.collapsed) {\n this.getEditElement().focus();\n }\n else {\n this.focusSearchInput(true);\n }\n event.stopPropagation();\n }\n /**\n * Select defined items\n *\n * @param newItems new items to be selected\n * @param clearCurrentSelection if true clear previous selected items\n * ```typescript\n * this.combo.select([\"New York\", \"New Jersey\"]);\n * ```\n */\n select(newItems, clearCurrentSelection, event) {\n if (newItems) {\n const newSelection = this.selectionService.add_items(this.id, newItems, clearCurrentSelection);\n this.setSelection(newSelection, event);\n }\n }\n /**\n * Deselect defined items\n *\n * @param items items to deselected\n * ```typescript\n * this.combo.deselect([\"New York\", \"New Jersey\"]);\n * ```\n */\n deselect(items, event) {\n if (items) {\n const newSelection = this.selectionService.delete_items(this.id, items);\n this.setSelection(newSelection, event);\n }\n }\n /**\n * Select all (filtered) items\n *\n * @param ignoreFilter if set to true, selects all items, otherwise selects only the filtered ones.\n * ```typescript\n * this.combo.selectAllItems();\n * ```\n */\n selectAllItems(ignoreFilter, event) {\n const allVisible = this.selectionService.get_all_ids(ignoreFilter ? this.data : this.filteredData, this.valueKey);\n const newSelection = this.selectionService.add_items(this.id, allVisible);\n this.setSelection(newSelection, event);\n }\n /**\n * Deselect all (filtered) items\n *\n * @param ignoreFilter if set to true, deselects all items, otherwise deselects only the filtered ones.\n * ```typescript\n * this.combo.deselectAllItems();\n * ```\n */\n deselectAllItems(ignoreFilter, event) {\n let newSelection = this.selectionService.get_empty();\n if (this.filteredData.length !== this.data.length && !ignoreFilter) {\n newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));\n }\n this.setSelection(newSelection, event);\n }\n /**\n * Selects/Deselects a single item\n *\n * @param itemID the itemID of the specific item\n * @param select If the item should be selected (true) or deselected (false)\n *\n * Without specified valueKey;\n * ```typescript\n * this.combo.valueKey = null;\n * const items: { field: string, region: string}[] = data;\n * this.combo.setSelectedItem(items[0], true);\n * ```\n * With specified valueKey;\n * ```typescript\n * this.combo.valueKey = 'field';\n * const items: { field: string, region: string}[] = data;\n * this.combo.setSelectedItem('Connecticut', true);\n * ```\n */\n setSelectedItem(itemID, select = true, event) {\n if (itemID === undefined) {\n return;\n }\n if (select) {\n this.select([itemID], false, event);\n }\n else {\n this.deselect([itemID], event);\n }\n }\n /** @hidden @internal */\n handleOpened() {\n this.triggerCheck();\n // Disabling focus of the search input should happen only when drop down opens.\n // During keyboard navigation input should receive focus, even the autoFocusSearch is disabled.\n // That is why in such cases focusing of the dropdownContainer happens outside focusSearchInput method.\n if (this.autoFocusSearch) {\n this.focusSearchInput(true);\n }\n else {\n this.dropdownContainer.nativeElement.focus();\n }\n this.opened.emit({ owner: this });\n }\n /** @hidden @internal */\n focusSearchInput(opening) {\n if (this.displaySearchInput && this.searchInput) {\n this.searchInput.nativeElement.focus();\n }\n else {\n if (opening) {\n this.dropdownContainer.nativeElement.focus();\n }\n else {\n this.comboInput.nativeElement.focus();\n this.toggle();\n }\n }\n }\n setSelection(newSelection, event) {\n const removed = diffInSets(this.selectionService.get(this.id), newSelection);\n const added = diffInSets(newSelection, this.selectionService.get(this.id));\n const newSelectionAsArray = Array.from(newSelection);\n const oldSelectionAsArray = Array.from(this.selectionService.get(this.id) || []);\n const displayText = this.createDisplayText(newSelectionAsArray, oldSelectionAsArray);\n const args = {\n newSelection: newSelectionAsArray,\n oldSelection: oldSelectionAsArray,\n added,\n removed,\n event,\n owner: this,\n displayText,\n cancel: false\n };\n this.selectionChanging.emit(args);\n if (!args.cancel) {\n this.selectionService.select_items(this.id, args.newSelection, true);\n if (displayText !== args.displayText) {\n this._value = args.displayText;\n }\n else {\n this._value = this.createDisplayText(args.newSelection, args.oldSelection);\n }\n this._onChangeCallback(args.newSelection);\n }\n else if (this.isRemote) {\n this.registerRemoteEntries(args.added, false);\n }\n }\n createDisplayText(newSelection, oldSelection) {\n return this.isRemote\n ? this.getRemoteSelection(newSelection, oldSelection)\n : this.concatDisplayText(newSelection);\n }\n /** Returns a string that should be populated in the combo's text box */\n concatDisplayText(selection) {\n const value = this.displayKey !== null && this.displayKey !== undefined ?\n this.convertKeysToItems(selection).map(entry => entry[this.displayKey]).join(', ') :\n selection.join(', ');\n return value;\n }\n}\nIgxComboComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxSelectionAPIService }, { token: IgxComboAPIService }, { token: IgxIconService }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }, { token: i0.Injector, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxComboComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxComboComponent, selector: \"igx-combo\", inputs: { autoFocusSearch: \"autoFocusSearch\", filterable: \"filterable\", searchPlaceholder: \"searchPlaceholder\" }, outputs: { selectionChanging: \"selectionChanging\" }, host: { listeners: { \"keydown.ArrowDown\": \"onArrowDown($event)\", \"keydown.Alt.ArrowDown\": \"onArrowDown($event)\" } }, providers: [\n IgxComboAPIService,\n { provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxComboComponent, multi: true }\n ], viewQueries: [{ propertyName: \"dropdown\", first: true, predicate: IgxComboDropDownComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ clearIcon }}\\n \\n \\n \\n \\n \\n \\n \\n {{ toggleIcon }}\\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 {{display[key]}}\\n\\n\\n {{display}}\\n\\n\\n {{resourceStrings.igx_combo_empty_message}}\\n\\n\\n \\n\\n\\n {{ item[key] }}\\n\\n\", dependencies: [{ kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgClass; }), selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgIf; }), selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgTemplateOutlet; }), selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i5.DefaultValueAccessor; }), selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i0.forwardRef(function () { return i5.NgControlStatus; }), selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i0.forwardRef(function () { return i5.NgModel; }), selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxButtonDirective; }), selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxDropDownItemNavigationDirective; }), selector: \"[igxDropDownItemNavigation]\", inputs: [\"igxDropDownItemNavigation\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxForOfDirective; }), selector: \"[igxFor][igxForOf]\", inputs: [\"igxForOf\", \"igxForSizePropName\", \"igxForScrollOrientation\", \"igxForScrollContainer\", \"igxForContainerSize\", \"igxForItemSize\", \"igxForTotalItemCount\", \"igxForTrackBy\"], outputs: [\"chunkLoad\", \"scrollbarVisibilityChanged\", \"contentSizeChange\", \"dataChanged\", \"beforeViewDestroyed\", \"chunkPreload\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxIconComponent; }), selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxInputGroupComponent; }), selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxInputDirective; }), selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxSuffixDirective; }), selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxRippleDirective; }), selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxComboAddItemComponent; }), selector: \"igx-combo-add-item\" }, { kind: \"component\", type: i0.forwardRef(function () { return IgxComboDropDownComponent; }), selector: \"igx-combo-drop-down\", inputs: [\"singleMode\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxComboItemComponent; }), selector: \"igx-combo-item\", inputs: [\"itemHeight\", \"ariaLabel\", \"singleMode\"] }, { kind: \"pipe\", type: i0.forwardRef(function () { return IgxComboFilteringPipe; }), name: \"comboFiltering\" }, { kind: \"pipe\", type: i0.forwardRef(function () { return IgxComboGroupingPipe; }), name: \"comboGrouping\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-combo', providers: [\n IgxComboAPIService,\n { provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxComboComponent, multi: true }\n ], template: \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ clearIcon }}\\n \\n \\n \\n \\n \\n \\n \\n {{ toggleIcon }}\\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 {{display[key]}}\\n\\n\\n {{display}}\\n\\n\\n {{resourceStrings.igx_combo_empty_message}}\\n\\n\\n \\n\\n\\n {{ item[key] }}\\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: IgxComboAPIService }, { type: IgxIconService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IGX_INPUT_GROUP_TYPE]\n }] }, { type: i0.Injector, decorators: [{\n type: Optional\n }] }];\n }, propDecorators: { autoFocusSearch: [{\n type: Input\n }], filterable: [{\n type: Input\n }], searchPlaceholder: [{\n type: Input\n }], selectionChanging: [{\n type: Output\n }], dropdown: [{\n type: ViewChild,\n args: [IgxComboDropDownComponent, { static: true }]\n }], onArrowDown: [{\n type: HostListener,\n args: ['keydown.ArrowDown', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.Alt.ArrowDown', ['$event']]\n }] } });\n/**\n * @hidden\n */\nclass IgxComboModule {\n}\nIgxComboModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxComboModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboModule, declarations: [IgxComboAddItemComponent,\n IgxComboAddItemDirective,\n IgxComboClearIconDirective, IgxComboComponent, IgxComboDropDownComponent,\n IgxComboEmptyDirective,\n IgxComboFilteringPipe,\n IgxComboFooterDirective,\n IgxComboGroupingPipe,\n IgxComboHeaderDirective,\n IgxComboHeaderItemDirective,\n IgxComboItemComponent,\n IgxComboItemDirective,\n IgxComboToggleIconDirective], imports: [CommonModule,\n FormsModule,\n IgxButtonModule,\n IgxCheckboxModule,\n IgxDropDownModule,\n IgxForOfModule,\n IgxIconModule,\n IgxInputGroupModule,\n IgxRippleModule,\n IgxToggleModule,\n ReactiveFormsModule], exports: [IgxComboAddItemComponent,\n IgxComboAddItemDirective,\n IgxComboClearIconDirective, IgxComboComponent, IgxComboDropDownComponent,\n IgxComboEmptyDirective,\n IgxComboFilteringPipe,\n IgxComboFooterDirective,\n IgxComboGroupingPipe,\n IgxComboHeaderDirective,\n IgxComboHeaderItemDirective,\n IgxComboItemComponent,\n IgxComboItemDirective,\n IgxComboToggleIconDirective,\n IgxInputGroupModule] });\nIgxComboModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboModule, imports: [CommonModule,\n FormsModule,\n IgxButtonModule,\n IgxCheckboxModule,\n IgxDropDownModule,\n IgxForOfModule,\n IgxIconModule,\n IgxInputGroupModule,\n IgxRippleModule,\n IgxToggleModule,\n ReactiveFormsModule, IgxInputGroupModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxComboModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxComboAddItemComponent,\n IgxComboAddItemDirective,\n IgxComboClearIconDirective,\n IgxComboComponent,\n IgxComboDropDownComponent,\n IgxComboEmptyDirective,\n IgxComboFilteringPipe,\n IgxComboFooterDirective,\n IgxComboGroupingPipe,\n IgxComboHeaderDirective,\n IgxComboHeaderItemDirective,\n IgxComboItemComponent,\n IgxComboItemDirective,\n IgxComboToggleIconDirective\n ],\n exports: [\n IgxComboAddItemComponent,\n IgxComboAddItemDirective,\n IgxComboClearIconDirective,\n IgxComboComponent,\n IgxComboDropDownComponent,\n IgxComboEmptyDirective,\n IgxComboFilteringPipe,\n IgxComboFooterDirective,\n IgxComboGroupingPipe,\n IgxComboHeaderDirective,\n IgxComboHeaderItemDirective,\n IgxComboItemComponent,\n IgxComboItemDirective,\n IgxComboToggleIconDirective,\n IgxInputGroupModule\n ],\n imports: [\n CommonModule,\n FormsModule,\n IgxButtonModule,\n IgxCheckboxModule,\n IgxDropDownModule,\n IgxForOfModule,\n IgxIconModule,\n IgxInputGroupModule,\n IgxRippleModule,\n IgxToggleModule,\n ReactiveFormsModule\n ]\n }]\n }] });\n\n/**\n * Represents a drop-down list that provides filtering functionality, allowing users to choose a single option from a predefined list.\n *\n * @igxModule IgxSimpleComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, single combo selection\n * @igxGroup Grids & Lists\n *\n * @remarks\n * It provides the ability to filter items as well as perform single selection on the provided data.\n * Additionally, it exposes keyboard navigation and custom styling capabilities.\n * @example\n * ```html\n * \n * \n * ```\n */\nclass IgxSimpleComboComponent extends IgxComboBaseDirective {\n /** @hidden @internal */\n get filteredData() {\n return this._filteredData;\n }\n /** @hidden @internal */\n set filteredData(val) {\n this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;\n this.checkMatch();\n }\n /** @hidden @internal */\n get searchValue() {\n return this._searchValue;\n }\n set searchValue(val) {\n this._searchValue = val;\n }\n get selectedItem() {\n return this.selectionService.get(this.id).values().next().value;\n }\n constructor(elementRef, cdr, selectionService, comboAPI, _iconService, platformUtil, _displayDensityOptions, _inputGroupType, _injector) {\n super(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector);\n this.platformUtil = platformUtil;\n /**\n * Emitted when item selection is changing, before the selection completes\n *\n * ```html\n * \n * ```\n */\n this.selectionChanging = new EventEmitter();\n /** @hidden @internal */\n this.composing = false;\n this._updateInput = true;\n // stores the last filtered value - move to common?\n this._internalFilter = '';\n this._collapsing = false;\n this.findAllMatches = (element) => {\n const value = this.displayKey ? element[this.displayKey] : element;\n if (value === null || value === undefined || value === '') {\n // we can accept null, undefined and empty strings as empty display values\n return true;\n }\n const searchValue = this.searchValue || this.comboInput.value;\n return !!searchValue && value.toString().toLowerCase().includes(searchValue.toLowerCase());\n };\n this.comboAPI.register(this);\n }\n /** @hidden @internal */\n onArrowDown(event) {\n var _a;\n if (this.collapsed) {\n event.preventDefault();\n event.stopPropagation();\n this.open();\n }\n else {\n if (this.virtDir.igxForOf.length > 0 && !this.selectedItem) {\n this.dropdown.navigateNext();\n this.dropdownContainer.nativeElement.focus();\n }\n else if (this.allowCustomValues) {\n (_a = this.addItem) === null || _a === void 0 ? void 0 : _a.element.nativeElement.focus();\n }\n }\n }\n /**\n * Select a defined item\n *\n * @param item the item to be selected\n * ```typescript\n * this.combo.select(\"New York\");\n * ```\n */\n select(item) {\n if (item !== undefined) {\n const newSelection = this.selectionService.add_items(this.id, item instanceof Array ? item : [item], true);\n this.setSelection(newSelection);\n }\n }\n /**\n * Deselect the currently selected item\n *\n * @param item the items to be deselected\n * ```typescript\n * this.combo.deselect(\"New York\");\n * ```\n */\n deselect() {\n this.clearSelection();\n }\n /** @hidden @internal */\n writeValue(value) {\n var _a;\n const oldSelection = this.selection;\n this.selectionService.select_items(this.id, this.isValid(value) ? [value] : [], true);\n this.cdr.markForCheck();\n this._value = this.createDisplayText(this.selection, oldSelection);\n this.filterValue = this._internalFilter = (_a = this._value) === null || _a === void 0 ? void 0 : _a.toString();\n }\n /** @hidden @internal */\n ngAfterViewInit() {\n this.virtDir.contentSizeChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (this.selection.length > 0) {\n const index = this.virtDir.igxForOf.findIndex(e => {\n let current = e ? e[this.valueKey] : undefined;\n if (this.valueKey === null || this.valueKey === undefined) {\n current = e;\n }\n return current === this.selection[0];\n });\n if (!this.isRemote) {\n // navigate to item only if we have local data\n // as with remote data this will fiddle with igxFor's scroll handler\n // and will trigger another chunk load which will break the visualization\n this.dropdown.navigateItem(index);\n }\n }\n });\n this.dropdown.opening.pipe(takeUntil(this.destroy$)).subscribe((args) => {\n if (args.cancel) {\n return;\n }\n this._collapsing = false;\n const filtered = this.filteredData.find(this.findAllMatches);\n if (filtered === undefined || filtered === null) {\n this.filterValue = this.searchValue = this.comboInput.value;\n return;\n }\n this.filterValue = this.searchValue = '';\n });\n this.dropdown.opened.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (this.composing) {\n this.comboInput.focus();\n }\n this._internalFilter = this.comboInput.value;\n });\n this.dropdown.closing.pipe(takeUntil(this.destroy$)).subscribe((args) => {\n if (args.cancel) {\n return;\n }\n if (this.getEditElement() && !args.event) {\n this._collapsing = true;\n }\n else {\n this.clearOnBlur();\n this._onTouchedCallback();\n }\n this.comboInput.focus();\n });\n this.dropdown.closed.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.filterValue = this._internalFilter = this.comboInput.value;\n });\n // in reactive form the control is not present initially\n // and sets the selection to an invalid value in writeValue method\n if (!this.isValid(this.selectedItem)) {\n this.selectionService.clear(this.id);\n this._value = '';\n }\n super.ngAfterViewInit();\n }\n /** @hidden @internal */\n handleInputChange(event) {\n if (event !== undefined) {\n this.filterValue = this._internalFilter = this.searchValue = typeof event === 'string' ? event : event.target.value;\n }\n this._onChangeCallback(this.searchValue);\n if (this.collapsed && this.comboInput.focused) {\n this.open();\n }\n if (!this.comboInput.value.trim() && this.selection.length) {\n // handle clearing of input by space\n this.clearSelection();\n this._onChangeCallback(null);\n this.filterValue = '';\n }\n if (this.selection.length) {\n this.selectionService.clear(this.id);\n }\n // when filtering the focused item should be the first item or the currently selected item\n if (!this.dropdown.focusedItem || this.dropdown.focusedItem.id !== this.dropdown.items[0].id) {\n this.dropdown.navigateFirst();\n }\n super.handleInputChange(event);\n this.composing = true;\n }\n /** @hidden @internal */\n handleInputClick() {\n if (this.collapsed) {\n this.open();\n this.comboInput.focus();\n }\n }\n /** @hidden @internal */\n handleKeyDown(event) {\n if (event.key === this.platformUtil.KEYMAP.ENTER) {\n const filtered = this.filteredData.find(this.findAllMatches);\n if (filtered === null || filtered === undefined) {\n return;\n }\n this.select(this.dropdown.focusedItem.itemID);\n event.preventDefault();\n event.stopPropagation();\n this.close();\n // manually trigger text selection as it will not be triggered during editing\n this.textSelection.trigger();\n this.filterValue = this.getElementVal(filtered);\n return;\n }\n if (event.key === this.platformUtil.KEYMAP.BACKSPACE\n || event.key === this.platformUtil.KEYMAP.DELETE) {\n this._updateInput = false;\n this.clearSelection(true);\n }\n if (!this.collapsed && event.key === this.platformUtil.KEYMAP.TAB) {\n this.clearOnBlur();\n this.close();\n }\n this.composing = false;\n super.handleKeyDown(event);\n }\n /** @hidden @internal */\n handleKeyUp(event) {\n if (event.key === this.platformUtil.KEYMAP.ARROW_DOWN) {\n const firstItem = this.selectionService.first_item(this.id);\n this.dropdown.focusedItem = firstItem && this.filteredData.length > 0\n ? this.dropdown.items.find(i => i.itemID === firstItem)\n : this.dropdown.items[0];\n this.dropdownContainer.nativeElement.focus();\n }\n }\n /** @hidden @internal */\n handleItemKeyDown(event) {\n if (event.key === this.platformUtil.KEYMAP.ARROW_UP && event.altKey) {\n this.close();\n this.comboInput.focus();\n return;\n }\n if (event.key === this.platformUtil.KEYMAP.ENTER) {\n this.comboInput.focus();\n }\n }\n /** @hidden @internal */\n handleItemClick() {\n this.close();\n this.comboInput.focus();\n }\n /** @hidden @internal */\n onBlur() {\n // when clicking the toggle button to close the combo and immediately clicking outside of it\n // the collapsed state is not modified as the dropdown is still not closed\n if (this.collapsed || this._collapsing) {\n this.clearOnBlur();\n }\n super.onBlur();\n }\n /** @hidden @internal */\n onFocus() {\n this._internalFilter = this.comboInput.value || '';\n }\n /** @hidden @internal */\n getEditElement() {\n return this.comboInput.nativeElement;\n }\n /** @hidden @internal */\n handleClear(event) {\n if (this.disabled) {\n return;\n }\n this.clearSelection(true);\n if (!this.collapsed) {\n this.focusSearchInput(true);\n }\n event.stopPropagation();\n this.comboInput.value = this.filterValue = this.searchValue = '';\n this.dropdown.focusedItem = null;\n this.composing = false;\n this.comboInput.focus();\n }\n /** @hidden @internal */\n handleOpened() {\n this.triggerCheck();\n if (!this.comboInput.focused) {\n this.dropdownContainer.nativeElement.focus();\n }\n this.opened.emit({ owner: this });\n }\n /** @hidden @internal */\n handleClosing(e) {\n const args = { owner: this, event: e.event, cancel: e.cancel };\n this.closing.emit(args);\n e.cancel = args.cancel;\n if (e.cancel) {\n return;\n }\n this.composing = false;\n // explicitly update selection and trigger text selection so that we don't have to force CD\n this.textSelection.selected = true;\n this.textSelection.trigger();\n }\n /** @hidden @internal */\n focusSearchInput(opening) {\n if (opening) {\n this.dropdownContainer.nativeElement.focus();\n }\n else {\n this.comboInput.nativeElement.focus();\n }\n }\n /** @hidden @internal */\n onClick(event) {\n super.onClick(event);\n if (this.comboInput.value.length === 0) {\n this.virtDir.scrollTo(0);\n }\n }\n setSelection(newSelection) {\n const newSelectionAsArray = newSelection ? Array.from(newSelection) : [];\n const oldSelectionAsArray = Array.from(this.selectionService.get(this.id) || []);\n const displayText = this.createDisplayText(newSelectionAsArray, oldSelectionAsArray);\n const args = {\n newSelection: newSelectionAsArray[0],\n oldSelection: oldSelectionAsArray[0],\n displayText,\n owner: this,\n cancel: false\n };\n if (args.newSelection !== args.oldSelection) {\n this.selectionChanging.emit(args);\n }\n // TODO: refactor below code as it sets the selection and the display text\n if (!args.cancel) {\n let argsSelection = this.isValid(args.newSelection)\n ? args.newSelection\n : [];\n argsSelection = Array.isArray(argsSelection) ? argsSelection : [argsSelection];\n this.selectionService.select_items(this.id, argsSelection, true);\n if (this._updateInput) {\n this.comboInput.value = this._internalFilter = this._value = this.searchValue = displayText !== args.displayText\n ? args.displayText\n : this.createDisplayText(argsSelection, [args.oldSelection]);\n }\n this._onChangeCallback(args.newSelection);\n this._updateInput = true;\n }\n else if (this.isRemote) {\n this.registerRemoteEntries(newSelectionAsArray, false);\n }\n }\n createDisplayText(newSelection, oldSelection) {\n var _a, _b;\n if (this.isRemote) {\n return this.getRemoteSelection(newSelection, oldSelection);\n }\n if (this.displayKey !== null\n && this.displayKey !== undefined\n && newSelection.length > 0) {\n return ((_a = this.convertKeysToItems(newSelection).filter(e => e).map(e => e[this.displayKey])[0]) === null || _a === void 0 ? void 0 : _a.toString()) || '';\n }\n return ((_b = newSelection[0]) === null || _b === void 0 ? void 0 : _b.toString()) || '';\n }\n getRemoteSelection(newSelection, oldSelection) {\n if (!newSelection.length) {\n this.registerRemoteEntries(oldSelection, false);\n return '';\n }\n this.registerRemoteEntries(oldSelection, false);\n this.registerRemoteEntries(newSelection);\n return Object.keys(this._remoteSelection).map(e => this._remoteSelection[e])[0] || '';\n }\n /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */\n registerRemoteEntries(ids, add = true) {\n const selection = this.getValueDisplayPairs(ids)[0];\n if (add && selection) {\n this._remoteSelection[selection[this.valueKey]] = selection[this.displayKey].toString();\n }\n else {\n delete this._remoteSelection[ids[0]];\n }\n }\n clearSelection(ignoreFilter) {\n let newSelection = this.selectionService.get_empty();\n if (this.filteredData.length !== this.data.length && !ignoreFilter) {\n newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));\n }\n this.setSelection(newSelection);\n }\n clearOnBlur() {\n if (this.isRemote) {\n const searchValue = this.searchValue || this.comboInput.value;\n const remoteValue = Object.keys(this._remoteSelection).map(e => this._remoteSelection[e])[0];\n if (remoteValue && searchValue !== remoteValue) {\n this.clear();\n }\n return;\n }\n const filtered = this.filteredData.find(this.findMatch);\n // selecting null in primitive data returns undefined as the search text is '', but the item is null\n if (filtered === undefined && this.selectedItem !== null || !this.selection.length) {\n this.clear();\n }\n }\n getElementVal(element) {\n const elementVal = this.displayKey ? element[this.displayKey] : element;\n return String(elementVal);\n }\n clear() {\n this.clearSelection(true);\n this.comboInput.value = this._internalFilter = this._value = this.searchValue = '';\n }\n isValid(value) {\n return this.required\n ? value !== null && value !== '' && value !== undefined\n : value !== undefined;\n }\n}\nIgxSimpleComboComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSimpleComboComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxSelectionAPIService }, { token: IgxComboAPIService }, { token: IgxIconService }, { token: PlatformUtil }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }, { token: i0.Injector, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxSimpleComboComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSimpleComboComponent, selector: \"igx-simple-combo\", outputs: { selectionChanging: \"selectionChanging\" }, host: { listeners: { \"keydown.ArrowDown\": \"onArrowDown($event)\", \"keydown.Alt.ArrowDown\": \"onArrowDown($event)\" } }, providers: [\n IgxComboAPIService,\n { provide: IGX_COMBO_COMPONENT, useExisting: IgxSimpleComboComponent },\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxSimpleComboComponent, multi: true }\n ], viewQueries: [{ propertyName: \"dropdown\", first: true, predicate: IgxComboDropDownComponent, descendants: true, static: true }, { propertyName: \"addItem\", first: true, predicate: IgxComboAddItemComponent, descendants: true }, { propertyName: \"textSelection\", first: true, predicate: IgxTextSelectionDirective, descendants: true, static: true }], 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 {{ clearIcon }}\\n \\n \\n\\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n {{ toggleIcon }}\\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 {{display[key]}}\\n\\n\\n {{display}}\\n\\n\\n {{resourceStrings.igx_combo_empty_message}}\\n\\n\\n \\n\\n\\n {{ item[key] }}\\n\\n\", dependencies: [{ kind: \"component\", type: IgxComboAddItemComponent, selector: \"igx-combo-add-item\" }, { kind: \"component\", type: IgxComboDropDownComponent, selector: \"igx-combo-drop-down\", inputs: [\"singleMode\"] }, { kind: \"component\", type: IgxComboItemComponent, selector: \"igx-combo-item\", inputs: [\"itemHeight\", \"ariaLabel\", \"singleMode\"] }, { kind: \"component\", type: IgxInputGroupComponent, selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: IgxInputDirective, selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: IgxSuffixDirective, selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: IgxForOfDirective, selector: \"[igxFor][igxForOf]\", inputs: [\"igxForOf\", \"igxForSizePropName\", \"igxForScrollOrientation\", \"igxForScrollContainer\", \"igxForContainerSize\", \"igxForItemSize\", \"igxForTotalItemCount\", \"igxForTrackBy\"], outputs: [\"chunkLoad\", \"scrollbarVisibilityChanged\", \"contentSizeChange\", \"dataChanged\", \"beforeViewDestroyed\", \"chunkPreload\"] }, { kind: \"directive\", type: IgxDropDownItemNavigationDirective, selector: \"[igxDropDownItemNavigation]\", inputs: [\"igxDropDownItemNavigation\"] }, { kind: \"directive\", type: IgxTextSelectionDirective, selector: \"[igxTextSelection]\", inputs: [\"igxTextSelection\"], exportAs: [\"igxTextSelection\"] }, { kind: \"pipe\", type: IgxComboFilteringPipe, name: \"comboFiltering\" }, { kind: \"pipe\", type: IgxComboGroupingPipe, name: \"comboGrouping\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSimpleComboComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-simple-combo', providers: [\n IgxComboAPIService,\n { provide: IGX_COMBO_COMPONENT, useExisting: IgxSimpleComboComponent },\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxSimpleComboComponent, multi: true }\n ], 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 {{ clearIcon }}\\n \\n \\n\\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n {{ toggleIcon }}\\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 {{display[key]}}\\n\\n\\n {{display}}\\n\\n\\n {{resourceStrings.igx_combo_empty_message}}\\n\\n\\n \\n\\n\\n {{ item[key] }}\\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: IgxComboAPIService }, { type: IgxIconService }, { type: PlatformUtil }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IGX_INPUT_GROUP_TYPE]\n }] }, { type: i0.Injector, decorators: [{\n type: Optional\n }] }];\n }, propDecorators: { dropdown: [{\n type: ViewChild,\n args: [IgxComboDropDownComponent, { static: true }]\n }], addItem: [{\n type: ViewChild,\n args: [IgxComboAddItemComponent]\n }], selectionChanging: [{\n type: Output\n }], textSelection: [{\n type: ViewChild,\n args: [IgxTextSelectionDirective, { static: true }]\n }], onArrowDown: [{\n type: HostListener,\n args: ['keydown.ArrowDown', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.Alt.ArrowDown', ['$event']]\n }] } });\nclass IgxSimpleComboModule {\n}\nIgxSimpleComboModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSimpleComboModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxSimpleComboModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSimpleComboModule, declarations: [IgxSimpleComboComponent], imports: [IgxComboModule, IgxRippleModule, CommonModule,\n IgxInputGroupModule, FormsModule, ReactiveFormsModule,\n IgxForOfModule, IgxToggleModule, IgxCheckboxModule,\n IgxDropDownModule, IgxButtonModule, IgxIconModule,\n IgxTextSelectionModule], exports: [IgxSimpleComboComponent, IgxComboModule] });\nIgxSimpleComboModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSimpleComboModule, imports: [IgxComboModule, IgxRippleModule, CommonModule,\n IgxInputGroupModule, FormsModule, ReactiveFormsModule,\n IgxForOfModule, IgxToggleModule, IgxCheckboxModule,\n IgxDropDownModule, IgxButtonModule, IgxIconModule,\n IgxTextSelectionModule, IgxComboModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSimpleComboModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxSimpleComboComponent],\n imports: [\n IgxComboModule, IgxRippleModule, CommonModule,\n IgxInputGroupModule, FormsModule, ReactiveFormsModule,\n IgxForOfModule, IgxToggleModule, IgxCheckboxModule,\n IgxDropDownModule, IgxButtonModule, IgxIconModule,\n IgxTextSelectionModule\n ],\n exports: [IgxSimpleComboComponent, IgxComboModule]\n }]\n }] });\n\n/** Header orientation in `dialog` mode. */\nconst PickerHeaderOrientation = mkenum({\n Horizontal: 'horizontal',\n Vertical: 'vertical'\n});\n/**\n * This enumeration is used to configure whether the date/time picker has an editable input with drop down\n * or is readonly - the date/time is selected only through a dialog.\n */\nconst PickerInteractionMode = mkenum({\n DropDown: 'dropdown',\n Dialog: 'dialog'\n});\n\n/** @hidden */\nclass IgxCalendarContainerComponent {\n constructor() {\n this.calendarClose = new EventEmitter();\n this.todaySelection = new EventEmitter();\n this.styleClass = 'igx-date-picker';\n this.vertical = false;\n this.mode = PickerInteractionMode.DropDown;\n }\n get dropdownCSS() {\n return this.mode === PickerInteractionMode.DropDown;\n }\n get verticalCSS() {\n return this.vertical && this.mode === PickerInteractionMode.Dialog;\n }\n onEscape(event) {\n event.preventDefault();\n this.calendarClose.emit();\n }\n get isReadonly() {\n return this.mode === PickerInteractionMode.Dialog;\n }\n}\nIgxCalendarContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxCalendarContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCalendarContainerComponent, selector: \"igx-calendar-container\", outputs: { calendarClose: \"calendarClose\", todaySelection: \"todaySelection\" }, host: { listeners: { \"keydown.alt.arrowup\": \"onEscape($event)\" }, properties: { \"class.igx-date-picker\": \"this.styleClass\", \"class.igx-date-picker--dropdown\": \"this.dropdownCSS\", \"class.igx-date-picker--vertical\": \"this.verticalCSS\" } }, viewQueries: [{ propertyName: \"calendar\", first: true, predicate: IgxCalendarComponent, descendants: true, static: true }], ngImport: i0, template: \"\\n
    \\n \\n \\n
    \\n
    \\n\\n\\n\\n\\n\", styles: [\":host{display:block}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }, { kind: \"component\", type: IgxCalendarComponent, selector: \"igx-calendar\", inputs: [\"id\", \"hasHeader\", \"vertical\", \"monthsViewNumber\", \"showWeekNumbers\", \"animationAction\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarContainerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-calendar-container', template: \"\\n
    \\n \\n \\n
    \\n
    \\n\\n\\n\\n\\n\", styles: [\":host{display:block}\\n\"] }]\n }], propDecorators: { calendar: [{\n type: ViewChild,\n args: [IgxCalendarComponent, { static: true }]\n }], calendarClose: [{\n type: Output\n }], todaySelection: [{\n type: Output\n }], styleClass: [{\n type: HostBinding,\n args: ['class.igx-date-picker']\n }], dropdownCSS: [{\n type: HostBinding,\n args: ['class.igx-date-picker--dropdown']\n }], verticalCSS: [{\n type: HostBinding,\n args: ['class.igx-date-picker--vertical']\n }], onEscape: [{\n type: HostListener,\n args: ['keydown.alt.arrowup', ['$event']]\n }] } });\n/** @hidden */\nclass IgxCalendarContainerModule {\n}\nIgxCalendarContainerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarContainerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxCalendarContainerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarContainerModule, declarations: [IgxCalendarContainerComponent], imports: [CommonModule,\n IgxButtonModule,\n IgxRippleModule,\n IgxCalendarModule], exports: [IgxCalendarContainerComponent] });\nIgxCalendarContainerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarContainerModule, imports: [CommonModule,\n IgxButtonModule,\n IgxRippleModule,\n IgxCalendarModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCalendarContainerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxCalendarContainerComponent],\n imports: [\n CommonModule,\n IgxButtonModule,\n IgxRippleModule,\n IgxCalendarModule\n ],\n exports: [IgxCalendarContainerComponent]\n }]\n }] });\n\n/**\n * Templates the default toggle icon in the picker.\n *\n * @remarks Can be applied to IgxDatePickerComponent, IgxTimePickerComponent, IgxDateRangePickerComponent\n *\n * @example\n * ```html\n * \n * \n * calendar_view_day\n * \n * \n * ```\n */\nclass IgxPickerToggleComponent {\n constructor() {\n this.clicked = new EventEmitter();\n }\n onClick(event) {\n // do not focus input on click\n event.stopPropagation();\n this.clicked.emit();\n }\n}\nIgxPickerToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPickerToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxPickerToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxPickerToggleComponent, selector: \"igx-picker-toggle\", outputs: { clicked: \"clicked\" }, host: { listeners: { \"click\": \"onClick($event)\" } }, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPickerToggleComponent, decorators: [{\n type: Component,\n args: [{\n template: ``,\n selector: 'igx-picker-toggle'\n }]\n }], propDecorators: { clicked: [{\n type: Output\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] } });\n/**\n * Templates the default clear icon in the picker.\n *\n * @remarks Can be applied to IgxDatePickerComponent, IgxTimePickerComponent, IgxDateRangePickerComponent\n *\n * @example\n * ```html\n * \n * \n * delete\n * \n * \n * ```\n */\nclass IgxPickerClearComponent extends IgxPickerToggleComponent {\n}\nIgxPickerClearComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPickerClearComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxPickerClearComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxPickerClearComponent, selector: \"igx-picker-clear\", usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPickerClearComponent, decorators: [{\n type: Component,\n args: [{\n template: ``,\n selector: 'igx-picker-clear'\n }]\n }] });\n/**\n * IgxPickerActionsDirective can be used to re-template the dropdown/dialog action buttons.\n *\n * @remarks Can be applied to IgxDatePickerComponent, IgxTimePickerComponent, IgxDateRangePickerComponent\n *\n */\nclass IgxPickerActionsDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxPickerActionsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPickerActionsDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxPickerActionsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxPickerActionsDirective, selector: \"[igxPickerActions]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPickerActionsDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxPickerActions]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/** @hidden */\nclass IgxPickersCommonModule {\n}\nIgxPickersCommonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPickersCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxPickersCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPickersCommonModule, declarations: [IgxPickerToggleComponent, IgxPickerClearComponent, IgxPickerActionsDirective], imports: [CommonModule], exports: [IgxPickerToggleComponent, IgxPickerClearComponent, IgxPickerActionsDirective] });\nIgxPickersCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPickersCommonModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPickersCommonModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxPickerToggleComponent,\n IgxPickerClearComponent,\n IgxPickerActionsDirective\n ],\n imports: [CommonModule],\n exports: [\n IgxPickerToggleComponent,\n IgxPickerClearComponent,\n IgxPickerActionsDirective\n ]\n }]\n }] });\n\nclass PickerBaseDirective extends DisplayDensityBase {\n /**\n * @example\n * ```html\n * \n * ```\n */\n /**\n * Gets the `locale` of the date-picker.\n * If not set, defaults to applciation's locale..\n */\n get locale() {\n return this._locale;\n }\n /**\n * Sets the `locale` of the date-picker.\n * Expects a valid BCP 47 language tag.\n */\n set locale(value) {\n this._locale = value;\n // if value is invalid, set it back to _localeId\n try {\n getLocaleFirstDayOfWeek(this._locale);\n }\n catch (e) {\n this._locale = this._localeId;\n }\n }\n /**\n * Gets the start day of the week.\n * Can return a numeric or an enum representation of the week day.\n * If not set, defaults to the first day of the week for the application locale.\n */\n get weekStart() {\n var _a;\n return (_a = this._weekStart) !== null && _a !== void 0 ? _a : getLocaleFirstDayOfWeek(this._locale);\n }\n /**\n * Sets the start day of the week.\n * Can be assigned to a numeric value or to `WEEKDAYS` enum value.\n */\n set weekStart(value) {\n this._weekStart = value;\n }\n /**\n * Determines how the picker's input will be styled.\n *\n * @remarks\n * Default is `box`.\n *\n * @example\n * ```html\n * \n * ```\n */\n set type(val) {\n this._type = val;\n }\n get type() {\n return this._type || this._inputGroupType;\n }\n /**\n * Gets the picker's pop-up state.\n *\n * @example\n * ```typescript\n * const state = this.picker.collapsed;\n * ```\n */\n get collapsed() {\n return this._collapsed;\n }\n /** @hidden @internal */\n get isDropdown() {\n return this.mode === PickerInteractionMode.DropDown;\n }\n constructor(element, _localeId, _displayDensityOptions, _inputGroupType) {\n super(_displayDensityOptions || { displayDensity: 'comfortable' });\n this.element = element;\n this._localeId = _localeId;\n this._displayDensityOptions = _displayDensityOptions;\n this._inputGroupType = _inputGroupType;\n /**\n * Sets the `placeholder` of the picker's input.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.placeholder = '';\n /**\n * Can be `dropdown` with editable input field or `dialog` with readonly input field.\n *\n * @remarks\n * Default mode is `dropdown`\n *\n * @example\n * ```html\n * \n * ```\n */\n this.mode = PickerInteractionMode.DropDown;\n /**\n * Enables or disables the picker.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.disabled = false;\n /**\n * Emitted when the calendar has started opening, cancelable.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.opening = new EventEmitter();\n /**\n * Emitted after the calendar has opened.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.opened = new EventEmitter();\n /**\n * Emitted when the calendar has started closing, cancelable.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.closing = new EventEmitter();\n /**\n * Emitted after the calendar has closed.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.closed = new EventEmitter();\n this._collapsed = true;\n this._destroy$ = new Subject();\n this.locale = this.locale || this._localeId;\n }\n /** @hidden @internal */\n ngAfterViewInit() {\n this.subToIconsClicked(this.toggleComponents, () => this.open());\n this.toggleComponents.changes.pipe(takeUntil(this._destroy$))\n .subscribe(() => this.subToIconsClicked(this.toggleComponents, () => this.open()));\n }\n /** @hidden @internal */\n ngAfterContentChecked() {\n var _a, _b;\n if (this.inputGroup && ((_a = this.prefixes) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n this.inputGroup.prefixes = this.prefixes;\n }\n if (this.inputGroup && ((_b = this.suffixes) === null || _b === void 0 ? void 0 : _b.length) > 0) {\n this.inputGroup.suffixes = this.suffixes;\n }\n }\n /** @hidden @internal */\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n /** Subscribes to the click events of toggle/clear icons in a query */\n subToIconsClicked(components, next) {\n components.forEach(toggle => {\n toggle.clicked\n .pipe(takeUntil(merge(components.changes, this._destroy$)))\n .subscribe(next);\n });\n }\n ;\n}\nPickerBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: PickerBaseDirective, deps: [{ token: i0.ElementRef }, { token: LOCALE_ID }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nPickerBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: PickerBaseDirective, inputs: { inputFormat: \"inputFormat\", displayFormat: \"displayFormat\", placeholder: \"placeholder\", mode: \"mode\", overlaySettings: \"overlaySettings\", disabled: \"disabled\", locale: \"locale\", weekStart: \"weekStart\", outlet: \"outlet\", type: \"type\", tabIndex: \"tabIndex\" }, outputs: { opening: \"opening\", opened: \"opened\", closing: \"closing\", closed: \"closed\" }, queries: [{ propertyName: \"toggleComponents\", predicate: IgxPickerToggleComponent, descendants: true }, { propertyName: \"prefixes\", predicate: IgxPrefixDirective, descendants: true }, { propertyName: \"suffixes\", predicate: IgxSuffixDirective, descendants: true }], viewQueries: [{ propertyName: \"inputGroup\", first: true, predicate: IgxInputGroupComponent, descendants: true }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: PickerBaseDirective, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IGX_INPUT_GROUP_TYPE]\n }] }];\n }, propDecorators: { inputFormat: [{\n type: Input\n }], displayFormat: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], mode: [{\n type: Input\n }], overlaySettings: [{\n type: Input\n }], disabled: [{\n type: Input\n }], locale: [{\n type: Input\n }], weekStart: [{\n type: Input\n }], outlet: [{\n type: Input\n }], type: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], opening: [{\n type: Output\n }], opened: [{\n type: Output\n }], closing: [{\n type: Output\n }], closed: [{\n type: Output\n }], toggleComponents: [{\n type: ContentChildren,\n args: [IgxPickerToggleComponent, { descendants: true }]\n }], prefixes: [{\n type: ContentChildren,\n args: [IgxPrefixDirective, { descendants: true }]\n }], suffixes: [{\n type: ContentChildren,\n args: [IgxSuffixDirective, { descendants: true }]\n }], inputGroup: [{\n type: ViewChild,\n args: [IgxInputGroupComponent]\n }] } });\n\nlet NEXT_ID$d = 0;\n/**\n * Date Picker displays a popup calendar that lets users select a single date.\n *\n * @igxModule IgxDatePickerModule\n * @igxTheme igx-calendar-theme, igx-icon-theme\n * @igxGroup Scheduling\n * @igxKeywords datepicker, calendar, schedule, date\n * @example\n * ```html\n * \n * ```\n */\nclass IgxDatePickerComponent extends PickerBaseDirective {\n /**\n * Gets/Sets the disabled dates descriptors.\n *\n * @example\n * ```typescript\n * let disabledDates = this.datepicker.disabledDates;\n * this.datePicker.disabledDates = [ {type: DateRangeType.Weekends}, ...];\n * ```\n */\n get disabledDates() {\n return this._disabledDates;\n }\n set disabledDates(value) {\n this._disabledDates = value;\n this._onValidatorChange();\n }\n /**\n * Gets/Sets the special dates descriptors.\n *\n * @example\n * ```typescript\n * let specialDates = this.datepicker.specialDates;\n * this.datePicker.specialDates = [ {type: DateRangeType.Weekends}, ... ];\n * ```\n */\n get specialDates() {\n return this._specialDates;\n }\n set specialDates(value) {\n this._specialDates = value;\n }\n //#endregion\n /**\n * Gets/Sets the selected date.\n *\n * @example\n * ```html\n * \n * ```\n */\n get value() {\n return this._value;\n }\n set value(date) {\n this._value = date;\n this.setDateValue(date);\n if (this.dateTimeEditor.value !== date) {\n this.dateTimeEditor.value = this._dateValue;\n }\n this.valueChange.emit(this.dateValue);\n this._onChangeCallback(this.dateValue);\n }\n /**\n * The minimum value the picker will accept.\n *\n * @example\n * \n */\n set minValue(value) {\n this._minValue = value;\n this._onValidatorChange();\n }\n get minValue() {\n return this._minValue;\n }\n /**\n * The maximum value the picker will accept.\n *\n * @example\n * \n */\n set maxValue(value) {\n this._maxValue = value;\n this._onValidatorChange();\n }\n get maxValue() {\n return this._maxValue;\n }\n get dialogOverlaySettings() {\n return Object.assign({}, this._dialogOverlaySettings, this.overlaySettings);\n }\n get dropDownOverlaySettings() {\n return Object.assign({}, this._dropDownOverlaySettings, this.overlaySettings);\n }\n get inputGroupElement() {\n var _a;\n return (_a = this.inputGroup) === null || _a === void 0 ? void 0 : _a.element.nativeElement;\n }\n get dateValue() {\n return this._dateValue;\n }\n get pickerFormatViews() {\n return Object.assign({}, this._defFormatViews, this.formatViews);\n }\n get pickerCalendarFormat() {\n return Object.assign({}, this._calendarFormat, this.calendarFormat);\n }\n constructor(element, _localeId, _overlayService, _injector, _renderer, platform, cdr, _displayDensityOptions, _inputGroupType) {\n super(element, _localeId, _displayDensityOptions, _inputGroupType);\n this._overlayService = _overlayService;\n this._injector = _injector;\n this._renderer = _renderer;\n this.platform = platform;\n this.cdr = cdr;\n /**\n * Gets/Sets the number of month views displayed.\n *\n * @remarks\n * Default value is `1`.\n *\n * @example\n * ```html\n * \n * ```\n * @example\n * ```typescript\n * let monthViewsDisplayed = this.datePicker.displayMonthsCount;\n * ```\n */\n this.displayMonthsCount = 1;\n /**\n * Gets/Sets the orientation of the `IgxDatePickerComponent` header.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.headerOrientation = PickerHeaderOrientation.Horizontal;\n /**\n * Specify if the currently spun date segment should loop over.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.spinLoop = true;\n /**\n * Gets/Sets the value of `id` attribute.\n *\n * @remarks If not provided it will be automatically generated.\n * @example\n * ```html\n * \n * ```\n */\n this.id = `igx-date-picker-${NEXT_ID$d++}`;\n /** @hidden @internal */\n this.readOnly = false;\n /**\n * Emitted when the picker's value changes.\n *\n * @remarks\n * Used for `two-way` bindings.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.valueChange = new EventEmitter();\n /**\n * Emitted when the user types/spins invalid date in the date-picker editor.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.validationFailed = new EventEmitter();\n /** @hidden @internal */\n this.displayValue = { transform: (date) => this.formatter(date) };\n this._resourceStrings = CurrentResourceStrings.DatePickerResourceStrings;\n this._ngControl = null;\n this._specialDates = null;\n this._disabledDates = null;\n this._overlaySubFilter = [\n filter(x => x.id === this._overlayId),\n takeUntil(this._destroy$)\n ];\n this._dropDownOverlaySettings = {\n target: this.inputGroupElement,\n closeOnOutsideClick: true,\n modal: false,\n closeOnEscape: true,\n scrollStrategy: new AbsoluteScrollStrategy(),\n positionStrategy: new AutoPositionStrategy({\n openAnimation: fadeIn,\n closeAnimation: fadeOut\n })\n };\n this._dialogOverlaySettings = {\n closeOnOutsideClick: true,\n modal: true,\n closeOnEscape: true\n };\n this._calendarFormat = {\n day: 'numeric',\n month: 'short',\n weekday: 'short',\n year: 'numeric'\n };\n this._defFormatViews = {\n day: false,\n month: true,\n year: false\n };\n this._onChangeCallback = noop;\n this._onTouchedCallback = noop;\n this._onValidatorChange = noop;\n this.onStatusChanged = () => {\n this.disabled = this._ngControl.disabled;\n this.updateValidity();\n this.inputGroup.isRequired = this.required;\n };\n this.locale = this.locale || this._localeId;\n }\n /** @hidden @internal */\n get required() {\n if (this._ngControl && this._ngControl.control && this._ngControl.control.validator) {\n // Run the validation with empty object to check if required is enabled.\n const error = this._ngControl.control.validator({});\n return error && error.required;\n }\n return false;\n }\n /** @hidden @internal */\n get pickerResourceStrings() {\n return Object.assign({}, this._resourceStrings, this.resourceStrings);\n }\n /** @hidden @internal */\n onKeyDown(event) {\n switch (event.key) {\n case this.platform.KEYMAP.ARROW_UP:\n if (event.altKey) {\n this.close();\n }\n break;\n case this.platform.KEYMAP.ARROW_DOWN:\n if (event.altKey) {\n this.open();\n }\n break;\n case this.platform.KEYMAP.SPACE:\n event.preventDefault();\n this.open();\n break;\n }\n }\n /**\n * Opens the picker's dropdown or dialog.\n *\n * @example\n * ```html\n * \n *\n * \n * ```\n */\n open(settings) {\n if (!this.collapsed || this.disabled) {\n return;\n }\n const overlaySettings = Object.assign({}, this.isDropdown\n ? this.dropDownOverlaySettings\n : this.dialogOverlaySettings, settings);\n if (this.isDropdown && this.inputGroupElement) {\n overlaySettings.target = this.inputGroupElement;\n }\n if (this.outlet) {\n overlaySettings.outlet = this.outlet;\n }\n this._overlayId = this._overlayService\n .attach(IgxCalendarContainerComponent, this.viewContainerRef, overlaySettings);\n this._overlayService.show(this._overlayId);\n }\n /**\n * Toggles the picker's dropdown or dialog\n *\n * @example\n * ```html\n * \n *\n * \n * ```\n */\n toggle(settings) {\n if (this.collapsed) {\n this.open(settings);\n }\n else {\n this.close();\n }\n }\n /**\n * Closes the picker's dropdown or dialog.\n *\n * @example\n * ```html\n * \n *\n * \n * ```\n */\n close() {\n if (!this.collapsed) {\n this._overlayService.hide(this._overlayId);\n }\n }\n /**\n * Selects a date.\n *\n * @remarks Updates the value in the input field.\n *\n * @example\n * ```typescript\n * this.datePicker.select(date);\n * ```\n * @param date passed date that has to be set to the calendar.\n */\n select(value) {\n this.value = value;\n }\n /**\n * Selects today's date and closes the picker.\n *\n * @example\n * ```html\n * \n *\n * \n * ```\n * */\n selectToday() {\n const today = new Date();\n today.setHours(0);\n today.setMinutes(0);\n today.setSeconds(0);\n today.setMilliseconds(0);\n this.select(today);\n this.close();\n }\n /**\n * Clears the input field and the picker's value.\n *\n * @example\n * ```typescript\n * this.datePicker.clear();\n * ```\n */\n clear() {\n var _a;\n if (!this.disabled) {\n (_a = this._calendar) === null || _a === void 0 ? void 0 : _a.deselectDate();\n this.dateTimeEditor.clear();\n }\n }\n /**\n * Increment a specified `DatePart`.\n *\n * @param datePart The optional DatePart to increment. Defaults to Date.\n * @param delta The optional delta to increment by. Overrides `spinDelta`.\n * @example\n * ```typescript\n * this.datePicker.increment(DatePart.Date);\n * ```\n */\n increment(datePart, delta) {\n this.dateTimeEditor.increment(datePart, delta);\n }\n /**\n * Decrement a specified `DatePart`\n *\n * @param datePart The optional DatePart to decrement. Defaults to Date.\n * @param delta The optional delta to decrement by. Overrides `spinDelta`.\n * @example\n * ```typescript\n * this.datePicker.decrement(DatePart.Date);\n * ```\n */\n decrement(datePart, delta) {\n this.dateTimeEditor.decrement(datePart, delta);\n }\n //#region Control Value Accessor\n /** @hidden @internal */\n writeValue(value) {\n this._value = value;\n this.setDateValue(value);\n if (this.dateTimeEditor.value !== value) {\n this.dateTimeEditor.value = this._dateValue;\n }\n }\n /** @hidden @internal */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /** @hidden @internal */\n registerOnTouched(fn) {\n this._onTouchedCallback = fn;\n }\n /** @hidden @internal */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n //#endregion\n //#region Validator\n /** @hidden @internal */\n registerOnValidatorChange(fn) {\n this._onValidatorChange = fn;\n }\n /** @hidden @internal */\n validate(control) {\n if (!control.value) {\n return null;\n }\n // InvalidDate handling\n if (isDate(control.value) && !DateTimeUtil.isValidDate(control.value)) {\n return { value: true };\n }\n const errors = {};\n const value = DateTimeUtil.isValidDate(control.value) ? control.value : DateTimeUtil.parseIsoDate(control.value);\n if (value && this.disabledDates && isDateInRanges(value, this.disabledDates)) {\n Object.assign(errors, { dateIsDisabled: true });\n }\n Object.assign(errors, DateTimeUtil.validateMinMax(value, this.minValue, this.maxValue, false));\n return Object.keys(errors).length > 0 ? errors : null;\n }\n //#endregion\n /** @hidden @internal */\n ngOnInit() {\n this._ngControl = this._injector.get(NgControl, null);\n this.locale = this.locale || this._localeId;\n super.ngOnInit();\n }\n /** @hidden @internal */\n ngAfterViewInit() {\n super.ngAfterViewInit();\n this.subscribeToClick();\n this.subscribeToOverlayEvents();\n this.subscribeToDateEditorEvents();\n this.subToIconsClicked(this.clearComponents, () => this.clear());\n this.clearComponents.changes.pipe(takeUntil(this._destroy$))\n .subscribe(() => this.subToIconsClicked(this.clearComponents, () => this.clear()));\n this._dropDownOverlaySettings.excludeFromOutsideClick = [this.inputGroup.element.nativeElement];\n fromEvent(this.inputDirective.nativeElement, 'blur')\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (this.collapsed) {\n this._onTouchedCallback();\n this.updateValidity();\n }\n });\n if (this._ngControl) {\n this._statusChanges$ =\n this._ngControl.statusChanges.subscribe(this.onStatusChanged.bind(this));\n if (this._ngControl.control.validator) {\n this.inputGroup.isRequired = this.required;\n this.cdr.detectChanges();\n }\n }\n }\n /** @hidden @internal */\n ngAfterViewChecked() {\n if (this.labelDirective) {\n this._renderer.setAttribute(this.inputDirective.nativeElement, 'aria-labelledby', this.labelDirective.id);\n }\n }\n /** @hidden @internal */\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this._statusChanges$) {\n this._statusChanges$.unsubscribe();\n }\n if (this._overlayId) {\n this._overlayService.detach(this._overlayId);\n delete this._overlayId;\n }\n }\n /** @hidden @internal */\n getEditElement() {\n return this.inputDirective.nativeElement;\n }\n subscribeToClick() {\n fromEvent(this.getEditElement(), 'click')\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this.isDropdown) {\n this.toggle();\n }\n });\n }\n setDateValue(value) {\n if (isDate(value) && isNaN(value.getTime())) {\n this._dateValue = value;\n return;\n }\n this._dateValue = DateTimeUtil.isValidDate(value) ? value : DateTimeUtil.parseIsoDate(value);\n }\n updateValidity() {\n // B.P. 18 May 2021: IgxDatePicker does not reset its state upon resetForm #9526\n if (this._ngControl && !this.disabled && this.isTouchedOrDirty) {\n if (this.inputGroup.isFocused) {\n this.inputDirective.valid = this._ngControl.valid\n ? IgxInputState.VALID\n : IgxInputState.INVALID;\n }\n else {\n this.inputDirective.valid = this._ngControl.valid\n ? IgxInputState.INITIAL\n : IgxInputState.INVALID;\n }\n }\n else {\n this.inputDirective.valid = IgxInputState.INITIAL;\n }\n }\n get isTouchedOrDirty() {\n return (this._ngControl.control.touched || this._ngControl.control.dirty)\n && (!!this._ngControl.control.validator || !!this._ngControl.control.asyncValidator);\n }\n handleSelection(date) {\n if (this.dateValue && DateTimeUtil.isValidDate(this.dateValue)) {\n date.setHours(this.dateValue.getHours());\n date.setMinutes(this.dateValue.getMinutes());\n date.setSeconds(this.dateValue.getSeconds());\n date.setMilliseconds(this.dateValue.getMilliseconds());\n }\n this.value = date;\n this._calendar.viewDate = date;\n this.close();\n }\n subscribeToDateEditorEvents() {\n this.dateTimeEditor.valueChange.pipe(takeUntil(this._destroy$)).subscribe(val => {\n this.value = val;\n });\n this.dateTimeEditor.validationFailed.pipe(takeUntil(this._destroy$)).subscribe((event) => {\n this.validationFailed.emit({\n owner: this,\n prevValue: event.oldValue,\n currentValue: this.value\n });\n });\n }\n subscribeToOverlayEvents() {\n this._overlayService.opening.pipe(...this._overlaySubFilter).subscribe((e) => {\n const args = { owner: this, event: e.event, cancel: e.cancel };\n this.opening.emit(args);\n e.cancel = args.cancel;\n if (args.cancel) {\n this._overlayService.detach(this._overlayId);\n return;\n }\n this._initializeCalendarContainer(e.componentRef.instance);\n this._collapsed = false;\n });\n this._overlayService.opened.pipe(...this._overlaySubFilter).subscribe(() => {\n var _a, _b, _c, _d, _e, _f, _g;\n this.opened.emit({ owner: this });\n if ((_b = (_a = this._calendar) === null || _a === void 0 ? void 0 : _a.daysView) === null || _b === void 0 ? void 0 : _b.selectedDates) {\n (_d = (_c = this._calendar) === null || _c === void 0 ? void 0 : _c.daysView) === null || _d === void 0 ? void 0 : _d.focusActiveDate();\n return;\n }\n if (this._targetViewDate) {\n this._targetViewDate.setHours(0, 0, 0, 0);\n (_g = (_f = (_e = this._calendar) === null || _e === void 0 ? void 0 : _e.daysView) === null || _f === void 0 ? void 0 : _f.dates.find(d => d.date.date.getTime() === this._targetViewDate.getTime())) === null || _g === void 0 ? void 0 : _g.nativeElement.focus();\n }\n });\n this._overlayService.closing.pipe(...this._overlaySubFilter).subscribe((e) => {\n const args = { owner: this, event: e.event, cancel: e.cancel };\n this.closing.emit(args);\n e.cancel = args.cancel;\n if (args.cancel) {\n return;\n }\n // do not focus the input if clicking outside in dropdown mode\n if (this.getEditElement() && !(args.event && this.isDropdown)) {\n this.inputDirective.focus();\n }\n else {\n this._onTouchedCallback();\n this.updateValidity();\n }\n });\n this._overlayService.closed.pipe(...this._overlaySubFilter).subscribe(() => {\n this.closed.emit({ owner: this });\n this._overlayService.detach(this._overlayId);\n this._collapsed = true;\n this._overlayId = null;\n });\n }\n getMinMaxDates() {\n const minValue = DateTimeUtil.isValidDate(this.minValue) ? this.minValue : DateTimeUtil.parseIsoDate(this.minValue);\n const maxValue = DateTimeUtil.isValidDate(this.maxValue) ? this.maxValue : DateTimeUtil.parseIsoDate(this.maxValue);\n return { minValue, maxValue };\n }\n setDisabledDates() {\n this._calendar.disabledDates = this.disabledDates ? [...this.disabledDates] : [];\n const { minValue, maxValue } = this.getMinMaxDates();\n if (minValue) {\n this._calendar.disabledDates.push({ type: DateRangeType.Before, dateRange: [minValue] });\n }\n if (maxValue) {\n this._calendar.disabledDates.push({ type: DateRangeType.After, dateRange: [maxValue] });\n }\n }\n _initializeCalendarContainer(componentInstance) {\n this._calendar = componentInstance.calendar;\n const isVertical = this.headerOrientation === PickerHeaderOrientation.Vertical;\n this._calendar.hasHeader = !this.isDropdown;\n this._calendar.formatOptions = this.pickerCalendarFormat;\n this._calendar.formatViews = this.pickerFormatViews;\n this._calendar.locale = this.locale;\n this._calendar.vertical = isVertical;\n this._calendar.weekStart = this.weekStart;\n this._calendar.specialDates = this.specialDates;\n this._calendar.headerTemplate = this.headerTemplate;\n this._calendar.subheaderTemplate = this.subheaderTemplate;\n this._calendar.hideOutsideDays = this.hideOutsideDays;\n this._calendar.monthsViewNumber = this.displayMonthsCount;\n this._calendar.showWeekNumbers = this.showWeekNumbers;\n this._calendar.selected.pipe(takeUntil(this._destroy$)).subscribe((ev) => this.handleSelection(ev));\n this.setDisabledDates();\n if (DateTimeUtil.isValidDate(this.dateValue)) {\n // calendar will throw if the picker's value is InvalidDate #9208\n this._calendar.value = this.dateValue;\n }\n this.setCalendarViewDate();\n componentInstance.mode = this.mode;\n componentInstance.vertical = isVertical;\n componentInstance.closeButtonLabel = this.cancelButtonLabel;\n componentInstance.todayButtonLabel = this.todayButtonLabel;\n componentInstance.pickerActions = this.pickerActions;\n componentInstance.calendarClose.pipe(takeUntil(this._destroy$)).subscribe(() => this.close());\n componentInstance.todaySelection.pipe(takeUntil(this._destroy$)).subscribe(() => this.selectToday());\n }\n setCalendarViewDate() {\n const { minValue, maxValue } = this.getMinMaxDates();\n this._dateValue = this.dateValue || new Date();\n if (minValue && DateTimeUtil.lessThanMinValue(this.dateValue, minValue)) {\n this._calendar.viewDate = this._targetViewDate = minValue;\n return;\n }\n if (maxValue && DateTimeUtil.greaterThanMaxValue(this.dateValue, maxValue)) {\n this._calendar.viewDate = this._targetViewDate = maxValue;\n return;\n }\n this._calendar.viewDate = this._targetViewDate = this.dateValue;\n }\n}\nIgxDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDatePickerComponent, deps: [{ token: i0.ElementRef }, { token: LOCALE_ID }, { token: IgxOverlayService }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: PlatformUtil }, { token: i0.ChangeDetectorRef }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDatePickerComponent, selector: \"igx-date-picker\", inputs: { hideOutsideDays: \"hideOutsideDays\", displayMonthsCount: \"displayMonthsCount\", showWeekNumbers: \"showWeekNumbers\", formatter: \"formatter\", headerOrientation: \"headerOrientation\", todayButtonLabel: \"todayButtonLabel\", cancelButtonLabel: \"cancelButtonLabel\", spinLoop: \"spinLoop\", spinDelta: \"spinDelta\", outlet: \"outlet\", id: \"id\", formatViews: \"formatViews\", disabledDates: \"disabledDates\", specialDates: \"specialDates\", calendarFormat: \"calendarFormat\", value: \"value\", minValue: \"minValue\", maxValue: \"maxValue\", resourceStrings: \"resourceStrings\", readOnly: \"readOnly\" }, outputs: { valueChange: \"valueChange\", validationFailed: \"validationFailed\" }, host: { listeners: { \"keydown\": \"onKeyDown($event)\" }, properties: { \"attr.id\": \"this.id\" } }, providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxDatePickerComponent, multi: true },\n { provide: NG_VALIDATORS, useExisting: IgxDatePickerComponent, multi: true }\n ], queries: [{ propertyName: \"label\", first: true, predicate: IgxLabelDirective, descendants: true }, { propertyName: \"headerTemplate\", first: true, predicate: IgxCalendarHeaderTemplateDirective, descendants: true }, { propertyName: \"subheaderTemplate\", first: true, predicate: IgxCalendarSubheaderTemplateDirective, descendants: true }, { propertyName: \"pickerActions\", first: true, predicate: IgxPickerActionsDirective, descendants: true }, { propertyName: \"clearComponents\", predicate: IgxPickerClearComponent }], viewQueries: [{ propertyName: \"dateTimeEditor\", first: true, predicate: IgxDateTimeEditorDirective, descendants: true, static: true }, { propertyName: \"viewContainerRef\", first: true, predicate: IgxInputGroupComponent, descendants: true, read: ViewContainerRef }, { propertyName: \"labelDirective\", first: true, predicate: IgxLabelDirective, descendants: true }, { propertyName: \"inputDirective\", first: true, predicate: IgxInputDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: \"\\n \\n today\\n \\n\\n \\n\\n \\n clear\\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", styles: [\":host{display:block}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"component\", type: IgxInputGroupComponent, selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: IgxInputDirective, selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: IgxPrefixDirective, selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"directive\", type: IgxSuffixDirective, selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }, { kind: \"directive\", type: IgxTextSelectionDirective, selector: \"[igxTextSelection]\", inputs: [\"igxTextSelection\"], exportAs: [\"igxTextSelection\"] }, { kind: \"directive\", type: IgxDateTimeEditorDirective, selector: \"[igxDateTimeEditor]\", inputs: [\"locale\", \"minValue\", \"maxValue\", \"spinLoop\", \"displayFormat\", \"igxDateTimeEditor\", \"value\", \"spinDelta\"], outputs: [\"valueChange\", \"validationFailed\"], exportAs: [\"igxDateTimeEditor\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDatePickerComponent, decorators: [{\n type: Component,\n args: [{ providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxDatePickerComponent, multi: true },\n { provide: NG_VALIDATORS, useExisting: IgxDatePickerComponent, multi: true }\n ], selector: 'igx-date-picker', template: \"\\n \\n today\\n \\n\\n \\n\\n \\n clear\\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", styles: [\":host{display:block}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: IgxOverlayService, decorators: [{\n type: Inject,\n args: [IgxOverlayService]\n }] }, { type: i0.Injector }, { type: i0.Renderer2 }, { type: PlatformUtil }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IGX_INPUT_GROUP_TYPE]\n }] }];\n }, propDecorators: { hideOutsideDays: [{\n type: Input\n }], displayMonthsCount: [{\n type: Input\n }], showWeekNumbers: [{\n type: Input\n }], formatter: [{\n type: Input\n }], headerOrientation: [{\n type: Input\n }], todayButtonLabel: [{\n type: Input\n }], cancelButtonLabel: [{\n type: Input\n }], spinLoop: [{\n type: Input\n }], spinDelta: [{\n type: Input\n }], outlet: [{\n type: Input\n }], id: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.id']\n }], formatViews: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], specialDates: [{\n type: Input\n }], calendarFormat: [{\n type: Input\n }], value: [{\n type: Input\n }], minValue: [{\n type: Input\n }], maxValue: [{\n type: Input\n }], resourceStrings: [{\n type: Input\n }], readOnly: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], validationFailed: [{\n type: Output\n }], clearComponents: [{\n type: ContentChildren,\n args: [IgxPickerClearComponent]\n }], label: [{\n type: ContentChild,\n args: [IgxLabelDirective]\n }], headerTemplate: [{\n type: ContentChild,\n args: [IgxCalendarHeaderTemplateDirective]\n }], dateTimeEditor: [{\n type: ViewChild,\n args: [IgxDateTimeEditorDirective, { static: true }]\n }], viewContainerRef: [{\n type: ViewChild,\n args: [IgxInputGroupComponent, { read: ViewContainerRef }]\n }], labelDirective: [{\n type: ViewChild,\n args: [IgxLabelDirective]\n }], inputDirective: [{\n type: ViewChild,\n args: [IgxInputDirective]\n }], subheaderTemplate: [{\n type: ContentChild,\n args: [IgxCalendarSubheaderTemplateDirective]\n }], pickerActions: [{\n type: ContentChild,\n args: [IgxPickerActionsDirective]\n }], onKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n\n/** @hidden */\nclass IgxDatePickerModule {\n}\nIgxDatePickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDatePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxDatePickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDatePickerModule, declarations: [IgxDatePickerComponent], imports: [FormsModule,\n CommonModule,\n IgxIconModule,\n IgxMaskModule,\n IgxCalendarModule,\n IgxInputGroupModule,\n IgxPickersCommonModule,\n IgxTextSelectionModule,\n IgxDateTimeEditorModule,\n IgxCalendarContainerModule], exports: [IgxDatePickerComponent,\n IgxPickersCommonModule,\n IgxInputGroupModule] });\nIgxDatePickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDatePickerModule, imports: [FormsModule,\n CommonModule,\n IgxIconModule,\n IgxMaskModule,\n IgxCalendarModule,\n IgxInputGroupModule,\n IgxPickersCommonModule,\n IgxTextSelectionModule,\n IgxDateTimeEditorModule,\n IgxCalendarContainerModule, IgxPickersCommonModule,\n IgxInputGroupModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDatePickerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxDatePickerComponent\n ],\n exports: [\n IgxDatePickerComponent,\n IgxPickersCommonModule,\n IgxInputGroupModule\n ],\n imports: [\n FormsModule,\n CommonModule,\n IgxIconModule,\n IgxMaskModule,\n IgxCalendarModule,\n IgxInputGroupModule,\n IgxPickersCommonModule,\n IgxTextSelectionModule,\n IgxDateTimeEditorModule,\n IgxCalendarContainerModule,\n ]\n }]\n }] });\n\n/**\n * @hidden\n */\nclass IgxDialogTitleDirective {\n constructor() {\n this.defaultStyle = true;\n }\n}\nIgxDialogTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDialogTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxDialogTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDialogTitleDirective, selector: \"igx-dialog-title,[igxDialogTitle]\", host: { properties: { \"class.igx-dialog__window-title\": \"this.defaultStyle\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDialogTitleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-dialog-title,[igxDialogTitle]'\n }]\n }], propDecorators: { defaultStyle: [{\n type: HostBinding,\n args: ['class.igx-dialog__window-title']\n }] } });\n/**\n * @hidden\n */\nclass IgxDialogActionsDirective {\n constructor() {\n this.defaultClass = true;\n }\n}\nIgxDialogActionsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDialogActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxDialogActionsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDialogActionsDirective, selector: \"igx-dialog-actions,[igxDialogActions]\", host: { properties: { \"class.igx-dialog__window-actions\": \"this.defaultClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDialogActionsDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-dialog-actions,[igxDialogActions]'\n }]\n }], propDecorators: { defaultClass: [{\n type: HostBinding,\n args: ['class.igx-dialog__window-actions']\n }] } });\n\nlet DIALOG_ID = 0;\n/**\n * **Ignite UI for Angular Dialog Window** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/dialog.html)\n *\n * The Ignite UI Dialog Window presents a dialog window to the user which can simply display messages or display\n * more complicated visuals such as a user sign-in form. It also provides a right and left button\n * which can be used for custom actions.\n *\n * Example:\n * ```html\n * \n * \n *
    \n * \n * \n * \n * \n *
    \n *
    \n * \n * \n * \n * \n *
    \n *
    \n * ```\n */\nclass IgxDialogComponent {\n /**\n * Controls whether the dialog should be shown as modal. Defaults to `true`\n * ```html\n * \n * ```\n */\n get isModal() {\n return this._isModal;\n }\n set isModal(val) {\n this._overlayDefaultSettings.modal = val;\n this._isModal = val;\n }\n /**\n * Controls whether the dialog should close when `Esc` key is pressed. Defaults to `true`\n * ```html\n * \n * ```\n */\n get closeOnEscape() {\n return this._closeOnEscape;\n }\n set closeOnEscape(val) {\n this._overlayDefaultSettings.closeOnEscape = val;\n this._closeOnEscape = val;\n }\n /**\n * An @Input property that allows you to enable the \"close on click outside the dialog\". By default it's disabled.\n * ```html\n * \n * \n * ```\n */\n get closeOnOutsideSelect() {\n return this._closeOnOutsideSelect;\n }\n set closeOnOutsideSelect(val) {\n this._overlayDefaultSettings.closeOnOutsideClick = val;\n this._closeOnOutsideSelect = val;\n }\n /**\n * Get the position and animation settings used by the dialog.\n * ```typescript\n * @ViewChild('alert', { static: true }) public alert: IgxDialogComponent;\n * let currentPosition: PositionSettings = this.alert.positionSettings\n * ```\n */\n get positionSettings() {\n return this._positionSettings;\n }\n /**\n * Set the position and animation settings used by the dialog.\n * ```typescript\n * import { slideInLeft, slideOutRight } from 'igniteui-angular';\n * ...\n * @ViewChild('alert', { static: true }) public alert: IgxDialogComponent;\n * public newPositionSettings: PositionSettings = {\n * openAnimation: useAnimation(slideInTop, { params: { duration: '2000ms' } }),\n * closeAnimation: useAnimation(slideOutBottom, { params: { duration: '2000ms'} }),\n * horizontalDirection: HorizontalAlignment.Left,\n * verticalDirection: VerticalAlignment.Middle,\n * horizontalStartPoint: HorizontalAlignment.Left,\n * verticalStartPoint: VerticalAlignment.Middle,\n * minSize: { height: 100, width: 100 }\n * };\n * this.alert.positionSettings = this.newPositionSettings;\n * ```\n */\n set positionSettings(settings) {\n this._positionSettings = settings;\n this._overlayDefaultSettings.positionStrategy = new GlobalPositionStrategy(this._positionSettings);\n }\n /**\n * @hidden\n */\n get element() {\n return this.elementRef.nativeElement;\n }\n /**\n * Returns the value of state. Possible state values are \"open\" or \"close\".\n * ```typescript\n * @ViewChild(\"MyDialog\")\n * public dialog: IgxDialogComponent;\n * ngAfterViewInit() {\n * let dialogState = this.dialog.state;\n * }\n * ```\n */\n get state() {\n return this.isOpen ? 'open' : 'close';\n }\n /**\n * State of the dialog.\n *\n * ```typescript\n * // get\n * let dialogIsOpen = this.dialog.isOpen;\n * ```\n *\n * ```html\n * \n * \n * ```\n *\n * Two-way data binding.\n * ```html\n * \n * \n * ```\n */\n get isOpen() {\n return !this.toggleRef.collapsed;\n }\n set isOpen(value) {\n if (value !== this.isOpen) {\n this.isOpenChange.emit(value);\n if (value) {\n requestAnimationFrame(() => {\n this.open();\n });\n }\n else {\n this.close();\n }\n }\n }\n get isCollapsed() {\n return this.toggleRef.collapsed;\n }\n /**\n * Returns the value of the role of the dialog. The valid values are `dialog`, `alertdialog`, `alert`.\n * ```typescript\n * @ViewChild(\"MyDialog\")\n * public dialog: IgxDialogComponent;\n * ngAfterViewInit() {\n * let dialogRole = this.dialog.role;\n * }\n * ```\n */\n get role() {\n if (this.leftButtonLabel !== '' && this.rightButtonLabel !== '') {\n return 'dialog';\n }\n else if (this.leftButtonLabel !== '' ||\n this.rightButtonLabel !== '') {\n return 'alertdialog';\n }\n else {\n return 'alert';\n }\n }\n /**\n * Returns the value of the title id.\n * ```typescript\n * @ViewChild(\"MyDialog\")\n * public dialog: IgxDialogComponent;\n * ngAfterViewInit() {\n * let dialogTitle = this.dialog.titleId;\n * }\n * ```\n */\n get titleId() {\n return this._titleId;\n }\n constructor(elementRef, navService) {\n this.elementRef = elementRef;\n this.navService = navService;\n /**\n * An @Input property that sets the value of the `id` attribute. If not provided it will be automatically generated.\n * ```html\n * \n * \n * ```\n */\n this.id = `igx-dialog-${DIALOG_ID++}`;\n /**\n * An @Input property to set whether the Tab key focus is trapped within the dialog when opened.\n * Defaults to `true`.\n * ```html\n * \n * ```\n */\n this.focusTrap = true;\n /**\n * An @Input property controlling the `title` of the dialog.\n * ```html\n * \n * ```\n */\n this.title = '';\n /**\n * An @Input property controlling the `message` of the dialog.\n * ```html\n * \n * ```\n */\n this.message = '';\n /**\n * An @Input property to set the `label` of the left button of the dialog.\n * ```html\n * \n * ```\n */\n this.leftButtonLabel = '';\n /**\n * An @Input property to set the left button `type`. The types are `flat`, `raised` and `fab`.\n * The `flat` type button is a rectangle and doesn't have a shadow.
    \n * The `raised` type button is also a rectangle but has a shadow.
    \n * The `fab` type button is a circle with a shadow.
    \n * The default value is `flat`.\n * ```html\n * \n * ```\n */\n this.leftButtonType = 'flat';\n /**\n * An @Input property to set the left button color. The property accepts all valid CSS color property values.\n * ```html\n * \n * ```\n */\n this.leftButtonColor = '';\n /**\n * An @Input property to set the left button `background-color`. The property accepts all valid CSS color property values.\n * ```html\n * \n * ```\n */\n this.leftButtonBackgroundColor = '';\n /**\n * An @Input property to set the left button `ripple`. The `ripple` animates a click/tap to a component as a series of fading waves.\n * The property accepts all valid CSS color property values.\n * ```html\n * \n * ```\n */\n this.leftButtonRipple = '';\n /**\n * An @Input property to set the `label` of the right button of the dialog.\n * ```html\n * \n * ```\n */\n this.rightButtonLabel = '';\n /**\n * An @Input property to set the right button `type`. The types are `flat`, `raised` and `fab`.\n * The `flat` type button is a rectangle and doesn't have a shadow.
    \n * The `raised` type button is also a rectangle but has a shadow.
    \n * The `fab` type button is a circle with a shadow.
    \n * The default value is `flat`.\n * ```html\n * \n * ```\n */\n this.rightButtonType = 'flat';\n /**\n * An @Input property to set the right button `color`. The property accepts all valid CSS color property values.\n * ```html\n * \n * ```\n */\n this.rightButtonColor = '';\n /**\n * An @Input property to set the right button `background-color`. The property accepts all valid CSS color property values.\n * ```html\n * \n * ```\n */\n this.rightButtonBackgroundColor = '';\n /**\n * An @Input property to set the right button `ripple`.\n * ```html\n * \n * ```\n */\n this.rightButtonRipple = '';\n /**\n * The default `tabindex` attribute for the component\n *\n * @hidden\n */\n this.tabindex = -1;\n /**\n * An event that is emitted before the dialog is opened.\n * ```html\n * \n * \n * ```\n */\n this.opening = new EventEmitter();\n /**\n * An event that is emitted after the dialog is opened.\n * ```html\n * \n * \n * ```\n */\n this.opened = new EventEmitter();\n /**\n * An event that is emitted before the dialog is closed.\n * ```html\n * \n * \n * ```\n */\n this.closing = new EventEmitter();\n /**\n * An event that is emitted after the dialog is closed.\n * ```html\n * \n * \n * ```\n */\n this.closed = new EventEmitter();\n /**\n * An event that is emitted when the left button is clicked.\n * ```html\n * \n * \n * ```\n */\n this.leftButtonSelect = new EventEmitter();\n /**\n * An event that is emitted when the right button is clicked.\n * ```html\n * \n * \n * ```\n */\n this.rightButtonSelect = new EventEmitter();\n /**\n * @hidden\n */\n this.isOpenChange = new EventEmitter();\n this.destroy$ = new Subject();\n this._positionSettings = {\n openAnimation: fadeIn,\n closeAnimation: fadeOut\n };\n this._closeOnOutsideSelect = false;\n this._closeOnEscape = true;\n this._isModal = true;\n this._titleId = IgxDialogComponent.NEXT_ID++ + '_title';\n this._overlayDefaultSettings = {\n positionStrategy: new GlobalPositionStrategy(this._positionSettings),\n scrollStrategy: new NoOpScrollStrategy(),\n modal: this.isModal,\n closeOnEscape: this._closeOnEscape,\n closeOnOutsideClick: this.closeOnOutsideSelect\n };\n }\n ngAfterContentInit() {\n this.toggleRef.closing.pipe(takeUntil(this.destroy$)).subscribe((eventArgs) => this.emitCloseFromDialog(eventArgs));\n this.toggleRef.closed.pipe(takeUntil(this.destroy$)).subscribe((eventArgs) => this.emitClosedFromDialog(eventArgs));\n this.toggleRef.opened.pipe(takeUntil(this.destroy$)).subscribe((eventArgs) => this.emitOpenedFromDialog(eventArgs));\n }\n /**\n * A method that opens the dialog.\n *\n * @memberOf {@link IgxDialogComponent}\n * ```html\n * \n * \n * ```\n */\n open(overlaySettings = this._overlayDefaultSettings) {\n const eventArgs = { dialog: this, event: null, cancel: false };\n this.opening.emit(eventArgs);\n if (!eventArgs.cancel) {\n this.toggleRef.open(overlaySettings);\n this.isOpenChange.emit(true);\n if (!this.leftButtonLabel && !this.rightButtonLabel) {\n this.toggleRef.element.focus();\n }\n }\n }\n /**\n * A method that that closes the dialog.\n *\n * @memberOf {@link IgxDialogComponent}\n * ```html\n * \n * \n * ```\n */\n close() {\n // `closing` will emit from `toggleRef.closing` subscription\n this.toggleRef.close();\n }\n /**\n * A method that opens/closes the dialog.\n *\n * @memberOf {@link IgxDialogComponent}\n * ```html\n * \n * \n * ```\n */\n toggle() {\n if (this.isOpen) {\n this.close();\n }\n else {\n this.open();\n }\n }\n /**\n * @hidden\n */\n onDialogSelected(event) {\n event.stopPropagation();\n if (this.isOpen &&\n this.closeOnOutsideSelect &&\n event.target.classList.contains(IgxDialogComponent.DIALOG_CLASS)) {\n this.close();\n }\n }\n /**\n * @hidden\n */\n onInternalLeftButtonSelect(event) {\n this.leftButtonSelect.emit({ dialog: this, event });\n }\n /**\n * @hidden\n */\n onInternalRightButtonSelect(event) {\n this.rightButtonSelect.emit({ dialog: this, event });\n }\n /**\n * @hidden\n */\n ngOnInit() {\n if (this.navService && this.id) {\n this.navService.add(this.id, this);\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.navService && this.id) {\n this.navService.remove(this.id);\n }\n }\n emitCloseFromDialog(eventArgs) {\n const dialogEventsArgs = { dialog: this, event: eventArgs.event, cancel: eventArgs.cancel };\n this.closing.emit(dialogEventsArgs);\n eventArgs.cancel = dialogEventsArgs.cancel;\n if (!eventArgs.cancel) {\n this.isOpenChange.emit(false);\n }\n }\n emitClosedFromDialog(eventArgs) {\n this.closed.emit({ dialog: this, event: eventArgs.event });\n }\n emitOpenedFromDialog(eventArgs) {\n this.opened.emit({ dialog: this, event: eventArgs.event });\n }\n}\nIgxDialogComponent.NEXT_ID = 1;\nIgxDialogComponent.DIALOG_CLASS = 'igx-dialog';\nIgxDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDialogComponent, deps: [{ token: i0.ElementRef }, { token: IgxNavigationService, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDialogComponent, selector: \"igx-dialog\", inputs: { id: \"id\", isModal: \"isModal\", closeOnEscape: \"closeOnEscape\", focusTrap: \"focusTrap\", title: \"title\", message: \"message\", leftButtonLabel: \"leftButtonLabel\", leftButtonType: \"leftButtonType\", leftButtonColor: \"leftButtonColor\", leftButtonBackgroundColor: \"leftButtonBackgroundColor\", leftButtonRipple: \"leftButtonRipple\", rightButtonLabel: \"rightButtonLabel\", rightButtonType: \"rightButtonType\", rightButtonColor: \"rightButtonColor\", rightButtonBackgroundColor: \"rightButtonBackgroundColor\", rightButtonRipple: \"rightButtonRipple\", closeOnOutsideSelect: \"closeOnOutsideSelect\", positionSettings: \"positionSettings\", isOpen: \"isOpen\", role: \"role\", titleId: \"titleId\" }, outputs: { opening: \"opening\", opened: \"opened\", closing: \"closing\", closed: \"closed\", leftButtonSelect: \"leftButtonSelect\", rightButtonSelect: \"rightButtonSelect\", isOpenChange: \"isOpenChange\" }, host: { properties: { \"attr.id\": \"this.id\", \"attr.tabindex\": \"this.tabindex\", \"class.igx-dialog--hidden\": \"this.isCollapsed\" } }, viewQueries: [{ propertyName: \"toggleRef\", first: true, predicate: IgxToggleDirective, descendants: true, static: true }], ngImport: i0, template: \"
    \\n
    \\n\\n
    \\n {{ title }}\\n
    \\n \\n\\n
    \\n {{ message }}\\n \\n
    \\n\\n
    \\n \\n \\n
    \\n \\n\\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxToggleDirective, selector: \"[igxToggle]\", inputs: [\"id\"], outputs: [\"opened\", \"opening\", \"closed\", \"closing\", \"appended\"], exportAs: [\"toggle\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }, { kind: \"directive\", type: IgxFocusDirective, selector: \"[igxFocus]\", inputs: [\"igxFocus\"], exportAs: [\"igxFocus\"] }, { kind: \"directive\", type: IgxFocusTrapDirective, selector: \"[igxFocusTrap]\", inputs: [\"igxFocusTrap\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDialogComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-dialog', template: \"
    \\n
    \\n\\n
    \\n {{ title }}\\n
    \\n \\n\\n
    \\n {{ message }}\\n \\n
    \\n\\n
    \\n \\n \\n
    \\n \\n\\n
    \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: IgxNavigationService, decorators: [{\n type: Optional\n }] }];\n }, propDecorators: { toggleRef: [{\n type: ViewChild,\n args: [IgxToggleDirective, { static: true }]\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], isModal: [{\n type: Input\n }], closeOnEscape: [{\n type: Input\n }], focusTrap: [{\n type: Input\n }], title: [{\n type: Input\n }], message: [{\n type: Input\n }], leftButtonLabel: [{\n type: Input\n }], leftButtonType: [{\n type: Input\n }], leftButtonColor: [{\n type: Input\n }], leftButtonBackgroundColor: [{\n type: Input\n }], leftButtonRipple: [{\n type: Input\n }], rightButtonLabel: [{\n type: Input\n }], rightButtonType: [{\n type: Input\n }], rightButtonColor: [{\n type: Input\n }], rightButtonBackgroundColor: [{\n type: Input\n }], rightButtonRipple: [{\n type: Input\n }], closeOnOutsideSelect: [{\n type: Input\n }], positionSettings: [{\n type: Input\n }], tabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], opening: [{\n type: Output\n }], opened: [{\n type: Output\n }], closing: [{\n type: Output\n }], closed: [{\n type: Output\n }], leftButtonSelect: [{\n type: Output\n }], rightButtonSelect: [{\n type: Output\n }], isOpenChange: [{\n type: Output\n }], isOpen: [{\n type: Input\n }], isCollapsed: [{\n type: HostBinding,\n args: ['class.igx-dialog--hidden']\n }], role: [{\n type: Input\n }], titleId: [{\n type: Input\n }] } });\n/**\n * @hidden\n */\nclass IgxDialogModule {\n}\nIgxDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDialogModule, declarations: [IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective], imports: [CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule, IgxFocusTrapModule], exports: [IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective] });\nIgxDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDialogModule, imports: [CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule, IgxFocusTrapModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDialogModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective],\n exports: [IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective],\n imports: [CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule, IgxFocusTrapModule]\n }]\n }] });\n\nclass BaseFilteringComponent {\n constructor(cdr, element, platform) {\n this.cdr = cdr;\n this.element = element;\n this.platform = platform;\n }\n}\nBaseFilteringComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: BaseFilteringComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive });\nBaseFilteringComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: BaseFilteringComponent, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: BaseFilteringComponent, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: PlatformUtil }]; } });\n\n/**\n * A component used for presenting Excel style clear filters UI.\n */\nclass IgxExcelStyleClearFiltersComponent {\n constructor(esf, platform) {\n this.esf = esf;\n this.platform = platform;\n }\n /**\n * @hidden @internal\n */\n clearFilterClass() {\n if (this.esf.column.filteringExpressionsTree) {\n return 'igx-excel-filter__actions-clear';\n }\n return 'igx-excel-filter__actions-clear--disabled';\n }\n /**\n * @hidden @internal\n */\n clearFilter() {\n this.esf.grid.filteringService.clearFilter(this.esf.column.field);\n this.selectAllFilterItems();\n }\n /**\n * @hidden @internal\n */\n onClearFilterKeyDown(eventArgs) {\n if (eventArgs.key === this.platform.KEYMAP.ENTER) {\n this.clearFilter();\n }\n }\n selectAllFilterItems() {\n this.esf.listData.forEach(filterListItem => {\n filterListItem.isSelected = true;\n filterListItem.indeterminate = false;\n });\n this.esf.detectChanges();\n }\n}\nIgxExcelStyleClearFiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleClearFiltersComponent, deps: [{ token: BaseFilteringComponent }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nIgxExcelStyleClearFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleClearFiltersComponent, selector: \"igx-excel-style-clear-filters\", ngImport: i0, template: \"
    \\n {{ esf.grid.resourceStrings.igx_grid_excel_filter_clear }}\\n clear\\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleClearFiltersComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-excel-style-clear-filters', template: \"
    \\n {{ esf.grid.resourceStrings.igx_grid_excel_filter_clear }}\\n clear\\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: BaseFilteringComponent }, { type: PlatformUtil }]; } });\n\nclass IgxSelectItemComponent extends IgxDropDownItemComponent {\n /**\n * An @Input property that gets/sets the item's text to be displayed in the select component's input when the item is selected.\n *\n * ```typescript\n * //get\n * let mySelectedItem = this.dropDown.selectedItem;\n * let selectedItemText = mySelectedItem.text;\n * ```\n *\n * ```html\n * // set\n * \n * ```\n */\n get text() {\n return this._text;\n }\n set text(text) {\n this._text = text;\n }\n /** @hidden @internal */\n get itemText() {\n if (this._text !== undefined) {\n return this._text;\n }\n // If text @Input is undefined, try extract a meaningful item text out of the item template\n return this.elementRef.nativeElement.textContent.trim();\n }\n /**\n * Sets/Gets if the item is the currently selected one in the select\n *\n * ```typescript\n * let mySelectedItem = this.select.selectedItem;\n * let isMyItemSelected = mySelectedItem.selected; // true\n * ```\n */\n get selected() {\n return !this.isHeader && !this.disabled && this.selection.is_item_selected(this.dropDown.id, this);\n }\n set selected(value) {\n if (value && !this.isHeader && !this.disabled) {\n this.dropDown.selectItem(this);\n }\n }\n}\nIgxSelectItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxSelectItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSelectItemComponent, selector: \"igx-select-item\", inputs: { text: \"text\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectItemComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'igx-select-item',\n template: ''\n }]\n }], propDecorators: { text: [{\n type: Input\n }] } });\n\n/** @hidden @internal */\nlet SelectPositioningStrategy = class SelectPositioningStrategy extends BaseFitPositionStrategy {\n constructor(select, settings, platform) {\n super();\n this.select = select;\n this.platform = platform;\n this._selectDefaultSettings = {\n horizontalDirection: HorizontalAlignment.Right,\n verticalDirection: VerticalAlignment.Bottom,\n horizontalStartPoint: HorizontalAlignment.Left,\n verticalStartPoint: VerticalAlignment.Top,\n openAnimation: fadeIn,\n closeAnimation: fadeOut\n };\n // Global variables required for cases of !initialCall (page scroll/overlay repositionAll)\n this.global_yOffset = 0;\n this.global_xOffset = 0;\n this.global_styles = {};\n this.settings = Object.assign({}, this._selectDefaultSettings, settings);\n }\n /**\n * Position the element based on the PositionStrategy implementing this interface.\n *\n * @param contentElement The HTML element to be positioned\n * @param size Size of the element\n * @param document reference to the Document object\n * @param initialCall should be true if this is the initial call to the method\n * @param target attaching target for the component to show\n * ```typescript\n * settings.positionStrategy.position(content, size, document, true);\n * ```\n */\n position(contentElement, size, document, initialCall, target) {\n const targetElement = target || this.settings.target;\n const rects = super.calculateElementRectangles(contentElement, targetElement);\n // selectFit obj, to be used for both cases of initialCall and !initialCall(page scroll/overlay repositionAll)\n const selectFit = {\n verticalOffset: this.global_yOffset,\n horizontalOffset: this.global_xOffset,\n targetRect: rects.targetRect,\n contentElementRect: rects.elementRect,\n styles: this.global_styles,\n scrollContainer: this.select.scrollContainer,\n scrollContainerRect: this.select.scrollContainer.getBoundingClientRect()\n };\n if (initialCall) {\n this.select.scrollContainer.scrollTop = 0;\n // Fill in the required selectFit object properties.\n selectFit.viewPortRect = Util.getViewportRect(document);\n selectFit.itemElement = this.getInteractionItemElement();\n selectFit.itemRect = selectFit.itemElement.getBoundingClientRect();\n // Calculate input and selected item elements style related variables\n selectFit.styles = this.calculateStyles(selectFit, targetElement);\n selectFit.scrollAmount = this.calculateScrollAmount(selectFit);\n // Calculate how much to offset the overlay container.\n this.calculateYoffset(selectFit);\n this.calculateXoffset(selectFit);\n super.updateViewPortFit(selectFit);\n // container does not fit in viewPort and is out on Top or Bottom\n if (selectFit.fitVertical.back < 0 || selectFit.fitVertical.forward < 0) {\n this.fitInViewport(contentElement, selectFit);\n }\n // Calculate scrollTop independently of the dropdown, as we cover all `igsSelect` specific positioning and\n // scrolling to selected item scenarios here.\n this.select.scrollContainer.scrollTop = selectFit.scrollAmount;\n }\n this.setStyles(contentElement, selectFit);\n }\n /**\n * Obtain the selected item if there is such one or otherwise use the first one\n */\n getInteractionItemElement() {\n let itemElement;\n if (this.select.selectedItem) {\n itemElement = this.select.selectedItem.element.nativeElement;\n }\n else {\n itemElement = this.select.getFirstItemElement();\n }\n return itemElement;\n }\n /**\n * Position the items outer container so selected item text is positioned over input text and if header\n * And/OR footer - both header/footer are visible\n *\n * @param selectFit selectFit to use for computation.\n */\n fitInViewport(contentElement, selectFit) {\n const footer = selectFit.scrollContainerRect.bottom - selectFit.contentElementRect.bottom;\n const header = selectFit.scrollContainerRect.top - selectFit.contentElementRect.top;\n const lastItemFitSize = selectFit.targetRect.bottom + selectFit.styles.itemTextToInputTextDiff - footer;\n const firstItemFitSize = selectFit.targetRect.top - selectFit.styles.itemTextToInputTextDiff - header;\n // out of viewPort on Top\n if (selectFit.fitVertical.back < 0) {\n const possibleScrollAmount = selectFit.scrollContainer.scrollHeight -\n selectFit.scrollContainerRect.height - selectFit.scrollAmount;\n if (possibleScrollAmount + selectFit.fitVertical.back > 0 && firstItemFitSize > selectFit.viewPortRect.top) {\n selectFit.scrollAmount -= selectFit.fitVertical.back;\n selectFit.verticalOffset -= selectFit.fitVertical.back;\n this.global_yOffset = selectFit.verticalOffset;\n }\n else {\n selectFit.verticalOffset = 0;\n this.global_yOffset = 0;\n }\n // out of viewPort on Bottom\n }\n else if (selectFit.fitVertical.forward < 0) {\n if (selectFit.scrollAmount + selectFit.fitVertical.forward > 0 && lastItemFitSize < selectFit.viewPortRect.bottom) {\n selectFit.scrollAmount += selectFit.fitVertical.forward;\n selectFit.verticalOffset += selectFit.fitVertical.forward;\n this.global_yOffset = selectFit.verticalOffset;\n }\n else {\n selectFit.verticalOffset = -selectFit.contentElementRect.height + selectFit.targetRect.height;\n this.global_yOffset = selectFit.verticalOffset;\n }\n }\n }\n /**\n * Sets element's style which effectively positions the provided element\n *\n * @param element Element to position\n * @param selectFit selectFit to use for computation.\n * @param initialCall should be true if this is the initial call to the position method calling setStyles\n */\n setStyles(contentElement, selectFit) {\n super.setStyle(contentElement, selectFit.targetRect, selectFit.contentElementRect, selectFit);\n contentElement.style.width = `${selectFit.styles.contentElementNewWidth}px`; // manage container based on paddings?\n this.global_styles.contentElementNewWidth = selectFit.styles.contentElementNewWidth;\n }\n /**\n * Calculate selected item scroll position.\n */\n calculateScrollAmount(selectFit) {\n const itemElementRect = selectFit.itemRect;\n const scrollContainer = selectFit.scrollContainer;\n const scrollContainerRect = selectFit.scrollContainerRect;\n const scrollDelta = scrollContainerRect.top - itemElementRect.top;\n let scrollPosition = scrollContainer.scrollTop - scrollDelta;\n const dropDownHeight = scrollContainer.clientHeight;\n scrollPosition -= dropDownHeight / 2;\n scrollPosition += itemElementRect.height / 2;\n return Math.round(Math.min(Math.max(0, scrollPosition), scrollContainer.scrollHeight - scrollContainerRect.height));\n }\n /**\n * Calculate the necessary input and selected item styles to be used for positioning item text over input text.\n * Calculate & Set default items container width.\n *\n * @param selectFit selectFit to use for computation.\n */\n calculateStyles(selectFit, target) {\n const styles = {};\n const inputElementStyles = window.getComputedStyle(target);\n const itemElementStyles = window.getComputedStyle(selectFit.itemElement);\n const numericInputFontSize = parseFloat(inputElementStyles.fontSize);\n const numericInputPaddingTop = parseFloat(inputElementStyles.paddingTop);\n const numericInputPaddingBottom = parseFloat(inputElementStyles.paddingBottom);\n const numericItemFontSize = parseFloat(itemElementStyles.fontSize);\n const inputTextToInputTop = ((selectFit.targetRect.bottom - numericInputPaddingBottom)\n - (selectFit.targetRect.top + numericInputPaddingTop) - numericInputFontSize) / 2;\n const itemTextToItemTop = (selectFit.itemRect.height - numericItemFontSize) / 2;\n styles.itemTextToInputTextDiff = Math.round(itemTextToItemTop - inputTextToInputTop - numericInputPaddingTop);\n const numericLeftPadding = parseFloat(itemElementStyles.paddingLeft);\n const numericTextIndent = parseFloat(itemElementStyles.textIndent);\n styles.itemTextPadding = numericLeftPadding;\n styles.itemTextIndent = numericTextIndent;\n // 24 is the input's toggle ddl icon width\n styles.contentElementNewWidth = selectFit.targetRect.width + 24 + numericLeftPadding * 2;\n return styles;\n }\n /**\n * Calculate how much to offset the overlay container for Y-axis.\n */\n calculateYoffset(selectFit) {\n selectFit.verticalOffset = -(selectFit.itemRect.top - selectFit.contentElementRect.top +\n selectFit.styles.itemTextToInputTextDiff - selectFit.scrollAmount);\n this.global_yOffset = selectFit.verticalOffset;\n }\n /**\n * Calculate how much to offset the overlay container for X-axis.\n */\n calculateXoffset(selectFit) {\n selectFit.horizontalOffset = selectFit.styles.itemTextIndent - selectFit.styles.itemTextPadding;\n this.global_xOffset = selectFit.horizontalOffset;\n }\n};\nSelectPositioningStrategy = __decorate([\n __param(2, Optional())\n], SelectPositioningStrategy);\n\n/** @hidden @internal */\nclass IgxSelectItemNavigationDirective extends IgxDropDownItemNavigationDirective {\n get target() {\n return this._target;\n }\n set target(target) {\n this._target = target ? target : this.dropdown;\n }\n constructor() {\n super(null);\n this._target = null;\n /* eslint-disable @typescript-eslint/member-ordering */\n this.inputStream = '';\n this.clearStream$ = Subscription.EMPTY;\n }\n /** Captures keydown events and calls the appropriate handlers on the target component */\n handleKeyDown(event) {\n if (!event) {\n return;\n }\n const key = event.key.toLowerCase();\n if (event.altKey && (key === 'arrowdown' || key === 'arrowup' || key === 'down' || key === 'up')) {\n this.target.toggle();\n return;\n }\n if (this.target.collapsed) {\n switch (key) {\n case 'space':\n case 'spacebar':\n case ' ':\n case 'enter':\n event.preventDefault();\n this.target.open();\n return;\n case 'arrowdown':\n case 'down':\n this.target.navigateNext();\n this.target.selectItem(this.target.focusedItem);\n event.preventDefault();\n return;\n case 'arrowup':\n case 'up':\n this.target.navigatePrev();\n this.target.selectItem(this.target.focusedItem);\n event.preventDefault();\n return;\n default:\n break;\n }\n }\n else if (key === 'tab' || event.shiftKey && key === 'tab') {\n this.target.close();\n }\n super.handleKeyDown(event);\n this.captureKey(event);\n }\n captureKey(event) {\n // relying only on key, available on all major browsers:\n // https://caniuse.com/#feat=keyboardevent-key (IE/Edge quirk doesn't affect letter typing)\n if (!event || !event.key || event.key.length > 1 || event.key === ' ' || event.key === 'spacebar') {\n // ignore longer keys ('Alt', 'ArrowDown', etc) AND spacebar (used of open/close)\n return;\n }\n this.clearStream$.unsubscribe();\n this.clearStream$ = timer(500).subscribe(() => {\n this.inputStream = '';\n });\n this.inputStream += event.key;\n const focusedItem = this.target.focusedItem;\n // select the item\n if (focusedItem && this.inputStream.length > 1 && focusedItem.itemText.toLowerCase().startsWith(this.inputStream.toLowerCase())) {\n return;\n }\n this.activateItemByText(this.inputStream);\n }\n activateItemByText(text) {\n const items = this.target.items;\n // ^ this is focused OR selected if the dd is closed\n let nextItem = this.findNextItem(items, text);\n // If there is no such an item starting with the current text input stream AND the last Char in the input stream\n // is the same as the first one, find next item starting with the same first Char.\n // Covers cases of holding down the same key Ex: \"pppppp\" that iterates trough list items starting with \"p\".\n if (!nextItem && text.charAt(0) === text.charAt(text.length - 1)) {\n text = text.slice(0, 1);\n nextItem = this.findNextItem(items, text);\n }\n // If there is no other item to be found, do not change the active item.\n if (!nextItem) {\n return;\n }\n if (this.target.collapsed) {\n this.target.selectItem(nextItem);\n }\n this.target.navigateItem(items.indexOf(nextItem));\n }\n ngOnDestroy() {\n this.clearStream$.unsubscribe();\n }\n findNextItem(items, text) {\n const activeItemIndex = items.indexOf(this.target.focusedItem) || 0;\n // Match next item in ddl items and wrap around if needed\n return items.slice(activeItemIndex + 1).find(x => !x.disabled && (x.itemText.toLowerCase().startsWith(text.toLowerCase()))) ||\n items.slice(0, activeItemIndex).find(x => !x.disabled && (x.itemText.toLowerCase().startsWith(text.toLowerCase())));\n }\n}\nIgxSelectItemNavigationDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectItemNavigationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxSelectItemNavigationDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSelectItemNavigationDirective, selector: \"[igxSelectItemNavigation]\", inputs: { target: [\"igxSelectItemNavigation\", \"target\"] }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectItemNavigationDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxSelectItemNavigation]'\n }]\n }], ctorParameters: function () { return []; }, propDecorators: { target: [{\n type: Input,\n args: ['igxSelectItemNavigation']\n }] } });\n\n/** @hidden @internal */\nclass IgxSelectToggleIconDirective {\n}\nIgxSelectToggleIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectToggleIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxSelectToggleIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSelectToggleIconDirective, selector: \"[igxSelectToggleIcon]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectToggleIconDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxSelectToggleIcon]'\n }]\n }] });\n/** @hidden @internal */\nclass IgxSelectHeaderDirective {\n}\nIgxSelectHeaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectHeaderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxSelectHeaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSelectHeaderDirective, selector: \"[igxSelectHeader]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectHeaderDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxSelectHeader]'\n }]\n }] });\n/** @hidden @internal */\nclass IgxSelectFooterDirective {\n}\nIgxSelectFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxSelectFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSelectFooterDirective, selector: \"[igxSelectFooter]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectFooterDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxSelectFooter]'\n }]\n }] });\n/**\n * **Ignite UI for Angular Select** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/select)\n *\n * The `igxSelect` provides an input with dropdown list allowing selection of a single item.\n *\n * Example:\n * ```html\n * \n * \n * \n * {{ item.field }}\n * \n * \n * ```\n */\nclass IgxSelectComponent extends IgxDropDownComponent {\n /**\n * An @Input property that gets/sets the component value.\n *\n * ```typescript\n * // get\n * let selectValue = this.select.value;\n * ```\n *\n * ```typescript\n * // set\n * this.select.value = 'London';\n * ```\n * ```html\n * \n * ```\n */\n get value() {\n return this._value;\n }\n set value(v) {\n if (this._value === v) {\n return;\n }\n this._value = v;\n this.setSelection(this.items.find(x => x.value === this.value));\n }\n /**\n * An @Input property that sets how the select will be styled.\n * The allowed values are `line`, `box` and `border`. The input-group default is `line`.\n * ```html\n * \n * ```\n */\n get type() {\n return this._type || this._inputGroupType || 'line';\n }\n set type(val) {\n this._type = val;\n }\n /** @hidden @internal */\n get selectionValue() {\n const selectedItem = this.selectedItem;\n return selectedItem ? selectedItem.itemText : '';\n }\n /** @hidden @internal */\n get selectedItem() {\n return this.selection.first_item(this.id);\n }\n constructor(elementRef, cdr, selection, overlayService, _displayDensityOptions, _inputGroupType, _injector) {\n super(elementRef, cdr, selection, _displayDensityOptions);\n this.overlayService = overlayService;\n this._inputGroupType = _inputGroupType;\n this._injector = _injector;\n /**\n * An @Input property that disables the `IgxSelectComponent`.\n * ```html\n * \n * ```\n */\n this.disabled = false;\n /** @hidden @internal */\n this.maxHeight = '256px';\n /**\n * Emitted before the dropdown is opened\n *\n * ```html\n * \n * ```\n */\n this.opening = new EventEmitter();\n /**\n * Emitted after the dropdown is opened\n *\n * ```html\n * \n * ```\n */\n this.opened = new EventEmitter();\n /**\n * Emitted before the dropdown is closed\n *\n * ```html\n * \n * ```\n */\n this.closing = new EventEmitter();\n /**\n * Emitted after the dropdown is closed\n *\n * ```html\n * \n * ```\n */\n this.closed = new EventEmitter();\n /**\n * The custom template, if any, that should be used when rendering the select TOGGLE(open/close) button\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.select.toggleIconTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n * {{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}\n * \n * \n * ```\n */\n this.toggleIconTemplate = null;\n /**\n * The custom template, if any, that should be used when rendering the HEADER for the select items list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.select.headerTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n *
    \n * This is a custom header\n *
    \n *
    \n *
    \n * ```\n */\n this.headerTemplate = null;\n /**\n * The custom template, if any, that should be used when rendering the FOOTER for the select items list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef = myComponent.customTemplate;\n * myComponent.select.footerTemplate = myCustomTemplate;\n * ```\n * ```html\n * \n * \n * ...\n * \n *
    \n * This is a custom footer\n *
    \n *
    \n *
    \n * ```\n */\n this.footerTemplate = null;\n /** @hidden @internal do not use the drop-down container class */\n this.cssClass = false;\n /** @hidden @internal */\n this.allowItemsFocus = false;\n this.ngControl = null;\n this._type = null;\n this._onChangeCallback = noop;\n this._onTouchedCallback = noop;\n //#region ControlValueAccessor\n /** @hidden @internal */\n this.writeValue = (value) => {\n this.value = value;\n };\n }\n /** @hidden @internal */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /** @hidden @internal */\n registerOnTouched(fn) {\n this._onTouchedCallback = fn;\n }\n /** @hidden @internal */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n //#endregion\n /** @hidden @internal */\n getEditElement() {\n return this.input.nativeElement;\n }\n /** @hidden @internal */\n selectItem(newSelection, event) {\n var _a;\n const oldSelection = (_a = this.selectedItem) !== null && _a !== void 0 ? _a : {};\n if (newSelection === null || newSelection.disabled || newSelection.isHeader) {\n return;\n }\n if (newSelection === oldSelection) {\n this.toggleDirective.close();\n return;\n }\n const args = { oldSelection, newSelection, cancel: false, owner: this };\n this.selectionChanging.emit(args);\n if (args.cancel) {\n return;\n }\n this.setSelection(newSelection);\n this._value = newSelection.value;\n if (event) {\n this.toggleDirective.close();\n }\n this.cdr.detectChanges();\n this._onChangeCallback(this.value);\n }\n /** @hidden @internal */\n getFirstItemElement() {\n return this.children.first.element.nativeElement;\n }\n /**\n * Opens the select\n *\n * ```typescript\n * this.select.open();\n * ```\n */\n open(overlaySettings) {\n if (this.disabled || this.items.length === 0) {\n return;\n }\n if (!this.selectedItem) {\n this.navigateFirst();\n }\n super.open(Object.assign({}, this._overlayDefaults, this.overlaySettings, overlaySettings));\n }\n inputGroupClick(event, overlaySettings) {\n const targetElement = event.target;\n if (this.hintElement && targetElement.contains(this.hintElement.nativeElement)) {\n return;\n }\n this.toggle(Object.assign({}, this._overlayDefaults, this.overlaySettings, overlaySettings));\n }\n /** @hidden @internal */\n ngAfterContentInit() {\n this._overlayDefaults = {\n target: this.getEditElement(),\n modal: false,\n positionStrategy: new SelectPositioningStrategy(this),\n scrollStrategy: new AbsoluteScrollStrategy(),\n excludeFromOutsideClick: [this.inputGroup.element.nativeElement]\n };\n const changes$ = this.children.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.setSelection(this.items.find(x => x.value === this.value));\n this.cdr.detectChanges();\n });\n Promise.resolve().then(() => {\n if (!changes$.closed) {\n this.children.notifyOnChanges();\n }\n });\n }\n /**\n * Event handlers\n *\n * @hidden @internal\n */\n handleOpening(e) {\n const args = { owner: this, event: e.event, cancel: e.cancel };\n this.opening.emit(args);\n e.cancel = args.cancel;\n if (args.cancel) {\n return;\n }\n }\n /** @hidden @internal */\n onToggleContentAppended(event) {\n var _a;\n const info = this.overlayService.getOverlayById(event.id);\n if (((_a = info === null || info === void 0 ? void 0 : info.settings) === null || _a === void 0 ? void 0 : _a.positionStrategy) instanceof SelectPositioningStrategy) {\n return;\n }\n super.onToggleContentAppended(event);\n }\n /** @hidden @internal */\n handleOpened() {\n this.updateItemFocus();\n this.opened.emit({ owner: this });\n }\n /** @hidden @internal */\n handleClosing(e) {\n const args = { owner: this, event: e.event, cancel: e.cancel };\n this.closing.emit(args);\n e.cancel = args.cancel;\n }\n /** @hidden @internal */\n handleClosed() {\n this.focusItem(false);\n this.closed.emit({ owner: this });\n }\n /** @hidden @internal */\n onBlur() {\n this._onTouchedCallback();\n if (this.ngControl && this.ngControl.invalid) {\n this.input.valid = IgxInputState.INVALID;\n }\n else {\n this.input.valid = IgxInputState.INITIAL;\n }\n }\n /** @hidden @internal */\n onFocus() {\n this._onTouchedCallback();\n }\n /**\n * @hidden @internal\n */\n ngOnInit() {\n this.ngControl = this._injector.get(NgControl, null);\n super.ngOnInit();\n }\n /**\n * @hidden @internal\n */\n ngAfterViewInit() {\n super.ngAfterViewInit();\n if (this.ngControl) {\n this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged.bind(this));\n this.manageRequiredAsterisk();\n }\n this.cdr.detectChanges();\n }\n /** @hidden @internal */\n ngAfterContentChecked() {\n var _a, _b;\n if (this.inputGroup && ((_a = this.prefixes) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n this.inputGroup.prefixes = this.prefixes;\n }\n if (this.inputGroup && ((_b = this.suffixes) === null || _b === void 0 ? void 0 : _b.length) > 0) {\n this.inputGroup.suffixes = this.suffixes;\n }\n }\n /**\n * @hidden @internal\n */\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n this.selection.clear(this.id);\n }\n /**\n * @hidden @internal\n * Prevent input blur - closing the items container on Header/Footer Template click.\n */\n mousedownHandler(event) {\n event.preventDefault();\n }\n onStatusChanged() {\n if ((this.ngControl.control.touched || this.ngControl.control.dirty) &&\n (this.ngControl.control.validator || this.ngControl.control.asyncValidator)) {\n if (this.inputGroup.isFocused) {\n this.input.valid = this.ngControl.invalid ? IgxInputState.INVALID : IgxInputState.VALID;\n }\n else {\n this.input.valid = this.ngControl.invalid ? IgxInputState.INVALID : IgxInputState.INITIAL;\n }\n }\n else {\n // B.P. 18 May 2021: IgxDatePicker does not reset its state upon resetForm #9526\n this.input.valid = IgxInputState.INITIAL;\n }\n this.manageRequiredAsterisk();\n }\n navigate(direction, currentIndex) {\n if (this.collapsed && this.selectedItem) {\n this.navigateItem(this.selectedItem.itemIndex);\n }\n super.navigate(direction, currentIndex);\n }\n manageRequiredAsterisk() {\n const hasRequiredHTMLAttribute = this.elementRef.nativeElement.hasAttribute('required');\n if (this.ngControl && this.ngControl.control.validator) {\n // Run the validation with empty object to check if required is enabled.\n const error = this.ngControl.control.validator({});\n this.inputGroup.isRequired = error && error.required;\n this.cdr.markForCheck();\n // If validator is dynamically cleared and no required HTML attribute is set,\n // reset label's required class(asterisk) and IgxInputState #6896\n }\n else if (this.inputGroup.isRequired && this.ngControl && !this.ngControl.control.validator && !hasRequiredHTMLAttribute) {\n this.input.valid = IgxInputState.INITIAL;\n this.inputGroup.isRequired = false;\n this.cdr.markForCheck();\n }\n }\n setSelection(item) {\n if (item && item.value !== undefined && item.value !== null) {\n this.selection.set(this.id, new Set([item]));\n }\n else {\n this.selection.clear(this.id);\n }\n }\n}\nIgxSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxSelectionAPIService }, { token: IgxOverlayService }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });\nIgxSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSelectComponent, selector: \"igx-select\", inputs: { placeholder: \"placeholder\", disabled: \"disabled\", overlaySettings: \"overlaySettings\", value: \"value\", type: \"type\" }, outputs: { opening: \"opening\", opened: \"opened\", closing: \"closing\", closed: \"closed\" }, host: { properties: { \"style.maxHeight\": \"this.maxHeight\" } }, providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxSelectComponent, multi: true },\n { provide: IGX_DROPDOWN_BASE, useExisting: IgxSelectComponent }\n ], queries: [{ propertyName: \"label\", first: true, predicate: i0.forwardRef(function () { return IgxLabelDirective; }), descendants: true, static: true }, { propertyName: \"toggleIconTemplate\", first: true, predicate: IgxSelectToggleIconDirective, descendants: true, read: TemplateRef }, { propertyName: \"headerTemplate\", first: true, predicate: IgxSelectHeaderDirective, descendants: true, read: TemplateRef }, { propertyName: \"footerTemplate\", first: true, predicate: IgxSelectFooterDirective, descendants: true, read: TemplateRef }, { propertyName: \"hintElement\", first: true, predicate: IgxHintDirective, descendants: true, read: ElementRef }, { propertyName: \"children\", predicate: i0.forwardRef(function () { return IgxSelectItemComponent; }), descendants: true }, { propertyName: \"prefixes\", predicate: IgxPrefixDirective, descendants: true }, { propertyName: \"suffixes\", predicate: IgxSuffixDirective, descendants: true }], viewQueries: [{ propertyName: \"inputGroup\", first: true, predicate: [\"inputGroup\"], descendants: true, read: IgxInputGroupComponent, static: true }, { propertyName: \"input\", first: true, predicate: [\"input\"], descendants: true, read: IgxInputDirective, static: true }], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ inputGroup.theme === 'material' ? collapsed ? 'expand_more' : 'expand_less' : collapsed ? 'arrow_drop_down' : 'arrow_drop_up' }}\\n \\n \\n \\n \\n \\n\\n
    \\n\\n
    \\n \\n
    \\n\\n \\n
    \\n \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\", styles: [\":host{display:block}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"component\", type: IgxInputGroupComponent, selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: IgxInputDirective, selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: IgxSuffixDirective, selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }, { kind: \"directive\", type: IgxToggleDirective, selector: \"[igxToggle]\", inputs: [\"id\"], outputs: [\"opened\", \"opening\", \"closed\", \"closing\", \"appended\"], exportAs: [\"toggle\"] }, { kind: \"directive\", type: IgxSelectItemNavigationDirective, selector: \"[igxSelectItemNavigation]\", inputs: [\"igxSelectItemNavigation\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-select', providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxSelectComponent, multi: true },\n { provide: IGX_DROPDOWN_BASE, useExisting: IgxSelectComponent }\n ], template: \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ inputGroup.theme === 'material' ? collapsed ? 'expand_more' : 'expand_less' : collapsed ? 'arrow_drop_down' : 'arrow_drop_up' }}\\n \\n \\n \\n \\n \\n\\n
    \\n\\n
    \\n \\n
    \\n\\n \\n
    \\n \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\", styles: [\":host{display:block}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: IgxOverlayService, decorators: [{\n type: Inject,\n args: [IgxOverlayService]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IGX_INPUT_GROUP_TYPE]\n }] }, { type: i0.Injector }];\n }, propDecorators: { inputGroup: [{\n type: ViewChild,\n args: ['inputGroup', { read: IgxInputGroupComponent, static: true }]\n }], input: [{\n type: ViewChild,\n args: ['input', { read: IgxInputDirective, static: true }]\n }], children: [{\n type: ContentChildren,\n args: [forwardRef(() => IgxSelectItemComponent), { descendants: true }]\n }], prefixes: [{\n type: ContentChildren,\n args: [IgxPrefixDirective, { descendants: true }]\n }], suffixes: [{\n type: ContentChildren,\n args: [IgxSuffixDirective, { descendants: true }]\n }], label: [{\n type: ContentChild,\n args: [forwardRef(() => IgxLabelDirective), { static: true }]\n }], placeholder: [{\n type: Input\n }], disabled: [{\n type: Input\n }], overlaySettings: [{\n type: Input\n }], maxHeight: [{\n type: HostBinding,\n args: ['style.maxHeight']\n }], opening: [{\n type: Output\n }], opened: [{\n type: Output\n }], closing: [{\n type: Output\n }], closed: [{\n type: Output\n }], toggleIconTemplate: [{\n type: ContentChild,\n args: [IgxSelectToggleIconDirective, { read: TemplateRef }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [IgxSelectHeaderDirective, { read: TemplateRef, static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [IgxSelectFooterDirective, { read: TemplateRef, static: false }]\n }], hintElement: [{\n type: ContentChild,\n args: [IgxHintDirective, { read: ElementRef }]\n }], value: [{\n type: Input\n }], type: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass IgxExcelStyleDefaultExpressionComponent {\n get isLast() {\n return this.expressionsList[this.expressionsList.length - 1] === this.expressionUI;\n }\n get isSingle() {\n return this.expressionsList.length === 1;\n }\n get conditionsPlaceholder() {\n return this.grid.resourceStrings['igx_grid_filter_condition_placeholder'];\n }\n get inputValuePlaceholder() {\n return this.grid.resourceStrings['igx_grid_filter_row_placeholder'];\n }\n get type() {\n switch (this.column.dataType) {\n case GridColumnDataType.Number:\n case GridColumnDataType.Currency:\n case GridColumnDataType.Percent:\n return 'number';\n default:\n return 'text';\n }\n }\n constructor(cdr, platform) {\n this.cdr = cdr;\n this.platform = platform;\n this.expressionRemoved = new EventEmitter();\n this.logicOperatorChanged = new EventEmitter();\n this.dropDownOverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n }\n get conditions() {\n return this.column.filters.conditionList();\n }\n get inputValuesElement() {\n return this.inputValuesDirective.nativeElement;\n }\n ngAfterViewInit() {\n this.dropDownOverlaySettings.outlet = this.overlayOutlet;\n this.dropDownOverlaySettings.target = this.dropdownConditions.inputGroup.element.nativeElement;\n this.dropDownOverlaySettings.excludeFromOutsideClick = [this.dropdownConditions.inputGroup.element.nativeElement];\n this.dropDownOverlaySettings.positionStrategy = new ConnectedPositioningStrategy();\n }\n focus() {\n // use requestAnimationFrame to focus the values input because when initializing the component\n // datepicker's input group is not yet fully initialized\n requestAnimationFrame(() => this.inputValuesElement.focus());\n }\n translateCondition(value) {\n return this.grid.resourceStrings[`igx_grid_filter_${this.getCondition(value).name}`] || value;\n }\n getIconName() {\n if (this.column.dataType === GridColumnDataType.Boolean && this.expressionUI.expression.condition === null) {\n return this.getCondition(this.conditions[0]).iconName;\n }\n else if (!this.expressionUI.expression.condition) {\n return 'filter_list';\n }\n else {\n return this.expressionUI.expression.condition.iconName;\n }\n }\n isConditionSelected(conditionName) {\n return this.expressionUI.expression.condition && this.expressionUI.expression.condition.name === conditionName;\n }\n onConditionsChanged(eventArgs) {\n const value = eventArgs.newSelection.value;\n this.expressionUI.expression.condition = this.getCondition(value);\n this.focus();\n }\n getCondition(value) {\n return this.column.filters.condition(value);\n }\n getConditionFriendlyName(name) {\n return this.grid.resourceStrings[`igx_grid_filter_${name}`] || name;\n }\n onValuesInput(eventArgs) {\n this.expressionUI.expression.searchVal = DataUtil.parseValue(this.column.dataType, eventArgs.target.value);\n }\n onLogicOperatorButtonClicked(eventArgs, buttonIndex) {\n if (this.logicOperatorButtonGroup.selectedButtons.length === 0) {\n eventArgs.stopPropagation();\n this.logicOperatorButtonGroup.selectButton(buttonIndex);\n }\n else {\n this.logicOperatorChanged.emit({\n target: this.expressionUI,\n newValue: buttonIndex\n });\n }\n }\n onLogicOperatorKeyDown(eventArgs, buttonIndex) {\n if (eventArgs.key === this.platform.KEYMAP.ENTER) {\n this.logicOperatorButtonGroup.selectButton(buttonIndex);\n this.logicOperatorChanged.emit({\n target: this.expressionUI,\n newValue: buttonIndex\n });\n }\n }\n onRemoveButtonClick() {\n this.expressionRemoved.emit(this.expressionUI);\n }\n onOutletPointerDown(event) {\n event.preventDefault();\n }\n}\nIgxExcelStyleDefaultExpressionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleDefaultExpressionComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nIgxExcelStyleDefaultExpressionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleDefaultExpressionComponent, selector: \"igx-excel-style-default-expression\", inputs: { column: \"column\", expressionUI: \"expressionUI\", expressionsList: \"expressionsList\", grid: \"grid\", displayDensity: \"displayDensity\" }, outputs: { expressionRemoved: \"expressionRemoved\", logicOperatorChanged: \"logicOperatorChanged\" }, viewQueries: [{ propertyName: \"overlayOutlet\", first: true, predicate: [\"overlayOutlet\"], descendants: true, read: IgxOverlayOutletDirective, static: true }, { propertyName: \"dropdownConditions\", first: true, predicate: [\"dropdownConditions\"], descendants: true, read: IgxSelectComponent, static: true }, { propertyName: \"logicOperatorButtonGroup\", first: true, predicate: [\"logicOperatorButtonGroup\"], descendants: true, read: IgxButtonGroupComponent }, { propertyName: \"inputValuesDirective\", first: true, predicate: [\"inputValues\"], descendants: true, read: IgxInputDirective, static: true }], ngImport: i0, template: \"\\n \\n \\n filter_list\\n \\n \\n
    \\n \\n {{translateCondition(condition)}}\\n
    \\n
    \\n
    \\n\\n\\n \\n\\n\\n\\n\\n\\n \\n {{ grid.resourceStrings.igx_grid_filter_operator_and }}\\n \\n\\n \\n {{ grid.resourceStrings.igx_grid_filter_operator_or }}\\n \\n\\n\\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxButtonGroupComponent, selector: \"igx-buttongroup\", inputs: [\"id\", \"itemContentCssClass\", \"multiSelection\", \"values\", \"disabled\", \"alignment\"], outputs: [\"selected\", \"deselected\"] }, { kind: \"component\", type: IgxInputGroupComponent, selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: IgxInputDirective, selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: IgxPrefixDirective, selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxOverlayOutletDirective, selector: \"[igxOverlayOutlet]\", exportAs: [\"overlay-outlet\"] }, { kind: \"component\", type: IgxSelectComponent, selector: \"igx-select\", inputs: [\"placeholder\", \"disabled\", \"overlaySettings\", \"value\", \"type\"], outputs: [\"opening\", \"opened\", \"closing\", \"closed\"] }, { kind: \"component\", type: IgxSelectItemComponent, selector: \"igx-select-item\", inputs: [\"text\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleDefaultExpressionComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-excel-style-default-expression', template: \"\\n \\n \\n filter_list\\n \\n \\n
    \\n \\n {{translateCondition(condition)}}\\n
    \\n
    \\n
    \\n\\n\\n \\n\\n\\n\\n\\n\\n \\n {{ grid.resourceStrings.igx_grid_filter_operator_and }}\\n \\n\\n \\n {{ grid.resourceStrings.igx_grid_filter_operator_or }}\\n \\n\\n\\n
    \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: PlatformUtil }]; }, propDecorators: { column: [{\n type: Input\n }], expressionUI: [{\n type: Input\n }], expressionsList: [{\n type: Input\n }], grid: [{\n type: Input\n }], displayDensity: [{\n type: Input\n }], expressionRemoved: [{\n type: Output\n }], logicOperatorChanged: [{\n type: Output\n }], overlayOutlet: [{\n type: ViewChild,\n args: ['overlayOutlet', { read: IgxOverlayOutletDirective, static: true }]\n }], dropdownConditions: [{\n type: ViewChild,\n args: ['dropdownConditions', { read: IgxSelectComponent, static: true }]\n }], logicOperatorButtonGroup: [{\n type: ViewChild,\n args: ['logicOperatorButtonGroup', { read: IgxButtonGroupComponent }]\n }], inputValuesDirective: [{\n type: ViewChild,\n args: ['inputValues', { read: IgxInputDirective, static: true }]\n }] } });\n\nconst EVENT_SUFFIX = 'precise';\n/**\n * Touch gestures manager based on Hammer.js\n * Use with caution, this will track references for single manager per element. Very TBD. Much TODO.\n *\n * @hidden\n */\nclass HammerGesturesManager {\n constructor(_zone, doc, platformUtil) {\n this._zone = _zone;\n this.doc = doc;\n this.platformUtil = platformUtil;\n /**\n * Event option defaults for each recognizer, see http://hammerjs.github.io/api/ for API listing.\n */\n this.hammerOptions = {};\n this._hammerManagers = [];\n this.platformBrowser = this.platformUtil.isBrowser;\n if (this.platformBrowser) {\n this.hammerOptions = {\n // D.P. #447 Force TouchInput due to PointerEventInput bug (https://github.com/hammerjs/hammer.js/issues/1065)\n // see https://github.com/IgniteUI/igniteui-angular/issues/447#issuecomment-324601803\n inputClass: Hammer.TouchInput,\n recognizers: [\n [Hammer.Pan, { threshold: 0 }],\n [Hammer.Swipe, { direction: Hammer.DIRECTION_HORIZONTAL }],\n [Hammer.Tap],\n [Hammer.Tap, { event: 'doubletap', taps: 2 }, ['tap']]\n ]\n };\n }\n }\n supports(eventName) {\n return eventName.toLowerCase().endsWith('.' + EVENT_SUFFIX);\n }\n /**\n * Add listener extended with options for Hammer.js. Will use defaults if none are provided.\n * Modeling after other event plugins for easy future modifications.\n */\n addEventListener(element, eventName, eventHandler, options = null) {\n if (!this.platformBrowser) {\n return;\n }\n // Creating the manager bind events, must be done outside of angular\n return this._zone.runOutsideAngular(() => {\n let mc = this.getManagerForElement(element);\n if (mc === null) {\n // new Hammer is a shortcut for Manager with defaults\n mc = new Hammer(element, Object.assign(this.hammerOptions, options));\n this.addManagerForElement(element, mc);\n }\n const handler = (eventObj) => this._zone.run(() => eventHandler(eventObj));\n mc.on(eventName, handler);\n return () => mc.off(eventName, handler);\n });\n }\n /**\n * Add listener extended with options for Hammer.js. Will use defaults if none are provided.\n * Modeling after other event plugins for easy future modifications.\n *\n * @param target Can be one of either window, body or document(fallback default).\n */\n addGlobalEventListener(target, eventName, eventHandler) {\n if (!this.platformBrowser) {\n return;\n }\n const element = this.getGlobalEventTarget(target);\n // Creating the manager bind events, must be done outside of angular\n return this.addEventListener(element, eventName, eventHandler);\n }\n /**\n * Exposes [Dom]Adapter.getGlobalEventTarget to get global event targets.\n * Supported: window, document, body. Defaults to document for invalid args.\n *\n * @param target Target name\n */\n getGlobalEventTarget(target) {\n return ɵgetDOM().getGlobalEventTarget(this.doc, target);\n }\n /**\n * Set HammerManager options.\n *\n * @param element The DOM element used to create the manager on.\n *\n * ### Example\n *\n * ```ts\n * manager.setManagerOption(myElem, \"pan\", { pointers: 1 });\n * ```\n */\n setManagerOption(element, event, options) {\n const manager = this.getManagerForElement(element);\n manager.get(event).set(options);\n }\n /**\n * Add an element and manager map to the internal collection.\n *\n * @param element The DOM element used to create the manager on.\n */\n addManagerForElement(element, manager) {\n this._hammerManagers.push({ element, manager });\n }\n /**\n * Get HammerManager for the element or null\n *\n * @param element The DOM element used to create the manager on.\n */\n getManagerForElement(element) {\n const result = this._hammerManagers.filter(value => value.element === element);\n return result.length ? result[0].manager : null;\n }\n /**\n * Destroys the HammerManager for the element, removing event listeners in the process.\n *\n * @param element The DOM element used to create the manager on.\n */\n removeManagerForElement(element) {\n let index = null;\n for (let i = 0; i < this._hammerManagers.length; i++) {\n if (element === this._hammerManagers[i].element) {\n index = i;\n break;\n }\n }\n if (index !== null) {\n const item = this._hammerManagers.splice(index, 1)[0];\n // destroy also\n item.manager.destroy();\n }\n }\n /** Destroys all internally tracked HammerManagers, removing event listeners in the process. */\n destroy() {\n for (const item of this._hammerManagers) {\n item.manager.destroy();\n }\n this._hammerManagers = [];\n }\n}\nHammerGesturesManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: HammerGesturesManager, deps: [{ token: i0.NgZone }, { token: DOCUMENT }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Injectable });\nHammerGesturesManager.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: HammerGesturesManager });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: HammerGesturesManager, decorators: [{\n type: Injectable\n }], ctorParameters: function () {\n return [{ type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: PlatformUtil }];\n } });\n\n/** @hidden */\nconst IGX_TIME_PICKER_COMPONENT = 'IgxTimePickerComponentToken';\n\n/**\n * This file contains all the directives used by the @link IgxTimePickerComponent.\n * You should generally not use them directly.\n *\n * @preferred\n */\n/** @hidden */\nclass IgxItemListDirective {\n constructor(timePicker, elementRef, touchManager) {\n this.timePicker = timePicker;\n this.elementRef = elementRef;\n this.touchManager = touchManager;\n this.tabindex = 0;\n this.onPanMove = (event) => {\n const delta = event.deltaY < 0 ? -1 : event.deltaY > 0 ? 1 : 0;\n if (delta !== 0) {\n this.nextItem(delta);\n }\n };\n }\n get defaultCSS() {\n return true;\n }\n get hourCSS() {\n return this.type === 'hourList';\n }\n get minuteCSS() {\n return this.type === 'minuteList';\n }\n get secondsCSS() {\n return this.type === 'secondsList';\n }\n get ampmCSS() {\n return this.type === 'ampmList';\n }\n onFocus() {\n this.isActive = true;\n }\n onBlur() {\n this.isActive = false;\n }\n /**\n * @hidden\n */\n onKeydownArrowDown(event) {\n event.preventDefault();\n this.nextItem(1);\n }\n /**\n * @hidden\n */\n onKeydownArrowUp(event) {\n event.preventDefault();\n this.nextItem(-1);\n }\n /**\n * @hidden\n */\n onKeydownArrowRight(event) {\n event.preventDefault();\n const listName = event.target.className;\n if (listName.indexOf('hourList') !== -1 && this.timePicker.minuteList) {\n this.timePicker.minuteList.nativeElement.focus();\n }\n else if ((listName.indexOf('hourList') !== -1 || listName.indexOf('minuteList') !== -1) && this.timePicker.secondsList) {\n this.timePicker.secondsList.nativeElement.focus();\n }\n else if ((listName.indexOf('hourList') !== -1 || listName.indexOf('minuteList') !== -1 ||\n listName.indexOf('secondsList') !== -1) && this.timePicker.ampmList) {\n this.timePicker.ampmList.nativeElement.focus();\n }\n }\n /**\n * @hidden\n */\n onKeydownArrowLeft(event) {\n event.preventDefault();\n const listName = event.target.className;\n if (listName.indexOf('ampmList') !== -1 && this.timePicker.secondsList) {\n this.timePicker.secondsList.nativeElement.focus();\n }\n else if (listName.indexOf('secondsList') !== -1 && this.timePicker.secondsList\n && listName.indexOf('minutesList') && this.timePicker.minuteList) {\n this.timePicker.minuteList.nativeElement.focus();\n }\n else if (listName.indexOf('ampmList') !== -1 && this.timePicker.minuteList) {\n this.timePicker.minuteList.nativeElement.focus();\n }\n else if ((listName.indexOf('ampmList') !== -1 || listName.indexOf('secondsList') !== -1 ||\n listName.indexOf('minuteList') !== -1) && this.timePicker.hourList) {\n this.timePicker.hourList.nativeElement.focus();\n }\n }\n /**\n * @hidden\n */\n onKeydownEnter(event) {\n event.preventDefault();\n this.timePicker.okButtonClick();\n }\n /**\n * @hidden\n */\n onKeydownEscape(event) {\n event.preventDefault();\n this.timePicker.cancelButtonClick();\n }\n /**\n * @hidden\n */\n onHover() {\n this.elementRef.nativeElement.focus();\n }\n /**\n * @hidden\n */\n onScroll(event) {\n event.preventDefault();\n event.stopPropagation();\n const delta = event.deltaY;\n if (delta !== 0) {\n this.nextItem(delta);\n }\n }\n /**\n * @hidden @internal\n */\n ngOnInit() {\n const hammerOptions = { recognizers: [[Hammer.Pan, { direction: Hammer.DIRECTION_VERTICAL, threshold: 10 }]] };\n this.touchManager.addEventListener(this.elementRef.nativeElement, 'pan', this.onPanMove, hammerOptions);\n }\n /**\n * @hidden @internal\n */\n ngOnDestroy() {\n this.touchManager.destroy();\n }\n nextItem(delta) {\n switch (this.type) {\n case 'hourList': {\n this.timePicker.nextHour(delta);\n break;\n }\n case 'minuteList': {\n this.timePicker.nextMinute(delta);\n break;\n }\n case 'secondsList': {\n this.timePicker.nextSeconds(delta);\n break;\n }\n case 'ampmList': {\n this.timePicker.nextAmPm(delta);\n break;\n }\n }\n }\n}\nIgxItemListDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxItemListDirective, deps: [{ token: IGX_TIME_PICKER_COMPONENT }, { token: i0.ElementRef }, { token: HammerGesturesManager }], target: i0.ɵɵFactoryTarget.Directive });\nIgxItemListDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxItemListDirective, selector: \"[igxItemList]\", inputs: { type: [\"igxItemList\", \"type\"] }, host: { listeners: { \"focus\": \"onFocus()\", \"blur\": \"onBlur()\", \"keydown.arrowdown\": \"onKeydownArrowDown($event)\", \"keydown.arrowup\": \"onKeydownArrowUp($event)\", \"keydown.arrowright\": \"onKeydownArrowRight($event)\", \"keydown.arrowleft\": \"onKeydownArrowLeft($event)\", \"keydown.enter\": \"onKeydownEnter($event)\", \"keydown.escape\": \"onKeydownEscape($event)\", \"mouseover\": \"onHover()\", \"wheel\": \"onScroll($event)\" }, properties: { \"attr.tabindex\": \"this.tabindex\", \"class.igx-time-picker__column\": \"this.defaultCSS\", \"class.igx-time-picker__hourList\": \"this.hourCSS\", \"class.igx-time-picker__minuteList\": \"this.minuteCSS\", \"class.igx-time-picker__secondsList\": \"this.secondsCSS\", \"class.igx-time-picker__ampmList\": \"this.ampmCSS\" } }, providers: [HammerGesturesManager], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxItemListDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxItemList]',\n providers: [HammerGesturesManager]\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_TIME_PICKER_COMPONENT]\n }] }, { type: i0.ElementRef }, { type: HammerGesturesManager }];\n }, propDecorators: { tabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], type: [{\n type: Input,\n args: ['igxItemList']\n }], defaultCSS: [{\n type: HostBinding,\n args: ['class.igx-time-picker__column']\n }], hourCSS: [{\n type: HostBinding,\n args: ['class.igx-time-picker__hourList']\n }], minuteCSS: [{\n type: HostBinding,\n args: ['class.igx-time-picker__minuteList']\n }], secondsCSS: [{\n type: HostBinding,\n args: ['class.igx-time-picker__secondsList']\n }], ampmCSS: [{\n type: HostBinding,\n args: ['class.igx-time-picker__ampmList']\n }], onFocus: [{\n type: HostListener,\n args: ['focus']\n }], onBlur: [{\n type: HostListener,\n args: ['blur']\n }], onKeydownArrowDown: [{\n type: HostListener,\n args: ['keydown.arrowdown', ['$event']]\n }], onKeydownArrowUp: [{\n type: HostListener,\n args: ['keydown.arrowup', ['$event']]\n }], onKeydownArrowRight: [{\n type: HostListener,\n args: ['keydown.arrowright', ['$event']]\n }], onKeydownArrowLeft: [{\n type: HostListener,\n args: ['keydown.arrowleft', ['$event']]\n }], onKeydownEnter: [{\n type: HostListener,\n args: ['keydown.enter', ['$event']]\n }], onKeydownEscape: [{\n type: HostListener,\n args: ['keydown.escape', ['$event']]\n }], onHover: [{\n type: HostListener,\n args: ['mouseover']\n }], onScroll: [{\n type: HostListener,\n args: ['wheel', ['$event']]\n }] } });\n/**\n * @hidden\n */\nclass IgxTimeItemDirective {\n get defaultCSS() {\n return true;\n }\n get selectedCSS() {\n return this.isSelectedTime;\n }\n get activeCSS() {\n return this.isSelectedTime && this.itemList.isActive;\n }\n get isSelectedTime() {\n const currentValue = this.value.length < 2 ? `0${this.value}` : this.value;\n const dateType = this.itemList.type;\n const inputDateParts = DateTimeUtil.parseDateTimeFormat(this.timePicker.inputFormat);\n switch (dateType) {\n case 'hourList':\n const hourPart = inputDateParts.find(element => element.type === 'hours');\n return DateTimeUtil.getPartValue(this.timePicker.selectedDate, hourPart, hourPart.format.length) === currentValue;\n case 'minuteList':\n const minutePart = inputDateParts.find(element => element.type === 'minutes');\n return DateTimeUtil.getPartValue(this.timePicker.selectedDate, minutePart, minutePart.format.length) === currentValue;\n case 'secondsList':\n const secondsPart = inputDateParts.find(element => element.type === 'seconds');\n return DateTimeUtil.getPartValue(this.timePicker.selectedDate, secondsPart, secondsPart.format.length) === currentValue;\n case 'ampmList':\n const ampmPart = inputDateParts.find(element => element.format === 'tt');\n return DateTimeUtil.getPartValue(this.timePicker.selectedDate, ampmPart, ampmPart.format.length) === this.value;\n }\n }\n get minValue() {\n const dateType = this.itemList.type;\n const inputDateParts = DateTimeUtil.parseDateTimeFormat(this.timePicker.inputFormat);\n switch (dateType) {\n case 'hourList':\n return this.getHourPart(this.timePicker.minDropdownValue);\n case 'minuteList':\n if (this.timePicker.selectedDate.getHours() === this.timePicker.minDropdownValue.getHours()) {\n const minutePart = inputDateParts.find(element => element.type === 'minutes');\n return DateTimeUtil.getPartValue(this.timePicker.minDropdownValue, minutePart, minutePart.format.length);\n }\n return '00';\n case 'secondsList':\n const date = new Date(this.timePicker.selectedDate);\n const min = new Date(this.timePicker.minDropdownValue);\n date.setSeconds(0);\n min.setSeconds(0);\n if (date.getTime() === min.getTime()) {\n const secondsPart = inputDateParts.find(element => element.type === 'seconds');\n return DateTimeUtil.getPartValue(this.timePicker.minDropdownValue, secondsPart, secondsPart.format.length);\n }\n return '00';\n case 'ampmList':\n const ampmPart = inputDateParts.find(element => element.format === 'tt');\n return DateTimeUtil.getPartValue(this.timePicker.minDropdownValue, ampmPart, ampmPart.format.length);\n }\n }\n get maxValue() {\n const dateType = this.itemList.type;\n const inputDateParts = DateTimeUtil.parseDateTimeFormat(this.timePicker.inputFormat);\n switch (dateType) {\n case 'hourList':\n return this.getHourPart(this.timePicker.maxDropdownValue);\n case 'minuteList':\n if (this.timePicker.selectedDate.getHours() === this.timePicker.maxDropdownValue.getHours()) {\n const minutePart = inputDateParts.find(element => element.type === 'minutes');\n return DateTimeUtil.getPartValue(this.timePicker.maxDropdownValue, minutePart, minutePart.format.length);\n }\n else {\n const currentTime = new Date(this.timePicker.selectedDate);\n const minDelta = this.timePicker.itemsDelta.minutes;\n const remainder = 60 % minDelta;\n const delta = remainder === 0 ? 60 - minDelta : 60 - remainder;\n currentTime.setMinutes(delta);\n const minutePart = inputDateParts.find(element => element.type === 'minutes');\n return DateTimeUtil.getPartValue(currentTime, minutePart, minutePart.format.length);\n }\n case 'secondsList':\n const date = new Date(this.timePicker.selectedDate);\n const max = new Date(this.timePicker.maxDropdownValue);\n date.setSeconds(0);\n max.setSeconds(0);\n if (date.getTime() === max.getTime()) {\n const secondsPart = inputDateParts.find(element => element.type === 'seconds');\n return DateTimeUtil.getPartValue(this.timePicker.maxDropdownValue, secondsPart, secondsPart.format.length);\n }\n else {\n const secDelta = this.timePicker.itemsDelta.seconds;\n const remainder = 60 % secDelta;\n const delta = remainder === 0 ? 60 - secDelta : 60 - remainder;\n date.setSeconds(delta);\n const secondsPart = inputDateParts.find(element => element.type === 'seconds');\n return DateTimeUtil.getPartValue(date, secondsPart, secondsPart.format.length);\n }\n case 'ampmList':\n const ampmPart = inputDateParts.find(element => element.format === 'tt');\n return DateTimeUtil.getPartValue(this.timePicker.maxDropdownValue, ampmPart, ampmPart.format.length);\n }\n }\n get hourValue() {\n return this.getHourPart(this.timePicker.selectedDate);\n }\n constructor(timePicker, itemList) {\n this.timePicker = timePicker;\n this.itemList = itemList;\n }\n onClick(item) {\n if (item !== '') {\n const dateType = this.itemList.type;\n this.timePicker.onItemClick(item, dateType);\n }\n }\n getHourPart(date) {\n const inputDateParts = DateTimeUtil.parseDateTimeFormat(this.timePicker.inputFormat);\n const hourPart = inputDateParts.find(element => element.type === 'hours');\n const ampmPart = inputDateParts.find(element => element.format === 'tt');\n const hour = DateTimeUtil.getPartValue(date, hourPart, hourPart.format.length);\n if (ampmPart) {\n const ampm = DateTimeUtil.getPartValue(date, ampmPart, ampmPart.format.length);\n return `${hour} ${ampm}`;\n }\n return hour;\n }\n}\nIgxTimeItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTimeItemDirective, deps: [{ token: IGX_TIME_PICKER_COMPONENT }, { token: IgxItemListDirective }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTimeItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTimeItemDirective, selector: \"[igxTimeItem]\", inputs: { value: [\"igxTimeItem\", \"value\"] }, host: { listeners: { \"click\": \"onClick(value)\" }, properties: { \"class.igx-time-picker__item\": \"this.defaultCSS\", \"class.igx-time-picker__item--selected\": \"this.selectedCSS\", \"class.igx-time-picker__item--active\": \"this.activeCSS\" } }, exportAs: [\"timeItem\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTimeItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxTimeItem]',\n exportAs: 'timeItem'\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_TIME_PICKER_COMPONENT]\n }] }, { type: IgxItemListDirective }];\n }, propDecorators: { value: [{\n type: Input,\n args: ['igxTimeItem']\n }], defaultCSS: [{\n type: HostBinding,\n args: ['class.igx-time-picker__item']\n }], selectedCSS: [{\n type: HostBinding,\n args: ['class.igx-time-picker__item--selected']\n }], activeCSS: [{\n type: HostBinding,\n args: ['class.igx-time-picker__item--active']\n }], onClick: [{\n type: HostListener,\n args: ['click', ['value']]\n }] } });\n/**\n * This directive should be used to mark which ng-template will be used from IgxTimePicker when re-templating its input group.\n */\nclass IgxTimePickerTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxTimePickerTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTimePickerTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTimePickerTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTimePickerTemplateDirective, selector: \"[igxTimePickerTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTimePickerTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxTimePickerTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * This directive can be used to add custom action buttons to the dropdown/dialog.\n */\nclass IgxTimePickerActionsDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxTimePickerActionsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTimePickerActionsDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTimePickerActionsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTimePickerActionsDirective, selector: \"[igxTimePickerActions]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTimePickerActionsDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxTimePickerActions]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nconst ITEMS_COUNT = 7;\nclass TimeFormatPipe {\n constructor(timePicker) {\n this.timePicker = timePicker;\n }\n transform(value) {\n const format = this.timePicker.inputFormat.replace('tt', 'aa');\n const datePipe = new DatePipe(this.timePicker.locale);\n return datePipe.transform(value, format);\n }\n}\nTimeFormatPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: TimeFormatPipe, deps: [{ token: IGX_TIME_PICKER_COMPONENT }], target: i0.ɵɵFactoryTarget.Pipe });\nTimeFormatPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: TimeFormatPipe, name: \"timeFormatPipe\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: TimeFormatPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'timeFormatPipe'\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_TIME_PICKER_COMPONENT]\n }] }];\n } });\nclass TimeItemPipe {\n constructor(timePicker) {\n this.timePicker = timePicker;\n }\n transform(_collection, timePart, selectedDate, min, max) {\n let list;\n let part;\n switch (timePart) {\n case 'hour':\n list = this.generateHours(min, max);\n const hours = this.timePicker.isTwelveHourFormat ? this.toTwelveHourFormat(selectedDate.getHours())\n : selectedDate.getHours();\n list = this.scrollListItem(hours, list);\n part = DatePart.Hours;\n break;\n case 'minutes':\n list = this.generateMinutes(selectedDate, min, max);\n list = this.scrollListItem(selectedDate.getMinutes(), list);\n part = DatePart.Minutes;\n break;\n case 'seconds':\n list = this.generateSeconds(selectedDate, min, max);\n list = this.scrollListItem(selectedDate.getSeconds(), list);\n part = DatePart.Seconds;\n break;\n case 'ampm':\n list = this.generateAmPm(min, max);\n const selectedAmPm = this.timePicker.getPartValue(selectedDate, 'ampm');\n list = this.scrollListItem(selectedAmPm, list);\n part = DatePart.AmPm;\n break;\n }\n return this.getListView(list, part);\n }\n getListView(view, dateType) {\n for (let i = 0; i < view.length; i++) {\n view[i] = this.getItemView(view[i], dateType);\n }\n return view;\n }\n getItemView(item, dateType) {\n if (item === null) {\n item = '';\n }\n else if (dateType && typeof (item) !== 'string') {\n const leadZeroHour = (item < 10 && (this.timePicker.inputFormat.indexOf('hh') !== -1\n || this.timePicker.inputFormat.indexOf('HH') !== -1));\n const leadZeroMinute = (item < 10 && this.timePicker.inputFormat.indexOf('mm') !== -1);\n const leadZeroSeconds = (item < 10 && this.timePicker.inputFormat.indexOf('ss') !== -1);\n const leadZero = {\n hours: leadZeroHour,\n minutes: leadZeroMinute,\n seconds: leadZeroSeconds\n }[dateType];\n item = (leadZero) ? '0' + item : `${item}`;\n }\n return item;\n }\n scrollListItem(item, items) {\n const itemsCount = items.length;\n let view;\n if (items) {\n const index = items.indexOf(item);\n if (index < 3) {\n view = items.slice(itemsCount - (3 - index), itemsCount);\n view = view.concat(items.slice(0, index + 4));\n }\n else if (index + 4 > itemsCount) {\n view = items.slice(index - 3, itemsCount);\n view = view.concat(items.slice(0, index + 4 - itemsCount));\n }\n else {\n view = items.slice(index - 3, index + 4);\n }\n }\n return view;\n }\n generateHours(min, max) {\n const hourItems = [];\n let hoursCount = this.timePicker.isTwelveHourFormat ? 13 : 24;\n hoursCount /= this.timePicker.itemsDelta.hours;\n const minHours = min.getHours();\n const maxHours = max.getHours();\n if (hoursCount > 1) {\n for (let hourIndex = 0; hourIndex < 24; hourIndex++) {\n let hours = hourIndex * this.timePicker.itemsDelta.hours;\n if (hours >= minHours && hours <= maxHours) {\n hours = this.timePicker.isTwelveHourFormat ? this.toTwelveHourFormat(hours) : hours;\n if (!hourItems.find((element => element === hours))) {\n hourItems.push(hours);\n }\n }\n }\n }\n else {\n hourItems.push(0);\n }\n if (hourItems.length < ITEMS_COUNT || hoursCount < ITEMS_COUNT || !this.timePicker.spinLoop) {\n const index = !this.timePicker.spinLoop || (hourItems.length < ITEMS_COUNT && hoursCount < ITEMS_COUNT) ? 6 : 3;\n for (let i = 0; i < index; i++) {\n hourItems.push(null);\n }\n }\n return hourItems;\n }\n generateMinutes(time, min, max) {\n const minuteItems = [];\n const minuteItemsCount = 60 / this.timePicker.itemsDelta.minutes;\n time = new Date(time);\n for (let i = 0; i < minuteItemsCount; i++) {\n const minutes = i * this.timePicker.itemsDelta.minutes;\n time.setMinutes(minutes);\n if (time >= min && time <= max) {\n minuteItems.push(i * this.timePicker.itemsDelta.minutes);\n }\n }\n if (minuteItems.length < ITEMS_COUNT || minuteItemsCount < ITEMS_COUNT || !this.timePicker.spinLoop) {\n const index = !this.timePicker.spinLoop || (minuteItems.length < ITEMS_COUNT && minuteItemsCount < ITEMS_COUNT) ? 6 : 3;\n for (let i = 0; i < index; i++) {\n minuteItems.push(null);\n }\n }\n return minuteItems;\n }\n generateSeconds(time, min, max) {\n const secondsItems = [];\n const secondsItemsCount = 60 / this.timePicker.itemsDelta.seconds;\n time = new Date(time);\n for (let i = 0; i < secondsItemsCount; i++) {\n const seconds = i * this.timePicker.itemsDelta.seconds;\n time.setSeconds(seconds);\n if (time.getTime() >= min.getTime()\n && time.getTime() <= max.getTime()) {\n secondsItems.push(i * this.timePicker.itemsDelta.seconds);\n }\n }\n if (secondsItems.length < ITEMS_COUNT || secondsItemsCount < ITEMS_COUNT || !this.timePicker.spinLoop) {\n const index = !this.timePicker.spinLoop || (secondsItems.length < ITEMS_COUNT && secondsItemsCount < ITEMS_COUNT) ? 6 : 3;\n for (let i = 0; i < index; i++) {\n secondsItems.push(null);\n }\n }\n return secondsItems;\n }\n generateAmPm(min, max) {\n const ampmItems = [];\n const minHour = min.getHours();\n const maxHour = max.getHours();\n if (minHour < 12) {\n ampmItems.push('AM');\n }\n if (minHour >= 12 || maxHour >= 12) {\n ampmItems.push('PM');\n }\n for (let i = 0; i < 5; i++) {\n ampmItems.push(null);\n }\n return ampmItems;\n }\n toTwelveHourFormat(hour) {\n if (hour > 12) {\n hour -= 12;\n }\n else if (hour === 0) {\n hour = 12;\n }\n return hour;\n }\n}\nTimeItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: TimeItemPipe, deps: [{ token: IGX_TIME_PICKER_COMPONENT }], target: i0.ɵɵFactoryTarget.Pipe });\nTimeItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: TimeItemPipe, name: \"timeItemPipe\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: TimeItemPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'timeItemPipe'\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_TIME_PICKER_COMPONENT]\n }] }];\n } });\n\nlet NEXT_ID$c = 0;\nclass IgxTimePickerComponent extends PickerBaseDirective {\n /**\n * The minimum value the picker will accept.\n *\n * @remarks\n * If a `string` value is passed in, it must be in ISO format.\n *\n * @example\n * ```html\n * \n * ```\n */\n set minValue(value) {\n this._minValue = value;\n const date = this.parseToDate(value);\n if (date) {\n this._dateMinValue = new Date();\n this._dateMinValue.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n this.minDropdownValue = this.setMinMaxDropdownValue('min', this._dateMinValue);\n }\n this.setSelectedValue(this._selectedDate);\n this._onValidatorChange();\n }\n get minValue() {\n return this._minValue;\n }\n /**\n * Gets if the dropdown/dialog is collapsed\n *\n * ```typescript\n * let isCollapsed = this.timePicker.collapsed;\n * ```\n */\n get collapsed() {\n var _a;\n return (_a = this.toggleRef) === null || _a === void 0 ? void 0 : _a.collapsed;\n }\n /**\n * The maximum value the picker will accept.\n *\n * @remarks\n * If a `string` value is passed in, it must be in ISO format.\n *\n * @example\n * ```html\n * \n * ```\n */\n set maxValue(value) {\n this._maxValue = value;\n const date = this.parseToDate(value);\n if (date) {\n this._dateMaxValue = new Date();\n this._dateMaxValue.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n this.maxDropdownValue = this.setMinMaxDropdownValue('max', this._dateMaxValue);\n }\n this.setSelectedValue(this._selectedDate);\n this._onValidatorChange();\n }\n get maxValue() {\n return this._maxValue;\n }\n /** @hidden */\n get showClearButton() {\n if (this.clearComponents.length) {\n return false;\n }\n if (DateTimeUtil.isValidDate(this.value)) {\n // TODO: Update w/ clear behavior\n return this.value.getHours() !== 0 || this.value.getMinutes() !== 0 || this.value.getSeconds() !== 0;\n }\n return !!this.dateTimeEditor.value;\n }\n /** @hidden */\n get showHoursList() {\n return this.inputFormat.indexOf('h') !== -1 || this.inputFormat.indexOf('H') !== -1;\n }\n /** @hidden */\n get showMinutesList() {\n return this.inputFormat.indexOf('m') !== -1;\n }\n /** @hidden */\n get showSecondsList() {\n return this.inputFormat.indexOf('s') !== -1;\n }\n /** @hidden */\n get showAmPmList() {\n return this.inputFormat.indexOf('t') !== -1 || this.inputFormat.indexOf('a') !== -1;\n }\n /** @hidden */\n get isTwelveHourFormat() {\n return this.inputFormat.indexOf('h') !== -1;\n }\n /** @hidden @internal */\n get isVertical() {\n return this.headerOrientation === PickerHeaderOrientation.Vertical;\n }\n /** @hidden @internal */\n get selectedDate() {\n return this._selectedDate;\n }\n /** @hidden @internal */\n get minDateValue() {\n if (!this._dateMinValue) {\n const minDate = new Date();\n minDate.setHours(0, 0, 0, 0);\n return minDate;\n }\n return this._dateMinValue;\n }\n /** @hidden @internal */\n get maxDateValue() {\n if (!this._dateMaxValue) {\n const maxDate = new Date();\n maxDate.setHours(23, 59, 59, 999);\n return maxDate;\n }\n return this._dateMaxValue;\n }\n get required() {\n if (this._ngControl && this._ngControl.control && this._ngControl.control.validator) {\n // Run the validation with empty object to check if required is enabled.\n const error = this._ngControl.control.validator({});\n return !!(error && error.required);\n }\n return false;\n }\n get dialogOverlaySettings() {\n return Object.assign({}, this._defaultDialogOverlaySettings, this.overlaySettings);\n }\n get dropDownOverlaySettings() {\n return Object.assign({}, this._defaultDropDownOverlaySettings, this.overlaySettings);\n }\n /**\n * The currently selected value / time from the drop-down/dialog\n *\n * @remarks\n * The current value is of type `Date`\n *\n * @example\n * ```typescript\n * const newValue: Date = new Date(2000, 2, 2, 10, 15, 15);\n * this.timePicker.value = newValue;\n * ```\n */\n get value() {\n return this._value;\n }\n /**\n * An accessor that allows you to set a time using the `value` input.\n * ```html\n * public date: Date = new Date(Date.now());\n * //...\n * \n * ```\n */\n set value(value) {\n const oldValue = this._value;\n this._value = value;\n const date = this.parseToDate(value);\n if (date) {\n this._dateValue = new Date();\n this._dateValue.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n this.setSelectedValue(this._dateValue);\n }\n else {\n this._dateValue = null;\n this.setSelectedValue(null);\n }\n if (this.dateTimeEditor) {\n this.dateTimeEditor.value = date;\n }\n this.emitValueChange(oldValue, this._value);\n this._onChangeCallback(this._value);\n }\n /**\n * An accessor that sets the resource strings.\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /**\n * An accessor that returns the resource strings.\n */\n get resourceStrings() {\n return this._resourceStrings;\n }\n /**\n * An @Input property that renders OK button with custom text. By default `okButtonLabel` is set to OK.\n * ```html\n * \n * ```\n */\n set okButtonLabel(value) {\n this._okButtonLabel = value;\n }\n /**\n * An accessor that returns the label of ok button.\n */\n get okButtonLabel() {\n if (this._okButtonLabel === null) {\n return this.resourceStrings.igx_time_picker_ok;\n }\n return this._okButtonLabel;\n }\n /**\n * An @Input property that renders cancel button with custom text.\n * By default `cancelButtonLabel` is set to Cancel.\n * ```html\n * \n * ```\n */\n set cancelButtonLabel(value) {\n this._cancelButtonLabel = value;\n }\n /**\n * An accessor that returns the label of cancel button.\n */\n get cancelButtonLabel() {\n if (this._cancelButtonLabel === null) {\n return this.resourceStrings.igx_time_picker_cancel;\n }\n return this._cancelButtonLabel;\n }\n /**\n * Delta values used to increment or decrement each editor date part on spin actions and\n * to display time portions in the dropdown/dialog.\n * By default `itemsDelta` is set to `{hour: 1, minute: 1, second: 1}`\n * ```html\n * \n * ```\n */\n set itemsDelta(value) {\n Object.assign(this._itemsDelta, value);\n }\n get itemsDelta() {\n return this._itemsDelta;\n }\n constructor(element, _localeId, _displayDensityOptions, _inputGroupType, _injector, platform, cdr) {\n super(element, _localeId, _displayDensityOptions, _inputGroupType);\n this._injector = _injector;\n this.platform = platform;\n this.cdr = cdr;\n /**\n * An @Input property that sets the value of the `id` attribute.\n * ```html\n * \n * ```\n */\n this.id = `igx-time-picker-${NEXT_ID$c++}`;\n /**\n * The expected user input format and placeholder.\n *\n * @remarks\n * Default is `hh:mm tt`\n *\n * @example\n * ```html\n * \n * ```\n */\n this.inputFormat = DateTimeUtil.DEFAULT_TIME_INPUT_FORMAT;\n /**\n * Gets/Sets the interaction mode - dialog or drop down.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.mode = PickerInteractionMode.DropDown;\n /**\n * An @Input property that determines the spin behavior. By default `spinLoop` is set to true.\n * The seconds, minutes and hour spinning will wrap around by default.\n * ```html\n * \n * ```\n */\n this.spinLoop = true;\n /**\n * Sets the orientation of the picker's header.\n *\n * @remarks\n * Available in dialog mode only. Default value is `horizontal`.\n *\n * ```html\n * \n * ```\n */\n this.headerOrientation = PickerHeaderOrientation.Horizontal;\n /** @hidden @internal */\n this.readOnly = false;\n /**\n * Emitted after a selection has been done.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.selected = new EventEmitter();\n /**\n * Emitted when the picker's value changes.\n *\n * @remarks\n * Used for `two-way` bindings.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.valueChange = new EventEmitter();\n /**\n * Emitted when the user types/spins invalid time in the time-picker editor.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.validationFailed = new EventEmitter();\n /** @hidden */\n this.cleared = false;\n /** @hidden */\n this.isNotEmpty = false;\n /** @hidden @internal */\n this.displayValue = { transform: (date) => this.formatter(date) };\n /** @hidden @internal */\n this.hourItems = [];\n /** @hidden @internal */\n this.minuteItems = [];\n /** @hidden @internal */\n this.secondsItems = [];\n /** @hidden @internal */\n this.ampmItems = [];\n this._resourceStrings = CurrentResourceStrings.TimePickerResStrings;\n this._okButtonLabel = null;\n this._cancelButtonLabel = null;\n this._itemsDelta = { hours: 1, minutes: 1, seconds: 1 };\n this._ngControl = null;\n this._onChangeCallback = noop;\n this._onTouchedCallback = noop;\n this._onValidatorChange = noop;\n this._defaultDialogOverlaySettings = {\n closeOnOutsideClick: true,\n modal: true,\n closeOnEscape: true,\n outlet: this.outlet\n };\n this._defaultDropDownOverlaySettings = {\n target: this.element.nativeElement,\n modal: false,\n closeOnOutsideClick: true,\n scrollStrategy: new AbsoluteScrollStrategy(),\n positionStrategy: new AutoPositionStrategy(),\n outlet: this.outlet\n };\n this.locale = this.locale || this._localeId;\n }\n /** @hidden @internal */\n onKeyDown(event) {\n switch (event.key) {\n case this.platform.KEYMAP.ARROW_UP:\n if (event.altKey && this.isDropdown) {\n this.close();\n }\n break;\n case this.platform.KEYMAP.ARROW_DOWN:\n if (event.altKey && this.isDropdown) {\n this.open();\n }\n break;\n case this.platform.KEYMAP.ESCAPE:\n this.cancelButtonClick();\n break;\n case this.platform.KEYMAP.SPACE:\n this.open();\n event.preventDefault();\n break;\n }\n }\n /** @hidden @internal */\n getPartValue(value, type) {\n const inputDateParts = DateTimeUtil.parseDateTimeFormat(this.inputFormat);\n const part = inputDateParts.find(element => element.type === type);\n return DateTimeUtil.getPartValue(value, part, part.format.length);\n }\n /** @hidden @internal */\n toISOString(value) {\n return value.toLocaleTimeString('en-GB', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n });\n }\n // #region ControlValueAccessor\n /** @hidden @internal */\n writeValue(value) {\n this._value = value;\n const date = this.parseToDate(value);\n if (date) {\n this._dateValue = new Date();\n this._dateValue.setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n this.setSelectedValue(this._dateValue);\n }\n else {\n this.setSelectedValue(null);\n }\n if (this.dateTimeEditor) {\n this.dateTimeEditor.value = date;\n }\n }\n /** @hidden @internal */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /** @hidden @internal */\n registerOnTouched(fn) {\n this._onTouchedCallback = fn;\n }\n /** @hidden @internal */\n registerOnValidatorChange(fn) {\n this._onValidatorChange = fn;\n }\n /** @hidden @internal */\n validate(control) {\n if (!control.value) {\n return null;\n }\n // InvalidDate handling\n if (isDate(control.value) && !DateTimeUtil.isValidDate(control.value)) {\n return { value: true };\n }\n const errors = {};\n const value = DateTimeUtil.isValidDate(control.value) ? control.value : DateTimeUtil.parseIsoDate(control.value);\n Object.assign(errors, DateTimeUtil.validateMinMax(value, this.minValue, this.maxValue, true, false));\n return Object.keys(errors).length > 0 ? errors : null;\n }\n /** @hidden @internal */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n //#endregion\n /** @hidden */\n ngOnInit() {\n this._ngControl = this._injector.get(NgControl, null);\n this.minDropdownValue = this.setMinMaxDropdownValue('min', this.minDateValue);\n this.maxDropdownValue = this.setMinMaxDropdownValue('max', this.maxDateValue);\n this.setSelectedValue(this._dateValue);\n super.ngOnInit();\n }\n /** @hidden */\n ngAfterViewInit() {\n super.ngAfterViewInit();\n this.subscribeToDateEditorEvents();\n this.subscribeToToggleDirectiveEvents();\n this._defaultDropDownOverlaySettings.excludeFromOutsideClick = [this._inputGroup.element.nativeElement];\n fromEvent(this.inputDirective.nativeElement, 'blur')\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (this.collapsed) {\n this.updateValidityOnBlur();\n }\n });\n this.subToIconsClicked(this.clearComponents, () => this.clear());\n this.clearComponents.changes.pipe(takeUntil(this._destroy$))\n .subscribe(() => this.subToIconsClicked(this.clearComponents, () => this.clear()));\n if (this._ngControl) {\n this._statusChanges$ = this._ngControl.statusChanges.subscribe(this.onStatusChanged.bind(this));\n this._inputGroup.isRequired = this.required;\n this.cdr.detectChanges();\n }\n }\n /** @hidden */\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this._statusChanges$) {\n this._statusChanges$.unsubscribe();\n }\n }\n /** @hidden */\n getEditElement() {\n return this.dateTimeEditor.nativeElement;\n }\n /**\n * Opens the picker's dialog UI.\n *\n * @param settings OverlaySettings - the overlay settings to use for positioning the drop down or dialog container according to\n * ```html\n * \n * \n * ```\n */\n open(settings) {\n if (this.disabled || !this.toggleRef.collapsed) {\n return;\n }\n this.setSelectedValue(this._dateValue);\n const overlaySettings = Object.assign({}, this.isDropdown\n ? this.dropDownOverlaySettings\n : this.dialogOverlaySettings, settings);\n this.toggleRef.open(overlaySettings);\n }\n /**\n * Closes the dropdown/dialog.\n * ```html\n * \n * ```\n * ```typescript\n * @ViewChild('timePicker', { read: IgxTimePickerComponent }) picker: IgxTimePickerComponent;\n * picker.close();\n * ```\n */\n close() {\n this.toggleRef.close();\n }\n toggle(settings) {\n if (this.toggleRef.collapsed) {\n this.open(settings);\n }\n else {\n this.close();\n }\n }\n /**\n * Clears the time picker value if it is a `string` or resets the time to `00:00:00` if the value is a Date object.\n *\n * @example\n * ```typescript\n * this.timePicker.clear();\n * ```\n */\n clear() {\n if (this.disabled) {\n return;\n }\n if (!this.toggleRef.collapsed) {\n this.close();\n }\n if (DateTimeUtil.isValidDate(this.value)) {\n const oldValue = new Date(this.value);\n this.value.setHours(0, 0, 0);\n if (this.value.getTime() !== oldValue.getTime()) {\n this.emitValueChange(oldValue, this.value);\n this._dateValue.setHours(0, 0, 0);\n this.dateTimeEditor.value = new Date(this.value);\n this.setSelectedValue(this._dateValue);\n }\n }\n else {\n this.value = null;\n }\n }\n /**\n * Selects time from the igxTimePicker.\n *\n * @example\n * ```typescript\n * this.timePicker.select(date);\n *\n * @param date Date object containing the time to be selected.\n */\n select(date) {\n this.value = date;\n }\n /**\n * Increment a specified `DatePart`.\n *\n * @param datePart The optional DatePart to increment. Defaults to Hour.\n * @param delta The optional delta to increment by. Overrides `itemsDelta`.\n * @example\n * ```typescript\n * this.timePicker.increment(DatePart.Hours);\n * ```\n */\n increment(datePart, delta) {\n this.dateTimeEditor.increment(datePart, delta);\n }\n /**\n * Decrement a specified `DatePart`\n *\n * @param datePart The optional DatePart to decrement. Defaults to Hour.\n * @param delta The optional delta to decrement by. Overrides `itemsDelta`.\n * @example\n * ```typescript\n * this.timePicker.decrement(DatePart.Seconds);\n * ```\n */\n decrement(datePart, delta) {\n this.dateTimeEditor.decrement(datePart, delta);\n }\n /** @hidden @internal */\n cancelButtonClick() {\n this.setSelectedValue(this._dateValue);\n this.dateTimeEditor.value = this.parseToDate(this.value);\n this.close();\n }\n /** @hidden @internal */\n okButtonClick() {\n this.updateValue(this._selectedDate);\n this.close();\n }\n /** @hidden @internal */\n onItemClick(item, dateType) {\n var _a, _b;\n let date = new Date(this._selectedDate);\n switch (dateType) {\n case 'hourList':\n let ampm;\n const selectedHour = parseInt(item, 10);\n let hours = selectedHour;\n if (this.showAmPmList) {\n ampm = this.getPartValue(date, 'ampm');\n hours = this.toTwentyFourHourFormat(hours, ampm);\n const minHours = ((_a = this.minDropdownValue) === null || _a === void 0 ? void 0 : _a.getHours()) || 0;\n const maxHours = ((_b = this.maxDropdownValue) === null || _b === void 0 ? void 0 : _b.getHours()) || 24;\n if (hours < minHours || hours > maxHours) {\n hours = hours < 12 ? hours + 12 : hours - 12;\n }\n }\n date.setHours(hours);\n date = this.validateDropdownValue(date);\n if (this.valueInRange(date, this.minDropdownValue, this.maxDropdownValue)) {\n this.setSelectedValue(date);\n }\n break;\n case 'minuteList': {\n const minutes = parseInt(item, 10);\n date.setMinutes(minutes);\n date = this.validateDropdownValue(date);\n this.setSelectedValue(date);\n break;\n }\n case 'secondsList': {\n const seconds = parseInt(item, 10);\n date.setSeconds(seconds);\n if (this.valueInRange(date, this.minDropdownValue, this.maxDropdownValue)) {\n this.setSelectedValue(date);\n }\n break;\n }\n case 'ampmList': {\n let hour = this._selectedDate.getHours();\n hour = item === 'AM' ? hour - 12 : hour + 12;\n date.setHours(hour);\n date = this.validateDropdownValue(date, true);\n this.setSelectedValue(date);\n break;\n }\n }\n this.updateEditorValue();\n }\n /** @hidden @internal */\n nextHour(delta) {\n var _a, _b;\n delta = delta > 0 ? 1 : -1;\n const previousDate = new Date(this._selectedDate);\n const minHours = (_a = this.minDropdownValue) === null || _a === void 0 ? void 0 : _a.getHours();\n const maxHours = (_b = this.maxDropdownValue) === null || _b === void 0 ? void 0 : _b.getHours();\n const previousHours = previousDate.getHours();\n let hours = previousHours + delta * this.itemsDelta.hours;\n if ((previousHours === maxHours && delta > 0) || (previousHours === minHours && delta < 0)) {\n hours = !this.spinLoop ? previousHours : delta > 0 ? minHours : maxHours;\n }\n this._selectedDate.setHours(hours);\n this._selectedDate = this.validateDropdownValue(this._selectedDate);\n this._selectedDate = new Date(this._selectedDate);\n this.updateEditorValue();\n }\n /** @hidden @internal */\n nextMinute(delta) {\n delta = delta > 0 ? 1 : -1;\n const minHours = this.minDropdownValue.getHours();\n const maxHours = this.maxDropdownValue.getHours();\n const hours = this._selectedDate.getHours();\n let minutes = this._selectedDate.getMinutes();\n const minMinutes = hours === minHours ? this.minDropdownValue.getMinutes() : 0;\n const maxMinutes = hours === maxHours ? this.maxDropdownValue.getMinutes() :\n 60 % this.itemsDelta.minutes > 0 ? 60 - (60 % this.itemsDelta.minutes) :\n 60 - this.itemsDelta.minutes;\n if ((delta < 0 && minutes === minMinutes) || (delta > 0 && minutes === maxMinutes)) {\n minutes = this.spinLoop && minutes === minMinutes ? maxMinutes : this.spinLoop && minutes === maxMinutes ? minMinutes : minutes;\n }\n else {\n minutes = minutes + delta * this.itemsDelta.minutes;\n }\n this._selectedDate.setMinutes(minutes);\n this._selectedDate = this.validateDropdownValue(this._selectedDate);\n this._selectedDate = new Date(this._selectedDate);\n this.updateEditorValue();\n }\n /** @hidden @internal */\n nextSeconds(delta) {\n delta = delta > 0 ? 1 : -1;\n const minHours = this.minDropdownValue.getHours();\n const maxHours = this.maxDropdownValue.getHours();\n const hours = this._selectedDate.getHours();\n const minutes = this._selectedDate.getMinutes();\n const minMinutes = this.minDropdownValue.getMinutes();\n const maxMinutes = this.maxDropdownValue.getMinutes();\n let seconds = this._selectedDate.getSeconds();\n const minSeconds = (hours === minHours && minutes === minMinutes) ? this.minDropdownValue.getSeconds() : 0;\n const maxSeconds = (hours === maxHours && minutes === maxMinutes) ? this.maxDropdownValue.getSeconds() :\n 60 % this.itemsDelta.seconds > 0 ? 60 - (60 % this.itemsDelta.seconds) :\n 60 - this.itemsDelta.seconds;\n if ((delta < 0 && seconds === minSeconds) || (delta > 0 && seconds === maxSeconds)) {\n seconds = this.spinLoop && seconds === minSeconds ? maxSeconds : this.spinLoop && seconds === maxSeconds ? minSeconds : seconds;\n }\n else {\n seconds = seconds + delta * this.itemsDelta.seconds;\n }\n this._selectedDate.setSeconds(seconds);\n this._selectedDate = this.validateDropdownValue(this._selectedDate);\n this._selectedDate = new Date(this._selectedDate);\n this.updateEditorValue();\n }\n /** @hidden @internal */\n nextAmPm(delta) {\n const ampm = this.getPartValue(this._selectedDate, 'ampm');\n if (!delta || (ampm === 'AM' && delta > 0) || (ampm === 'PM' && delta < 0)) {\n let hours = this._selectedDate.getHours();\n const sign = hours < 12 ? 1 : -1;\n hours = hours + sign * 12;\n this._selectedDate.setHours(hours);\n this._selectedDate = this.validateDropdownValue(this._selectedDate, true);\n this._selectedDate = new Date(this._selectedDate);\n this.updateEditorValue();\n }\n }\n /** @hidden @internal */\n setSelectedValue(value) {\n this._selectedDate = value ? new Date(value) : null;\n if (!DateTimeUtil.isValidDate(this._selectedDate)) {\n this._selectedDate = new Date(this.minDropdownValue);\n return;\n }\n if (this.minValue && DateTimeUtil.lessThanMinValue(this._selectedDate, this.minDropdownValue, true, false)) {\n this._selectedDate = new Date(this.minDropdownValue);\n return;\n }\n if (this.maxValue && DateTimeUtil.greaterThanMaxValue(this._selectedDate, this.maxDropdownValue, true, false)) {\n this._selectedDate = new Date(this.maxDropdownValue);\n return;\n }\n if (this._selectedDate.getHours() % this.itemsDelta.hours > 0) {\n this._selectedDate.setHours(this._selectedDate.getHours() + this.itemsDelta.hours - this._selectedDate.getHours() % this.itemsDelta.hours, 0, 0);\n }\n if (this._selectedDate.getMinutes() % this.itemsDelta.minutes > 0) {\n this._selectedDate.setHours(this._selectedDate.getHours(), this._selectedDate.getMinutes() + this.itemsDelta.minutes - this._selectedDate.getMinutes() % this.itemsDelta.minutes, 0);\n }\n if (this._selectedDate.getSeconds() % this.itemsDelta.seconds > 0) {\n this._selectedDate.setSeconds(this._selectedDate.getSeconds() + this.itemsDelta.seconds - this._selectedDate.getSeconds() % this.itemsDelta.seconds);\n }\n }\n onStatusChanged() {\n if ((this._ngControl.control.touched || this._ngControl.control.dirty) &&\n (this._ngControl.control.validator || this._ngControl.control.asyncValidator) &&\n !this._ngControl.disabled) {\n if (this._inputGroup.isFocused) {\n this.inputDirective.valid = this._ngControl.valid ? IgxInputState.VALID : IgxInputState.INVALID;\n }\n else {\n this.inputDirective.valid = this._ngControl.valid ? IgxInputState.INITIAL : IgxInputState.INVALID;\n }\n }\n else {\n // B.P. 18 May 2021: IgxDatePicker does not reset its state upon resetForm #9526\n this.inputDirective.valid = IgxInputState.INITIAL;\n }\n if (this._inputGroup && this._inputGroup.isRequired !== this.required) {\n this._inputGroup.isRequired = this.required;\n }\n }\n setMinMaxDropdownValue(type, time) {\n let delta;\n const sign = type === 'min' ? 1 : -1;\n const hours = time.getHours();\n let minutes = time.getMinutes();\n let seconds = time.getSeconds();\n if (this.showHoursList && hours % this.itemsDelta.hours > 0) {\n delta = type === 'min' ? this.itemsDelta.hours - hours % this.itemsDelta.hours\n : hours % this.itemsDelta.hours;\n minutes = type === 'min' ? 0\n : 60 % this.itemsDelta.minutes > 0 ? 60 - 60 % this.itemsDelta.minutes\n : 60 - this.itemsDelta.minutes;\n seconds = type === 'min' ? 0\n : 60 % this.itemsDelta.seconds > 0 ? 60 - 60 % this.itemsDelta.seconds\n : 60 - this.itemsDelta.seconds;\n time.setHours(hours + sign * delta, minutes, seconds);\n }\n else if (this.showMinutesList && minutes % this.itemsDelta.minutes > 0) {\n delta = type === 'min' ? this.itemsDelta.minutes - minutes % this.itemsDelta.minutes\n : minutes % this.itemsDelta.minutes;\n seconds = type === 'min' ? 0\n : 60 % this.itemsDelta.seconds > 0 ? 60 - 60 % this.itemsDelta.seconds\n : 60 - this.itemsDelta.seconds;\n time.setHours(hours, minutes + sign * delta, seconds);\n }\n else if (this.showSecondsList && seconds % this.itemsDelta.seconds > 0) {\n delta = type === 'min' ? this.itemsDelta.seconds - seconds % this.itemsDelta.seconds\n : seconds % this.itemsDelta.seconds;\n time.setHours(hours, minutes, seconds + sign * delta);\n }\n return time;\n }\n initializeContainer() {\n requestAnimationFrame(() => {\n if (this.hourList) {\n this.hourList.nativeElement.focus();\n }\n else if (this.minuteList) {\n this.minuteList.nativeElement.focus();\n }\n else if (this.secondsList) {\n this.secondsList.nativeElement.focus();\n }\n });\n }\n validateDropdownValue(date, isAmPm = false) {\n if (date > this.maxDropdownValue) {\n if (isAmPm && date.getHours() !== this.maxDropdownValue.getHours()) {\n date.setHours(12);\n }\n else {\n date = new Date(this.maxDropdownValue);\n }\n }\n if (date < this.minDropdownValue) {\n date = new Date(this.minDropdownValue);\n }\n return date;\n }\n emitValueChange(oldValue, newValue) {\n if (!isEqual(oldValue, newValue)) {\n this.valueChange.emit(newValue);\n }\n }\n emitValidationFailedEvent(previousValue) {\n const args = {\n owner: this,\n previousValue,\n currentValue: this.value\n };\n this.validationFailed.emit(args);\n }\n updateValidityOnBlur() {\n this._onTouchedCallback();\n if (this._ngControl) {\n if (!this._ngControl.valid) {\n this.inputDirective.valid = IgxInputState.INVALID;\n }\n else {\n this.inputDirective.valid = IgxInputState.INITIAL;\n }\n }\n }\n valueInRange(value, minValue, maxValue) {\n if (minValue && DateTimeUtil.lessThanMinValue(value, minValue, true, false)) {\n return false;\n }\n if (maxValue && DateTimeUtil.greaterThanMaxValue(value, maxValue, true, false)) {\n return false;\n }\n return true;\n }\n parseToDate(value) {\n return DateTimeUtil.isValidDate(value) ? value : DateTimeUtil.parseIsoDate(value);\n }\n toTwentyFourHourFormat(hour, ampm) {\n if (ampm === 'PM' && hour < 12) {\n hour += 12;\n }\n else if (ampm === 'AM' && hour === 12) {\n hour = 0;\n }\n return hour;\n }\n updateValue(newValue) {\n if (!this.value) {\n this.value = newValue ? new Date(newValue) : newValue;\n }\n else if (isDate(this.value)) {\n const date = new Date(this.value);\n date.setHours((newValue === null || newValue === void 0 ? void 0 : newValue.getHours()) || 0, (newValue === null || newValue === void 0 ? void 0 : newValue.getMinutes()) || 0, (newValue === null || newValue === void 0 ? void 0 : newValue.getSeconds()) || 0);\n this.value = date;\n }\n else {\n this.value = newValue ? this.toISOString(newValue) : newValue;\n }\n }\n updateEditorValue() {\n const date = this.dateTimeEditor.value ? new Date(this.dateTimeEditor.value) : new Date();\n date.setHours(this._selectedDate.getHours(), this._selectedDate.getMinutes(), this._selectedDate.getSeconds());\n this.dateTimeEditor.value = date;\n }\n subscribeToDateEditorEvents() {\n this.dateTimeEditor.valueChange.pipe(\n // internal date editor directive is only used w/ Date object values:\n takeUntil(this._destroy$)).subscribe((date) => {\n this.updateValue(date);\n });\n this.dateTimeEditor.validationFailed.pipe(takeUntil(this._destroy$)).subscribe((event) => {\n this.emitValidationFailedEvent(event.oldValue);\n });\n }\n subscribeToToggleDirectiveEvents() {\n if (this.toggleRef) {\n if (this._inputGroup) {\n this.toggleRef.element.style.width = this._inputGroup.element.nativeElement.getBoundingClientRect().width + 'px';\n }\n this.toggleRef.opening.pipe(takeUntil(this._destroy$)).subscribe((e) => {\n const args = { owner: this, event: e.event, cancel: false };\n this.opening.emit(args);\n e.cancel = args.cancel;\n if (args.cancel) {\n return;\n }\n this.initializeContainer();\n });\n this.toggleRef.opened.pipe(takeUntil(this._destroy$)).subscribe(() => {\n this.opened.emit({ owner: this });\n });\n this.toggleRef.closed.pipe(takeUntil(this._destroy$)).subscribe(() => {\n this.closed.emit({ owner: this });\n });\n this.toggleRef.closing.pipe(takeUntil(this._destroy$)).subscribe((e) => {\n var _a;\n const args = { owner: this, event: e.event, cancel: false };\n this.closing.emit(args);\n e.cancel = args.cancel;\n if (args.cancel) {\n return;\n }\n const value = this.parseToDate(this.value);\n if (((_a = this.dateTimeEditor.value) === null || _a === void 0 ? void 0 : _a.getTime()) !== (value === null || value === void 0 ? void 0 : value.getTime())) {\n this.updateValue(this._selectedDate);\n }\n // Do not focus the input if clicking outside in dropdown mode\n const input = this.getEditElement();\n if (input && !(e.event && this.isDropdown)) {\n input.focus();\n }\n else {\n this.updateValidityOnBlur();\n }\n });\n }\n }\n}\nIgxTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTimePickerComponent, deps: [{ token: i0.ElementRef }, { token: LOCALE_ID }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }, { token: i0.Injector }, { token: PlatformUtil }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTimePickerComponent, selector: \"igx-time-picker\", inputs: { id: \"id\", displayFormat: \"displayFormat\", inputFormat: \"inputFormat\", mode: \"mode\", minValue: \"minValue\", maxValue: \"maxValue\", spinLoop: \"spinLoop\", formatter: \"formatter\", headerOrientation: \"headerOrientation\", readOnly: \"readOnly\", value: \"value\", resourceStrings: \"resourceStrings\", okButtonLabel: \"okButtonLabel\", cancelButtonLabel: \"cancelButtonLabel\", itemsDelta: \"itemsDelta\" }, outputs: { selected: \"selected\", valueChange: \"valueChange\", validationFailed: \"validationFailed\" }, host: { listeners: { \"keydown\": \"onKeyDown($event)\" }, properties: { \"attr.id\": \"this.id\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: IgxTimePickerComponent,\n multi: true\n },\n {\n provide: IGX_TIME_PICKER_COMPONENT,\n useExisting: IgxTimePickerComponent\n },\n {\n provide: NG_VALIDATORS,\n useExisting: IgxTimePickerComponent,\n multi: true\n }\n ], queries: [{ propertyName: \"label\", first: true, predicate: IgxLabelDirective, descendants: true }, { propertyName: \"timePickerActionsDirective\", first: true, predicate: IgxTimePickerActionsDirective, descendants: true }, { propertyName: \"clearComponents\", predicate: IgxPickerClearComponent }], viewQueries: [{ propertyName: \"hourList\", first: true, predicate: [\"hourList\"], descendants: true }, { propertyName: \"minuteList\", first: true, predicate: [\"minuteList\"], descendants: true }, { propertyName: \"secondsList\", first: true, predicate: [\"secondsList\"], descendants: true }, { propertyName: \"ampmList\", first: true, predicate: [\"ampmList\"], descendants: true }, { propertyName: \"inputDirective\", first: true, predicate: IgxInputDirective, descendants: true, read: IgxInputDirective }, { propertyName: \"_inputGroup\", first: true, predicate: IgxInputGroupComponent, descendants: true }, { propertyName: \"dateTimeEditor\", first: true, predicate: IgxDateTimeEditorDirective, descendants: true, static: true }, { propertyName: \"toggleRef\", first: true, predicate: IgxToggleDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: \"\\n \\n\\n \\n access_time\\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n clear\\n \\n\\n \\n \\n \\n \\n \\n \\n\\n\\n\\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n

    \\n {{ this.selectedDate | timeFormatPipe }}\\n

    \\n
    \\n
    \\n
    \\n
    \\n {{ hour }}\\n
    \\n
    \\n {{ minute }}\\n
    \\n
    \\n {{ seconds }}\\n
    \\n
    \\n {{ ampm }}\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\", styles: [\":host{display:block}\\n\"], dependencies: [{ kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgClass; }), selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgForOf; }), selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgIf; }), selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgTemplateOutlet; }), selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxDateTimeEditorDirective; }), selector: \"[igxDateTimeEditor]\", inputs: [\"locale\", \"minValue\", \"maxValue\", \"spinLoop\", \"displayFormat\", \"igxDateTimeEditor\", \"value\", \"spinDelta\"], outputs: [\"valueChange\", \"validationFailed\"], exportAs: [\"igxDateTimeEditor\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxInputGroupComponent; }), selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxInputDirective; }), selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxPrefixDirective; }), selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxSuffixDirective; }), selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxButtonDirective; }), selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxIconComponent; }), selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxToggleDirective; }), selector: \"[igxToggle]\", inputs: [\"id\"], outputs: [\"opened\", \"opening\", \"closed\", \"closing\", \"appended\"], exportAs: [\"toggle\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxTextSelectionDirective; }), selector: \"[igxTextSelection]\", inputs: [\"igxTextSelection\"], exportAs: [\"igxTextSelection\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxItemListDirective; }), selector: \"[igxItemList]\", inputs: [\"igxItemList\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxTimeItemDirective; }), selector: \"[igxTimeItem]\", inputs: [\"igxTimeItem\"], exportAs: [\"timeItem\"] }, { kind: \"pipe\", type: i0.forwardRef(function () { return TimeFormatPipe; }), name: \"timeFormatPipe\" }, { kind: \"pipe\", type: i0.forwardRef(function () { return TimeItemPipe; }), name: \"timeItemPipe\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTimePickerComponent, decorators: [{\n type: Component,\n args: [{ providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: IgxTimePickerComponent,\n multi: true\n },\n {\n provide: IGX_TIME_PICKER_COMPONENT,\n useExisting: IgxTimePickerComponent\n },\n {\n provide: NG_VALIDATORS,\n useExisting: IgxTimePickerComponent,\n multi: true\n }\n ], selector: 'igx-time-picker', template: \"\\n \\n\\n \\n access_time\\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n clear\\n \\n\\n \\n \\n \\n \\n \\n \\n\\n\\n\\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n

    \\n {{ this.selectedDate | timeFormatPipe }}\\n

    \\n
    \\n
    \\n
    \\n
    \\n {{ hour }}\\n
    \\n
    \\n {{ minute }}\\n
    \\n
    \\n {{ seconds }}\\n
    \\n
    \\n {{ ampm }}\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\", styles: [\":host{display:block}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IGX_INPUT_GROUP_TYPE]\n }] }, { type: i0.Injector }, { type: PlatformUtil }, { type: i0.ChangeDetectorRef }];\n }, propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], displayFormat: [{\n type: Input\n }], inputFormat: [{\n type: Input\n }], mode: [{\n type: Input\n }], minValue: [{\n type: Input\n }], maxValue: [{\n type: Input\n }], spinLoop: [{\n type: Input\n }], formatter: [{\n type: Input\n }], headerOrientation: [{\n type: Input\n }], readOnly: [{\n type: Input\n }], selected: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], validationFailed: [{\n type: Output\n }], hourList: [{\n type: ViewChild,\n args: ['hourList']\n }], minuteList: [{\n type: ViewChild,\n args: ['minuteList']\n }], secondsList: [{\n type: ViewChild,\n args: ['secondsList']\n }], ampmList: [{\n type: ViewChild,\n args: ['ampmList']\n }], clearComponents: [{\n type: ContentChildren,\n args: [IgxPickerClearComponent]\n }], label: [{\n type: ContentChild,\n args: [IgxLabelDirective]\n }], timePickerActionsDirective: [{\n type: ContentChild,\n args: [IgxTimePickerActionsDirective]\n }], inputDirective: [{\n type: ViewChild,\n args: [IgxInputDirective, { read: IgxInputDirective }]\n }], _inputGroup: [{\n type: ViewChild,\n args: [IgxInputGroupComponent]\n }], dateTimeEditor: [{\n type: ViewChild,\n args: [IgxDateTimeEditorDirective, { static: true }]\n }], toggleRef: [{\n type: ViewChild,\n args: [IgxToggleDirective]\n }], value: [{\n type: Input\n }], resourceStrings: [{\n type: Input\n }], okButtonLabel: [{\n type: Input\n }], cancelButtonLabel: [{\n type: Input\n }], itemsDelta: [{\n type: Input\n }], onKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n/**\n * @hidden\n */\nclass IgxTimePickerModule {\n}\nIgxTimePickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTimePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxTimePickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTimePickerModule, declarations: [IgxTimePickerComponent, IgxItemListDirective,\n IgxTimeItemDirective,\n IgxTimePickerTemplateDirective,\n IgxTimePickerActionsDirective,\n TimeFormatPipe,\n TimeItemPipe], imports: [CommonModule,\n IgxDateTimeEditorModule,\n IgxInputGroupModule,\n IgxIconModule,\n IgxButtonModule,\n IgxMaskModule,\n IgxToggleModule,\n IgxTextSelectionModule], exports: [IgxTimePickerComponent, IgxTimePickerTemplateDirective,\n IgxTimePickerActionsDirective,\n IgxPickersCommonModule,\n IgxInputGroupModule] });\nIgxTimePickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTimePickerModule, imports: [CommonModule,\n IgxDateTimeEditorModule,\n IgxInputGroupModule,\n IgxIconModule,\n IgxButtonModule,\n IgxMaskModule,\n IgxToggleModule,\n IgxTextSelectionModule, IgxPickersCommonModule,\n IgxInputGroupModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTimePickerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxTimePickerComponent,\n IgxItemListDirective,\n IgxTimeItemDirective,\n IgxTimePickerTemplateDirective,\n IgxTimePickerActionsDirective,\n TimeFormatPipe,\n TimeItemPipe\n ],\n exports: [\n IgxTimePickerComponent,\n IgxTimePickerTemplateDirective,\n IgxTimePickerActionsDirective,\n IgxPickersCommonModule,\n IgxInputGroupModule\n ],\n imports: [\n CommonModule,\n IgxDateTimeEditorModule,\n IgxInputGroupModule,\n IgxIconModule,\n IgxButtonModule,\n IgxMaskModule,\n IgxToggleModule,\n IgxTextSelectionModule\n ],\n providers: []\n }]\n }] });\n\n/**\n * @hidden\n */\nclass IgxExcelStyleDateExpressionComponent extends IgxExcelStyleDefaultExpressionComponent {\n get inputValuesElement() {\n var _a, _b;\n return ((_a = this.picker) === null || _a === void 0 ? void 0 : _a.getEditElement()) || ((_b = this.input) === null || _b === void 0 ? void 0 : _b.nativeElement);\n }\n get inputDatePlaceholder() {\n return this.grid.resourceStrings['igx_grid_filter_row_date_placeholder'];\n }\n get inputTimePlaceholder() {\n return this.grid.resourceStrings['igx_grid_filter_row_time_placeholder'];\n }\n get weekStart() {\n return getLocaleFirstDayOfWeek(this.grid.locale);\n }\n}\nIgxExcelStyleDateExpressionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleDateExpressionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxExcelStyleDateExpressionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleDateExpressionComponent, selector: \"igx-excel-style-date-expression\", viewQueries: [{ propertyName: \"input\", first: true, predicate: [\"input\"], descendants: true, read: IgxInputDirective }, { propertyName: \"picker\", first: true, predicate: [\"picker\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n filter_list\\n \\n \\n \\n {{translateCondition(condition)}}\\n \\n\\n\\n\\n \\n \\n \\n\\n\\n\\n \\n \\n \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n \\n {{ grid.resourceStrings.igx_grid_filter_operator_and }}\\n \\n\\n \\n {{ grid.resourceStrings.igx_grid_filter_operator_or }}\\n \\n\\n\\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i5.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i5.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i5.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxButtonGroupComponent, selector: \"igx-buttongroup\", inputs: [\"id\", \"itemContentCssClass\", \"multiSelection\", \"values\", \"disabled\", \"alignment\"], outputs: [\"selected\", \"deselected\"] }, { kind: \"component\", type: IgxDatePickerComponent, selector: \"igx-date-picker\", inputs: [\"hideOutsideDays\", \"displayMonthsCount\", \"showWeekNumbers\", \"formatter\", \"headerOrientation\", \"todayButtonLabel\", \"cancelButtonLabel\", \"spinLoop\", \"spinDelta\", \"outlet\", \"id\", \"formatViews\", \"disabledDates\", \"specialDates\", \"calendarFormat\", \"value\", \"minValue\", \"maxValue\", \"resourceStrings\", \"readOnly\"], outputs: [\"valueChange\", \"validationFailed\"] }, { kind: \"component\", type: IgxPickerToggleComponent, selector: \"igx-picker-toggle\", outputs: [\"clicked\"] }, { kind: \"component\", type: IgxPickerClearComponent, selector: \"igx-picker-clear\" }, { kind: \"component\", type: IgxInputGroupComponent, selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: IgxInputDirective, selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: IgxPrefixDirective, selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"component\", type: IgxTimePickerComponent, selector: \"igx-time-picker\", inputs: [\"id\", \"displayFormat\", \"inputFormat\", \"mode\", \"minValue\", \"maxValue\", \"spinLoop\", \"formatter\", \"headerOrientation\", \"readOnly\", \"value\", \"resourceStrings\", \"okButtonLabel\", \"cancelButtonLabel\", \"itemsDelta\"], outputs: [\"selected\", \"valueChange\", \"validationFailed\"] }, { kind: \"directive\", type: IgxOverlayOutletDirective, selector: \"[igxOverlayOutlet]\", exportAs: [\"overlay-outlet\"] }, { kind: \"component\", type: IgxSelectComponent, selector: \"igx-select\", inputs: [\"placeholder\", \"disabled\", \"overlaySettings\", \"value\", \"type\"], outputs: [\"opening\", \"opened\", \"closing\", \"closed\"] }, { kind: \"component\", type: IgxSelectItemComponent, selector: \"igx-select-item\", inputs: [\"text\"] }, { kind: \"directive\", type: IgxDateTimeEditorDirective, selector: \"[igxDateTimeEditor]\", inputs: [\"locale\", \"minValue\", \"maxValue\", \"spinLoop\", \"displayFormat\", \"igxDateTimeEditor\", \"value\", \"spinDelta\"], outputs: [\"valueChange\", \"validationFailed\"], exportAs: [\"igxDateTimeEditor\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleDateExpressionComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-excel-style-date-expression', template: \"\\n \\n \\n filter_list\\n \\n \\n \\n {{translateCondition(condition)}}\\n \\n\\n\\n\\n \\n \\n \\n\\n\\n\\n \\n \\n \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n \\n {{ grid.resourceStrings.igx_grid_filter_operator_and }}\\n \\n\\n \\n {{ grid.resourceStrings.igx_grid_filter_operator_or }}\\n \\n\\n\\n
    \\n
    \\n\" }]\n }], propDecorators: { input: [{\n type: ViewChild,\n args: ['input', { read: IgxInputDirective, static: false }]\n }], picker: [{\n type: ViewChild,\n args: ['picker']\n }] } });\n\n/**\n * @hidden @internal\n */\nclass FilterListItem {\n constructor() {\n this.isSpecial = false;\n this.isBlanks = false;\n }\n}\n/**\n * @hidden\n */\nclass ExpressionUI {\n constructor() {\n this.isSelected = false;\n this.isVisible = true;\n }\n}\nfunction generateExpressionsList(expressions, operator, expressionsUIs) {\n generateExpressionsListRecursive(expressions, operator, expressionsUIs);\n // The beforeOperator of the first expression and the afterOperator of the last expression should be null\n if (expressionsUIs.length) {\n expressionsUIs[expressionsUIs.length - 1].afterOperator = null;\n }\n}\nfunction generateExpressionsListRecursive(expressions, operator, expressionsUIs) {\n if (!expressions) {\n return;\n }\n if (expressions instanceof FilteringExpressionsTree) {\n const expressionsTree = expressions;\n for (const operand of expressionsTree.filteringOperands) {\n generateExpressionsListRecursive(operand, expressionsTree.operator, expressionsUIs);\n }\n if (expressionsUIs.length) {\n expressionsUIs[expressionsUIs.length - 1].afterOperator = operator;\n }\n }\n else {\n const exprUI = new ExpressionUI();\n exprUI.expression = expressions;\n exprUI.afterOperator = operator;\n const prevExprUI = expressionsUIs[expressionsUIs.length - 1];\n if (prevExprUI) {\n exprUI.beforeOperator = prevExprUI.afterOperator;\n }\n expressionsUIs.push(exprUI);\n }\n}\n\n/**\n * @hidden\n */\nclass IgxExcelStyleCustomDialogComponent {\n constructor(overlayService, cdr, platform) {\n this.overlayService = overlayService;\n this.cdr = cdr;\n this.platform = platform;\n this.expressionsList = new Array();\n this._customDialogPositionSettings = {\n verticalDirection: VerticalAlignment.Middle,\n horizontalDirection: HorizontalAlignment.Center,\n horizontalStartPoint: HorizontalAlignment.Center,\n verticalStartPoint: VerticalAlignment.Middle\n };\n this._customDialogOverlaySettings = {\n closeOnOutsideClick: true,\n modal: false,\n positionStrategy: new AutoPositionStrategy(this._customDialogPositionSettings),\n scrollStrategy: new AbsoluteScrollStrategy()\n };\n }\n ngAfterViewInit() {\n this._customDialogOverlaySettings.outlet = this.grid.outlet;\n }\n get template() {\n if (this.column.dataType === GridColumnDataType.Date) {\n return this.dateExpressionTemplate;\n }\n return this.defaultExpressionTemplate;\n }\n get grid() {\n return this.filteringService.grid;\n }\n onCustomDialogOpening() {\n if (this.selectedOperator) {\n this.createInitialExpressionUIElement();\n }\n }\n onCustomDialogOpened() {\n if (this.expressionComponents.first) {\n this.expressionComponents.first.focus();\n }\n }\n open(esf) {\n this._customDialogOverlaySettings.target =\n this.overlayComponentId ?\n this.grid.rootGrid ? this.grid.rootGrid.nativeElement : this.grid.nativeElement :\n esf;\n this.toggle.open(this._customDialogOverlaySettings);\n this.overlayComponentId = this.toggle.overlayId;\n }\n onClearButtonClick() {\n this.filteringService.clearFilter(this.column.field);\n this.createInitialExpressionUIElement();\n this.cdr.detectChanges();\n }\n closeDialog() {\n if (this.overlayComponentId) {\n this.overlayService.hide(this.overlayComponentId);\n this.overlayComponentId = null;\n }\n else {\n this.toggle.close();\n }\n }\n onApplyButtonClick() {\n this.expressionsList = this.expressionsList.filter(element => element.expression.condition &&\n (element.expression.searchVal || element.expression.searchVal === 0 || element.expression.condition.isUnary));\n if (this.expressionsList.length > 0) {\n this.expressionsList[0].beforeOperator = null;\n this.expressionsList[this.expressionsList.length - 1].afterOperator = null;\n }\n this.filteringService.filterInternal(this.column.field, this.expressionsList);\n this.closeDialog();\n }\n onAddButtonClick() {\n const exprUI = new ExpressionUI();\n exprUI.expression = {\n condition: null,\n fieldName: this.column.field,\n ignoreCase: this.column.filteringIgnoreCase,\n searchVal: null\n };\n this.expressionsList[this.expressionsList.length - 1].afterOperator = FilteringLogic.And;\n exprUI.beforeOperator = this.expressionsList[this.expressionsList.length - 1].afterOperator;\n this.expressionsList.push(exprUI);\n this.markChildrenForCheck();\n this.scrollToBottom();\n }\n onExpressionRemoved(event) {\n const indexToRemove = this.expressionsList.indexOf(event);\n if (indexToRemove === 0 && this.expressionsList.length > 1) {\n this.expressionsList[1].beforeOperator = null;\n }\n else if (indexToRemove === this.expressionsList.length - 1) {\n this.expressionsList[indexToRemove - 1].afterOperator = null;\n }\n else {\n this.expressionsList[indexToRemove - 1].afterOperator = this.expressionsList[indexToRemove + 1].beforeOperator;\n this.expressionsList[0].beforeOperator = null;\n this.expressionsList[this.expressionsList.length - 1].afterOperator = null;\n }\n this.expressionsList.splice(indexToRemove, 1);\n this.cdr.detectChanges();\n this.markChildrenForCheck();\n }\n onLogicOperatorChanged(event) {\n const index = this.expressionsList.indexOf(event.target);\n event.target.afterOperator = event.newValue;\n if (index + 1 < this.expressionsList.length) {\n this.expressionsList[index + 1].beforeOperator = event.newValue;\n }\n }\n onKeyDown(eventArgs) {\n eventArgs.stopPropagation();\n }\n onApplyButtonKeyDown(eventArgs) {\n if (eventArgs.key === this.platform.KEYMAP.TAB && !eventArgs.shiftKey) {\n eventArgs.stopPropagation();\n eventArgs.preventDefault();\n }\n }\n createCondition(conditionName) {\n switch (this.column.dataType) {\n case GridColumnDataType.Boolean:\n return IgxBooleanFilteringOperand.instance().condition(conditionName);\n case GridColumnDataType.Number:\n case GridColumnDataType.Currency:\n case GridColumnDataType.Percent:\n return IgxNumberFilteringOperand.instance().condition(conditionName);\n case GridColumnDataType.Date:\n return IgxDateFilteringOperand.instance().condition(conditionName);\n case GridColumnDataType.Time:\n return IgxTimeFilteringOperand.instance().condition(conditionName);\n case GridColumnDataType.DateTime:\n return IgxDateTimeFilteringOperand.instance().condition(conditionName);\n default:\n return IgxStringFilteringOperand.instance().condition(conditionName);\n }\n }\n markChildrenForCheck() {\n this.expressionComponents.forEach(x => x.cdr.markForCheck());\n this.expressionDateComponents.forEach(x => x.cdr.markForCheck());\n }\n createInitialExpressionUIElement() {\n this.expressionsList = [];\n const firstExprUI = new ExpressionUI();\n firstExprUI.expression = {\n condition: this.createCondition(this.selectedOperator),\n fieldName: this.column.field,\n ignoreCase: this.column.filteringIgnoreCase,\n searchVal: null\n };\n firstExprUI.afterOperator = FilteringLogic.And;\n this.expressionsList.push(firstExprUI);\n const secondExprUI = new ExpressionUI();\n secondExprUI.expression = {\n condition: null,\n fieldName: this.column.field,\n ignoreCase: this.column.filteringIgnoreCase,\n searchVal: null\n };\n secondExprUI.beforeOperator = FilteringLogic.And;\n this.expressionsList.push(secondExprUI);\n }\n scrollToBottom() {\n requestAnimationFrame(() => {\n this.expressionsContainer.nativeElement.scrollTop = this.expressionsContainer.nativeElement.scrollHeight;\n });\n }\n}\nIgxExcelStyleCustomDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleCustomDialogComponent, deps: [{ token: IgxOverlayService }, { token: i0.ChangeDetectorRef }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nIgxExcelStyleCustomDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleCustomDialogComponent, selector: \"igx-excel-style-custom-dialog\", inputs: { expressionsList: \"expressionsList\", column: \"column\", selectedOperator: \"selectedOperator\", filteringService: \"filteringService\", overlayComponentId: \"overlayComponentId\", displayDensity: \"displayDensity\" }, viewQueries: [{ propertyName: \"toggle\", first: true, predicate: [\"toggle\"], descendants: true, read: IgxToggleDirective, static: true }, { propertyName: \"defaultExpressionTemplate\", first: true, predicate: [\"defaultExpressionTemplate\"], descendants: true, read: TemplateRef }, { propertyName: \"dateExpressionTemplate\", first: true, predicate: [\"dateExpressionTemplate\"], descendants: true, read: TemplateRef }, { propertyName: \"expressionsContainer\", first: true, predicate: [\"expressionsContainer\"], descendants: true, static: true }, { propertyName: \"expressionComponents\", predicate: IgxExcelStyleDefaultExpressionComponent, descendants: true }, { propertyName: \"expressionDateComponents\", predicate: IgxExcelStyleDateExpressionComponent, descendants: true }], ngImport: i0, template: \"
    \\n
    \\n

    \\n {{ grid.resourceStrings.igx_grid_excel_custom_dialog_header }}{{ column.header || column.field }}\\n

    \\n
    \\n\\n
    \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n\\n \\n
    \\n\\n
    \\n
    \\n \\n {{ grid.resourceStrings.igx_grid_excel_custom_dialog_clear }}\\n \\n
    \\n
    \\n \\n {{ grid.resourceStrings.igx_grid_excel_cancel }}\\n \\n
    \\n
    \\n \\n {{ grid.resourceStrings.igx_grid_excel_apply }}\\n \\n
    \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxToggleDirective, selector: \"[igxToggle]\", inputs: [\"id\"], outputs: [\"opened\", \"opening\", \"closed\", \"closing\", \"appended\"], exportAs: [\"toggle\"] }, { kind: \"component\", type: IgxExcelStyleDefaultExpressionComponent, selector: \"igx-excel-style-default-expression\", inputs: [\"column\", \"expressionUI\", \"expressionsList\", \"grid\", \"displayDensity\"], outputs: [\"expressionRemoved\", \"logicOperatorChanged\"] }, { kind: \"component\", type: IgxExcelStyleDateExpressionComponent, selector: \"igx-excel-style-date-expression\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleCustomDialogComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-excel-style-custom-dialog', template: \"
    \\n
    \\n

    \\n {{ grid.resourceStrings.igx_grid_excel_custom_dialog_header }}{{ column.header || column.field }}\\n

    \\n
    \\n\\n
    \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n\\n \\n
    \\n\\n
    \\n
    \\n \\n {{ grid.resourceStrings.igx_grid_excel_custom_dialog_clear }}\\n \\n
    \\n
    \\n \\n {{ grid.resourceStrings.igx_grid_excel_cancel }}\\n \\n
    \\n
    \\n \\n {{ grid.resourceStrings.igx_grid_excel_apply }}\\n \\n
    \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: IgxOverlayService }, { type: i0.ChangeDetectorRef }, { type: PlatformUtil }]; }, propDecorators: { expressionsList: [{\n type: Input\n }], column: [{\n type: Input\n }], selectedOperator: [{\n type: Input\n }], filteringService: [{\n type: Input\n }], overlayComponentId: [{\n type: Input\n }], displayDensity: [{\n type: Input\n }], toggle: [{\n type: ViewChild,\n args: ['toggle', { read: IgxToggleDirective, static: true }]\n }], defaultExpressionTemplate: [{\n type: ViewChild,\n args: ['defaultExpressionTemplate', { read: TemplateRef }]\n }], dateExpressionTemplate: [{\n type: ViewChild,\n args: ['dateExpressionTemplate', { read: TemplateRef }]\n }], expressionsContainer: [{\n type: ViewChild,\n args: ['expressionsContainer', { static: true }]\n }], expressionComponents: [{\n type: ViewChildren,\n args: [IgxExcelStyleDefaultExpressionComponent]\n }], expressionDateComponents: [{\n type: ViewChildren,\n args: [IgxExcelStyleDateExpressionComponent]\n }] } });\n\n/**\n * A component used for presenting Excel style conditional filter UI.\n */\nclass IgxExcelStyleConditionalFilterComponent {\n constructor(esf, platform) {\n this.esf = esf;\n this.platform = platform;\n this.shouldOpenSubMenu = true;\n this.destroy$ = new Subject();\n this._subMenuPositionSettings = {\n verticalStartPoint: VerticalAlignment.Top\n };\n this._subMenuOverlaySettings = {\n closeOnOutsideClick: true,\n modal: false,\n positionStrategy: new AutoPositionStrategy(this._subMenuPositionSettings),\n scrollStrategy: new AbsoluteScrollStrategy()\n };\n this.esf.columnChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (this.esf.grid) {\n this.shouldOpenSubMenu = true;\n this._subMenuOverlaySettings.outlet = this.esf.grid.outlet;\n }\n });\n if (this.esf.grid) {\n this._subMenuOverlaySettings.outlet = this.esf.grid.outlet;\n }\n }\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n /**\n * @hidden @internal\n */\n onTextFilterKeyDown(eventArgs) {\n if (eventArgs.key === this.platform.KEYMAP.ENTER) {\n this.onTextFilterClick(eventArgs);\n }\n }\n /**\n * @hidden @internal\n */\n onTextFilterClick(eventArgs) {\n if (this.shouldOpenSubMenu) {\n this._subMenuOverlaySettings.target = eventArgs.currentTarget;\n const gridRect = this.esf.grid.nativeElement.getBoundingClientRect();\n const dropdownRect = this.esf.mainDropdown.nativeElement.getBoundingClientRect();\n let x = dropdownRect.left + dropdownRect.width;\n let x1 = gridRect.left + gridRect.width;\n x += window.pageXOffset;\n x1 += window.pageXOffset;\n if (Math.abs(x - x1) < 200) {\n this._subMenuOverlaySettings.positionStrategy.settings.horizontalDirection = HorizontalAlignment.Left;\n this._subMenuOverlaySettings.positionStrategy.settings.horizontalStartPoint = HorizontalAlignment.Left;\n }\n else {\n this._subMenuOverlaySettings.positionStrategy.settings.horizontalDirection = HorizontalAlignment.Right;\n this._subMenuOverlaySettings.positionStrategy.settings.horizontalStartPoint = HorizontalAlignment.Right;\n }\n this.subMenu.open(this._subMenuOverlaySettings);\n this.shouldOpenSubMenu = false;\n }\n }\n /**\n * @hidden @internal\n */\n getCondition(value) {\n return this.esf.column.filters.condition(value);\n }\n /**\n * @hidden @internal\n */\n translateCondition(value) {\n return this.esf.grid.resourceStrings[`igx_grid_filter_${this.getCondition(value).name}`] || value;\n }\n /**\n * @hidden @internal\n */\n onSubMenuSelection(eventArgs) {\n if (this.esf.expressionsList && this.esf.expressionsList.length &&\n this.esf.expressionsList[0].expression.condition.name !== 'in') {\n this.customDialog.expressionsList = this.esf.expressionsList;\n }\n this.customDialog.selectedOperator = eventArgs.newSelection.value;\n eventArgs.cancel = true;\n if (this.esf.overlayComponentId) {\n this.esf.hide();\n }\n this.subMenu.close();\n this.customDialog.open(this.esf.mainDropdown.nativeElement);\n }\n /**\n * @hidden @internal\n */\n onSubMenuClosed() {\n requestAnimationFrame(() => {\n this.shouldOpenSubMenu = true;\n });\n }\n /**\n * @hidden @internal\n */\n showCustomFilterItem() {\n const exprTree = this.esf.column.filteringExpressionsTree;\n return exprTree && exprTree.filteringOperands && exprTree.filteringOperands.length &&\n !(exprTree.filteringOperands[0].condition &&\n exprTree.filteringOperands[0].condition.name === 'in');\n }\n /**\n * @hidden @internal\n */\n get subMenuText() {\n switch (this.esf.column.dataType) {\n case GridColumnDataType.Boolean:\n return this.esf.grid.resourceStrings.igx_grid_excel_boolean_filter;\n case GridColumnDataType.Number:\n case GridColumnDataType.Percent:\n return this.esf.grid.resourceStrings.igx_grid_excel_number_filter;\n case GridColumnDataType.Date:\n case GridColumnDataType.DateTime:\n case GridColumnDataType.Time:\n return this.esf.grid.resourceStrings.igx_grid_excel_date_filter;\n case GridColumnDataType.Currency:\n return this.esf.grid.resourceStrings.igx_grid_excel_currency_filter;\n default:\n return this.esf.grid.resourceStrings.igx_grid_excel_text_filter;\n }\n }\n /**\n * @hidden @internal\n */\n get conditions() {\n return this.esf.column.filters.conditionList();\n }\n}\nIgxExcelStyleConditionalFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleConditionalFilterComponent, deps: [{ token: BaseFilteringComponent }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nIgxExcelStyleConditionalFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleConditionalFilterComponent, selector: \"igx-excel-style-conditional-filter\", viewQueries: [{ propertyName: \"customDialog\", first: true, predicate: [\"customDialog\"], descendants: true, read: IgxExcelStyleCustomDialogComponent }, { propertyName: \"subMenu\", first: true, predicate: [\"subMenu\"], descendants: true, read: IgxDropDownComponent }], ngImport: i0, template: \"\\n
    \\n {{ subMenuText }}\\n keyboard_arrow_right\\n
    \\n\\n \\n
    \\n \\n
    \\n \\n {{ translateCondition(condition) }}\\n
    \\n \\n \\n
    \\n filter_list\\n {{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}\\n
    \\n
    \\n
    \\n
    \\n\\n \\n \\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"component\", type: IgxDropDownComponent, selector: \"igx-drop-down\", inputs: [\"allowItemsFocus\", \"labelledBy\"], outputs: [\"opening\", \"opened\", \"closing\", \"closed\"] }, { kind: \"component\", type: IgxDropDownItemComponent, selector: \"igx-drop-down-item\" }, { kind: \"directive\", type: IgxDropDownItemNavigationDirective, selector: \"[igxDropDownItemNavigation]\", inputs: [\"igxDropDownItemNavigation\"] }, { kind: \"component\", type: IgxExcelStyleCustomDialogComponent, selector: \"igx-excel-style-custom-dialog\", inputs: [\"expressionsList\", \"column\", \"selectedOperator\", \"filteringService\", \"overlayComponentId\", \"displayDensity\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleConditionalFilterComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-excel-style-conditional-filter', template: \"\\n
    \\n {{ subMenuText }}\\n keyboard_arrow_right\\n
    \\n\\n \\n
    \\n \\n
    \\n \\n {{ translateCondition(condition) }}\\n
    \\n \\n \\n
    \\n filter_list\\n {{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}\\n
    \\n
    \\n
    \\n
    \\n\\n \\n \\n\\n\" }]\n }], ctorParameters: function () { return [{ type: BaseFilteringComponent }, { type: PlatformUtil }]; }, propDecorators: { customDialog: [{\n type: ViewChild,\n args: ['customDialog', { read: IgxExcelStyleCustomDialogComponent }]\n }], subMenu: [{\n type: ViewChild,\n args: ['subMenu', { read: IgxDropDownComponent }]\n }] } });\n\n/**\n * A component used for presenting Excel style header UI.\n */\nclass IgxExcelStyleHeaderComponent {\n constructor(esf) {\n this.esf = esf;\n }\n}\nIgxExcelStyleHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleHeaderComponent, deps: [{ token: BaseFilteringComponent }], target: i0.ɵɵFactoryTarget.Component });\nIgxExcelStyleHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleHeaderComponent, selector: \"igx-excel-style-header\", inputs: { showPinning: \"showPinning\", showSelecting: \"showSelecting\", showHiding: \"showHiding\" }, ngImport: i0, template: \"
    \\n

    {{ esf.column.header || esf.column.field }}

    \\n
    \\n \\n \\n \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleHeaderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-excel-style-header', template: \"
    \\n

    {{ esf.column.header || esf.column.field }}

    \\n
    \\n \\n \\n \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: BaseFilteringComponent }]; }, propDecorators: { showPinning: [{\n type: Input\n }], showSelecting: [{\n type: Input\n }], showHiding: [{\n type: Input\n }] } });\n\n/**\n * A component used for presenting Excel style column hiding UI.\n */\nclass IgxExcelStyleHidingComponent {\n constructor(esf) {\n this.esf = esf;\n }\n}\nIgxExcelStyleHidingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleHidingComponent, deps: [{ token: BaseFilteringComponent }], target: i0.ɵɵFactoryTarget.Component });\nIgxExcelStyleHidingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleHidingComponent, selector: \"igx-excel-style-hiding\", ngImport: i0, template: \"
    \\n {{ esf.column.hidden ? esf.grid.resourceStrings.igx_grid_excel_show : esf.grid.resourceStrings.igx_grid_excel_hide }}\\n {{ esf.column.hidden ? 'visibility' : 'visibility_off' }}\\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleHidingComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-excel-style-hiding', template: \"
    \\n {{ esf.column.hidden ? esf.grid.resourceStrings.igx_grid_excel_show : esf.grid.resourceStrings.igx_grid_excel_hide }}\\n {{ esf.column.hidden ? 'visibility' : 'visibility_off' }}\\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: BaseFilteringComponent }]; } });\n\n/**\n * A component used for presenting Excel style column moving UI.\n */\nclass IgxExcelStyleMovingComponent {\n constructor(esf) {\n this.esf = esf;\n /**\n * @hidden @internal\n */\n this.defaultClass = true;\n }\n get visibleColumns() {\n return this.esf.grid.visibleColumns.filter(col => !col.columnGroup);\n }\n /**\n * @hidden @internal\n */\n get canNotMoveLeft() {\n return this.esf.column.visibleIndex === 0 ||\n (this.esf.grid.unpinnedColumns.indexOf(this.esf.column) === 0 && this.esf.column.disablePinning) ||\n (this.esf.column.level !== 0 && !this.findColumn(0, this.visibleColumns));\n }\n /**\n * @hidden @internal\n */\n get canNotMoveRight() {\n return this.esf.column.visibleIndex === this.visibleColumns.length - 1 ||\n (this.esf.column.level !== 0 && !this.findColumn(1, this.visibleColumns));\n }\n /**\n * @hidden @internal\n */\n onMoveButtonClicked(moveDirection) {\n let targetColumn;\n if (this.esf.column.pinned) {\n if (this.esf.column.isLastPinned && moveDirection === 1 && this.esf.grid.isPinningToStart) {\n targetColumn = this.esf.grid.unpinnedColumns[0];\n moveDirection = 0;\n }\n else if (this.esf.column.isFirstPinned && moveDirection === 0 && !this.esf.grid.isPinningToStart) {\n targetColumn = this.esf.grid.unpinnedColumns[this.esf.grid.unpinnedColumns.length - 1];\n moveDirection = 1;\n }\n else {\n targetColumn = this.findColumn(moveDirection, this.esf.grid.pinnedColumns);\n }\n }\n else if (this.esf.grid.unpinnedColumns.indexOf(this.esf.column) === 0 && moveDirection === 0 &&\n this.esf.grid.isPinningToStart) {\n targetColumn = this.esf.grid.pinnedColumns[this.esf.grid.pinnedColumns.length - 1];\n if (targetColumn.parent) {\n targetColumn = targetColumn.topLevelParent;\n }\n moveDirection = 1;\n }\n else if (this.esf.grid.unpinnedColumns.indexOf(this.esf.column) === this.esf.grid.unpinnedColumns.length - 1 &&\n moveDirection === 1 && !this.esf.grid.isPinningToStart) {\n targetColumn = this.esf.grid.pinnedColumns[0];\n moveDirection = 0;\n }\n else {\n targetColumn = this.findColumn(moveDirection, this.esf.grid.unpinnedColumns);\n }\n this.esf.grid.moveColumn(this.esf.column, targetColumn, moveDirection);\n }\n findColumn(moveDirection, columns) {\n let index = columns.indexOf(this.esf.column);\n if (moveDirection === 0) {\n while (index > 0) {\n index--;\n if (columns[index].level === this.esf.column.level && columns[index].parent === this.esf.column.parent) {\n return columns[index];\n }\n }\n return columns[0];\n }\n else {\n while (index < columns.length - 1) {\n index++;\n if (columns[index].level === this.esf.column.level && columns[index].parent === this.esf.column.parent) {\n return columns[index];\n }\n }\n }\n }\n}\nIgxExcelStyleMovingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleMovingComponent, deps: [{ token: BaseFilteringComponent }], target: i0.ɵɵFactoryTarget.Component });\nIgxExcelStyleMovingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleMovingComponent, selector: \"igx-excel-style-moving\", host: { properties: { \"class.igx-excel-filter__move\": \"this.defaultClass\" } }, ngImport: i0, template: \"\\n
    \\n {{ esf.grid.resourceStrings.igx_grid_excel_filter_moving_header }}\\n
    \\n\\n \\n \\n\\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxButtonGroupComponent, selector: \"igx-buttongroup\", inputs: [\"id\", \"itemContentCssClass\", \"multiSelection\", \"values\", \"disabled\", \"alignment\"], outputs: [\"selected\", \"deselected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleMovingComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-excel-style-moving', template: \"\\n
    \\n {{ esf.grid.resourceStrings.igx_grid_excel_filter_moving_header }}\\n
    \\n\\n \\n \\n\\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: BaseFilteringComponent }]; }, propDecorators: { defaultClass: [{\n type: HostBinding,\n args: ['class.igx-excel-filter__move']\n }] } });\n\n/**\n * A component used for presenting Excel style column pinning UI.\n */\nclass IgxExcelStylePinningComponent {\n constructor(esf) {\n this.esf = esf;\n }\n}\nIgxExcelStylePinningComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStylePinningComponent, deps: [{ token: BaseFilteringComponent }], target: i0.ɵɵFactoryTarget.Component });\nIgxExcelStylePinningComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStylePinningComponent, selector: \"igx-excel-style-pinning\", ngImport: i0, template: \"
    \\n {{ esf.column.pinned ? esf.grid.resourceStrings.igx_grid_excel_unpin : esf.grid.resourceStrings.igx_grid_excel_pin }}\\n \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStylePinningComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-excel-style-pinning', template: \"
    \\n {{ esf.column.pinned ? esf.grid.resourceStrings.igx_grid_excel_unpin : esf.grid.resourceStrings.igx_grid_excel_pin }}\\n \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: BaseFilteringComponent }]; } });\n\n/** @hidden */\nclass IgxListBaseDirective extends DisplayDensityBase {\n constructor(_displayDensityOptions) {\n super(_displayDensityOptions);\n this._displayDensityOptions = _displayDensityOptions;\n }\n}\nIgxListBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListBaseDirective, deps: [{ token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nIgxListBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxListBaseDirective, selector: \"[igxListBase]\", usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListBaseDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxListBase]'\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }];\n } });\nvar IgxListPanState;\n(function (IgxListPanState) {\n IgxListPanState[IgxListPanState[\"NONE\"] = 0] = \"NONE\";\n IgxListPanState[IgxListPanState[\"LEFT\"] = 1] = \"LEFT\";\n IgxListPanState[IgxListPanState[\"RIGHT\"] = 2] = \"RIGHT\";\n})(IgxListPanState || (IgxListPanState = {}));\nclass IgxEmptyListTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxEmptyListTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxEmptyListTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxEmptyListTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxEmptyListTemplateDirective, selector: \"[igxEmptyList]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxEmptyListTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxEmptyList]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\nclass IgxDataLoadingTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxDataLoadingTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDataLoadingTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxDataLoadingTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDataLoadingTemplateDirective, selector: \"[igxDataLoading]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDataLoadingTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxDataLoading]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\nclass IgxListItemLeftPanningTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxListItemLeftPanningTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListItemLeftPanningTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxListItemLeftPanningTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxListItemLeftPanningTemplateDirective, selector: \"[igxListItemLeftPanning]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListItemLeftPanningTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxListItemLeftPanning]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\nclass IgxListItemRightPanningTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxListItemRightPanningTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListItemRightPanningTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxListItemRightPanningTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxListItemRightPanningTemplateDirective, selector: \"[igxListItemRightPanning]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListItemRightPanningTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxListItemRightPanning]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * The Ignite UI List Item component is a container intended for row items in the Ignite UI for Angular List component.\n *\n * Example:\n * ```html\n * \n * Contacts\n * \n * {{ contact.name }}\n * {{ contact.phone }}\n * \n * \n * ```\n */\nclass IgxListItemComponent {\n /**\n * Gets the `panState` of a `list item`.\n * ```typescript\n * let itemPanState = this.listItem.panState;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n get panState() {\n return this._panState;\n }\n /**\n * Gets the `index` of a `list item`.\n * ```typescript\n * let itemIndex = this.listItem.index;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n get index() {\n return this._index !== null ? this._index : this.list.children.toArray().indexOf(this);\n }\n /**\n * Sets the `index` of the `list item`.\n * ```typescript\n * this.listItem.index = index;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n set index(value) {\n this._index = value;\n }\n /**\n * Returns an element reference to the list item.\n * ```typescript\n * let listItemElement = this.listItem.element.\n * ```\n *\n * @memberof IgxListItemComponent\n */\n get element() {\n return this.elementRef.nativeElement;\n }\n /**\n * Returns a reference container which contains the list item's content.\n * ```typescript\n * let listItemContainer = this.listItem.contentElement.\n * ```\n *\n * @memberof IgxListItemComponent\n */\n get contentElement() {\n const candidates = this.element.getElementsByClassName('igx-list__item-content');\n return (candidates && candidates.length > 0) ? candidates[0] : null;\n }\n /**\n * Returns the `context` object which represents the `template context` binding into the `list item container`\n * by providing the `$implicit` declaration which is the `IgxListItemComponent` itself.\n * ```typescript\n * let listItemComponent = this.listItem.context;\n * ```\n */\n get context() {\n return {\n $implicit: this\n };\n }\n /**\n * Gets the width of a `list item`.\n * ```typescript\n * let itemWidth = this.listItem.width;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n get width() {\n if (this.element) {\n return this.element.offsetWidth;\n }\n }\n /**\n * Gets the maximum left position of the `list item`.\n * ```typescript\n * let maxLeft = this.listItem.maxLeft;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n get maxLeft() {\n return -this.width;\n }\n /**\n * Gets the maximum right position of the `list item`.\n * ```typescript\n * let maxRight = this.listItem.maxRight;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n get maxRight() {\n return this.width;\n }\n /** @hidden @internal */\n get offsetWidthInRem() {\n return rem(this.element.offsetWidth);\n }\n /** @hidden @internal */\n get offsetHeightInRem() {\n return rem(this.element.offsetHeight);\n }\n constructor(list, elementRef, _renderer) {\n this.list = list;\n this.elementRef = elementRef;\n this._renderer = _renderer;\n /**\n * Sets/gets whether the `list item` is hidden.\n * By default the `hidden` value is `false`.\n * ```html\n * Hidden Item\n * ```\n * ```typescript\n * let isHidden = this.listItem.hidden;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n this.hidden = false;\n /**\n * Gets the `touch-action` style of the `list item`.\n * ```typescript\n * let touchAction = this.listItem.touchAction;\n * ```\n */\n this.touchAction = 'pan-y';\n /**\n * @hidden\n */\n this._panState = IgxListPanState.NONE;\n /**\n * @hidden\n */\n this.panOffset = 0;\n /**\n * @hidden\n */\n this._index = null;\n /**\n * @hidden\n */\n this.lastPanDir = IgxListPanState.NONE;\n }\n /**\n * Gets the `role` attribute of the `list item`.\n * ```typescript\n * let itemRole = this.listItem.role;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n get role() {\n return this.isHeader ? 'separator' : 'listitem';\n }\n /**\n * Indicates whether `list item` should have header style.\n * ```typescript\n * let headerStyle = this.listItem.headerStyle;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n get headerStyle() {\n return this.isHeader;\n }\n /**\n * Applies the inner style of the `list item` if the item is not counted as header.\n * ```typescript\n * let innerStyle = this.listItem.innerStyle;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n get innerStyle() {\n return !this.isHeader;\n }\n /**\n * Returns string value which describes the display mode of the `list item`.\n * ```typescript\n * let isHidden = this.listItem.display;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n get display() {\n return this.hidden ? 'none' : '';\n }\n /**\n * @hidden\n */\n clicked(evt) {\n this.list.itemClicked.emit({ item: this, event: evt, direction: this.lastPanDir });\n this.lastPanDir = IgxListPanState.NONE;\n }\n /**\n * @hidden\n */\n panStart() {\n if (this.isTrue(this.isHeader)) {\n return;\n }\n if (!this.isTrue(this.list.allowLeftPanning) && !this.isTrue(this.list.allowRightPanning)) {\n return;\n }\n this.list.startPan.emit({ item: this, direction: this.lastPanDir, keepitem: false });\n }\n /**\n * @hidden\n */\n panCancel() {\n this.resetPanPosition();\n this.list.endPan.emit({ item: this, direction: this.lastPanDir, keepItem: false });\n }\n /**\n * @hidden\n */\n panMove(ev) {\n if (this.isTrue(this.isHeader)) {\n return;\n }\n if (!this.isTrue(this.list.allowLeftPanning) && !this.isTrue(this.list.allowRightPanning)) {\n return;\n }\n const isPanningToLeft = ev.deltaX < 0;\n if (isPanningToLeft && this.isTrue(this.list.allowLeftPanning)) {\n this.showLeftPanTemplate();\n this.setContentElementLeft(Math.max(this.maxLeft, ev.deltaX));\n }\n else if (!isPanningToLeft && this.isTrue(this.list.allowRightPanning)) {\n this.showRightPanTemplate();\n this.setContentElementLeft(Math.min(this.maxRight, ev.deltaX));\n }\n }\n /**\n * @hidden\n */\n panEnd() {\n if (this.isTrue(this.isHeader)) {\n return;\n }\n if (!this.isTrue(this.list.allowLeftPanning) && !this.isTrue(this.list.allowRightPanning)) {\n return;\n }\n // the translation offset of the current list item content\n const relativeOffset = this.panOffset;\n const widthTriggeringGrip = this.width * this.list.panEndTriggeringThreshold;\n if (relativeOffset === 0) {\n return; // no panning has occured\n }\n const dir = relativeOffset > 0 ? IgxListPanState.RIGHT : IgxListPanState.LEFT;\n this.lastPanDir = dir;\n const args = { item: this, direction: dir, keepItem: false };\n this.list.endPan.emit(args);\n const oldPanState = this._panState;\n if (Math.abs(relativeOffset) < widthTriggeringGrip) {\n this.resetPanPosition();\n this.list.resetPan.emit(this);\n return;\n }\n if (dir === IgxListPanState.LEFT) {\n this.list.leftPan.emit(args);\n }\n else {\n this.list.rightPan.emit(args);\n }\n if (args.keepItem === true) {\n this.setContentElementLeft(0);\n this._panState = IgxListPanState.NONE;\n }\n else {\n if (dir === IgxListPanState.LEFT) {\n this.setContentElementLeft(this.maxLeft);\n this._panState = IgxListPanState.LEFT;\n }\n else {\n this.setContentElementLeft(this.maxRight);\n this._panState = IgxListPanState.RIGHT;\n }\n }\n if (oldPanState !== this._panState) {\n const args2 = { oldState: oldPanState, newState: this._panState, item: this };\n this.list.panStateChange.emit(args2);\n }\n this.hideLeftAndRightPanTemplates();\n }\n /**\n * @hidden\n */\n showLeftPanTemplate() {\n this.setLeftAndRightTemplatesVisibility('visible', 'hidden');\n }\n /**\n * @hidden\n */\n showRightPanTemplate() {\n this.setLeftAndRightTemplatesVisibility('hidden', 'visible');\n }\n /**\n * @hidden\n */\n hideLeftAndRightPanTemplates() {\n setTimeout(() => {\n this.setLeftAndRightTemplatesVisibility('hidden', 'hidden');\n }, 500);\n }\n /**\n * @hidden\n */\n setLeftAndRightTemplatesVisibility(leftVisibility, rightVisibility) {\n if (this.leftPanningTemplateElement && this.leftPanningTemplateElement.nativeElement) {\n this.leftPanningTemplateElement.nativeElement.style.visibility = leftVisibility;\n }\n if (this.rightPanningTemplateElement && this.rightPanningTemplateElement.nativeElement) {\n this.rightPanningTemplateElement.nativeElement.style.visibility = rightVisibility;\n }\n }\n /**\n * @hidden\n */\n setContentElementLeft(value) {\n this.panOffset = value;\n this.contentElement.style.transform = 'translateX(' + value + 'px)';\n }\n /**\n * @hidden\n */\n isTrue(value) {\n if (typeof (value) === 'boolean') {\n return value;\n }\n else {\n return value === 'true';\n }\n }\n /**\n * @hidden\n */\n resetPanPosition() {\n this.setContentElementLeft(0);\n this._panState = IgxListPanState.NONE;\n this.hideLeftAndRightPanTemplates();\n }\n}\nIgxListItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListItemComponent, deps: [{ token: IgxListBaseDirective }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nIgxListItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxListItemComponent, selector: \"igx-list-item\", inputs: { isHeader: \"isHeader\", hidden: \"hidden\", index: \"index\" }, host: { listeners: { \"click\": \"clicked($event)\", \"panstart\": \"panStart()\", \"pancancel\": \"panCancel()\", \"panmove\": \"panMove($event)\", \"panend\": \"panEnd()\" }, properties: { \"attr.aria-label\": \"this.ariaLabel\", \"style.touch-action\": \"this.touchAction\", \"attr.role\": \"this.role\", \"class.igx-list__header\": \"this.headerStyle\", \"class.igx-list__item-base\": \"this.innerStyle\", \"style.display\": \"this.display\" } }, providers: [HammerGesturesManager], viewQueries: [{ propertyName: \"leftPanningTemplateElement\", first: true, predicate: [\"leftPanningTmpl\"], descendants: true }, { propertyName: \"rightPanningTemplateElement\", first: true, predicate: [\"rightPanningTmpl\"], descendants: 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\\n
    \\n \\n \\n \\n \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListItemComponent, decorators: [{\n type: Component,\n args: [{ providers: [HammerGesturesManager], selector: 'igx-list-item', 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\\n
    \\n \\n \\n \\n \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: IgxListBaseDirective }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { leftPanningTemplateElement: [{\n type: ViewChild,\n args: ['leftPanningTmpl']\n }], rightPanningTemplateElement: [{\n type: ViewChild,\n args: ['rightPanningTmpl']\n }], isHeader: [{\n type: Input\n }], hidden: [{\n type: Input\n }], ariaLabel: [{\n type: HostBinding,\n args: ['attr.aria-label']\n }], touchAction: [{\n type: HostBinding,\n args: ['style.touch-action']\n }], index: [{\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], headerStyle: [{\n type: HostBinding,\n args: ['class.igx-list__header']\n }], innerStyle: [{\n type: HostBinding,\n args: ['class.igx-list__item-base']\n }], display: [{\n type: HostBinding,\n args: ['style.display']\n }], clicked: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], panStart: [{\n type: HostListener,\n args: ['panstart']\n }], panCancel: [{\n type: HostListener,\n args: ['pancancel']\n }], panMove: [{\n type: HostListener,\n args: ['panmove', ['$event']]\n }], panEnd: [{\n type: HostListener,\n args: ['panend']\n }] } });\n\nlet NEXT_ID$b = 0;\n/**\n * igxListThumbnail is container for the List media\n * Use it to wrap anything you want to be used as a thumbnail.\n */\nclass IgxListThumbnailDirective {\n}\nIgxListThumbnailDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListThumbnailDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxListThumbnailDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxListThumbnailDirective, selector: \"[igxListThumbnail]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListThumbnailDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[igxListThumbnail]'\n }]\n }] });\n/**\n * igxListAction is container for the List action\n * Use it to wrap anything you want to be used as a list action: icon, checkbox...\n */\nclass IgxListActionDirective {\n}\nIgxListActionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListActionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxListActionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxListActionDirective, selector: \"[igxListAction]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListActionDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[igxListAction]'\n }]\n }] });\n/**\n * igxListLine is container for the List text content\n * Use it to wrap anything you want to be used as a plane text.\n */\nclass IgxListLineDirective {\n}\nIgxListLineDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListLineDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxListLineDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxListLineDirective, selector: \"[igxListLine]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListLineDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[igxListLine]'\n }]\n }] });\n/**\n * igxListLineTitle is a directive that add class to the target element\n * Use it to make anything to look like list Title.\n */\nclass IgxListLineTitleDirective {\n constructor() {\n this.cssClass = 'igx-list__item-line-title';\n }\n}\nIgxListLineTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListLineTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxListLineTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxListLineTitleDirective, selector: \"[igxListLineTitle]\", host: { properties: { \"class.igx-list__item-line-title\": \"this.cssClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListLineTitleDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[igxListLineTitle]'\n }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-list__item-line-title']\n }] } });\n/**\n * igxListLineSubTitle is a directive that add class to the target element\n * Use it to make anything to look like list Subtitle.\n */\nclass IgxListLineSubTitleDirective {\n constructor() {\n this.cssClass = 'igx-list__item-line-subtitle';\n }\n}\nIgxListLineSubTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListLineSubTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxListLineSubTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxListLineSubTitleDirective, selector: \"[igxListLineSubTitle]\", host: { properties: { \"class.igx-list__item-line-subtitle\": \"this.cssClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListLineSubTitleDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[igxListLineSubTitle]'\n }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-list__item-line-subtitle']\n }] } });\n/**\n * Displays a collection of data items in a templatable list format\n *\n * @igxModule IgxListModule\n *\n * @igxTheme igx-list-theme\n *\n * @igxKeywords list, data\n *\n * @igxGroup Grids & Lists\n *\n * @remarks\n * The Ignite UI List displays rows of items and supports one or more header items as well as search and filtering\n * of list items. Each list item is completely templatable and will support any valid HTML or Angular component.\n *\n * @example\n * ```html\n * \n * Contacts\n * \n * {{ contact.name }}\n * {{ contact.phone }}\n * \n * \n * ```\n */\nclass IgxListComponent extends IgxListBaseDirective {\n /**\n * Sets the resource strings.\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /**\n * Returns the resource strings.\n */\n get resourceStrings() {\n return this._resourceStrings;\n }\n constructor(element, _displayDensityOptions) {\n super(_displayDensityOptions);\n this.element = element;\n /**\n * Provides a threshold after which the item's panning will be completed automatically.\n *\n * @remarks\n * By default this property is set to 0.5 which is 50% of the list item's width.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.panEndTriggeringThreshold = 0.5;\n /**\n * Sets/gets the `id` of the list.\n *\n * @remarks\n * If not set, the `id` of the first list component will be `\"igx-list-0\"`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let listId = this.list.id;\n * ```\n */\n this.id = `igx-list-${NEXT_ID$b++}`;\n /**\n * Sets/gets whether the left panning of an item is allowed.\n *\n * @remarks\n * Default value is `false`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let isLeftPanningAllowed = this.list.allowLeftPanning;\n * ```\n */\n this.allowLeftPanning = false;\n /**\n * Sets/gets whether the right panning of an item is allowed.\n *\n * @remarks\n * Default value is `false`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let isRightPanningAllowed = this.list.allowRightPanning;\n * ```\n */\n this.allowRightPanning = false;\n /**\n * Sets/gets whether the list is currently loading data.\n *\n * @remarks\n * Set it to display the dataLoadingTemplate while data is being retrieved.\n * Default value is `false`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let isLoading = this.list.isLoading;\n * ```\n */\n this.isLoading = false;\n /**\n * Event emitted when a left pan gesture is executed on a list item.\n *\n * @remarks\n * Provides a reference to an object of type `IListItemPanningEventArgs` as an event argument.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.leftPan = new EventEmitter();\n /**\n * Event emitted when a right pan gesture is executed on a list item.\n *\n * @remarks\n * Provides a reference to an object of type `IListItemPanningEventArgs` as an event argument.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.rightPan = new EventEmitter();\n /**\n * Event emitted when a pan gesture is started.\n *\n * @remarks\n * Provides a reference to an object of type `IListItemPanningEventArgs` as an event argument.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.startPan = new EventEmitter();\n /**\n * Event emitted when a pan gesture is completed or canceled.\n *\n * @remarks\n * Provides a reference to an object of type `IListItemPanningEventArgs` as an event argument.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.endPan = new EventEmitter();\n /**\n * Event emitted when a pan item is returned to its original position.\n *\n * @remarks\n * Provides a reference to an object of type `IgxListComponent` as an event argument.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.resetPan = new EventEmitter();\n /**\n *\n * Event emitted when a pan gesture is executed on a list item.\n *\n * @remarks\n * Provides references to the `IgxListItemComponent` and `IgxListPanState` as event arguments.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.panStateChange = new EventEmitter();\n /**\n * Event emitted when a list item is clicked.\n *\n * @remarks\n * Provides references to the `IgxListItemComponent` and `Event` as event arguments.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.itemClicked = new EventEmitter();\n this._resourceStrings = CurrentResourceStrings.ListResStrings;\n }\n /**\n * @hidden\n * @internal\n */\n get sortedChildren() {\n if (this.children !== undefined) {\n return this.children.toArray()\n .sort((a, b) => a.index - b.index);\n }\n return null;\n }\n /**\n * Gets the `role` attribute value.\n *\n * @example\n * ```typescript\n * let listRole = this.list.role;\n * ```\n */\n get role() {\n return 'list';\n }\n /**\n * Gets a boolean indicating if the list is empty.\n *\n * @example\n * ```typescript\n * let isEmpty = this.list.isListEmpty;\n * ```\n */\n get isListEmpty() {\n return !this.children || this.children.length === 0;\n }\n /**\n * @hidden\n * @internal\n */\n get cssClass() {\n return !this.isListEmpty && this.displayDensity === DisplayDensity.comfortable;\n }\n /**\n * @hidden\n * @internal\n */\n get cssClassCompact() {\n return !this.isListEmpty && this.displayDensity === DisplayDensity.compact;\n }\n /**\n * @hidden\n * @internal\n */\n get cssClassCosy() {\n return !this.isListEmpty && this.displayDensity === DisplayDensity.cosy;\n }\n /**\n * Gets the list `items` excluding the header ones.\n *\n * @example\n * ```typescript\n * let listItems: IgxListItemComponent[] = this.list.items;\n * ```\n */\n get items() {\n const items = [];\n if (this.children !== undefined) {\n for (const child of this.sortedChildren) {\n if (!child.isHeader) {\n items.push(child);\n }\n }\n }\n return items;\n }\n /**\n * Gets the header list `items`.\n *\n * @example\n * ```typescript\n * let listHeaders: IgxListItemComponent[] = this.list.headers;\n * ```\n */\n get headers() {\n const headers = [];\n if (this.children !== undefined) {\n for (const child of this.children.toArray()) {\n if (child.isHeader) {\n headers.push(child);\n }\n }\n }\n return headers;\n }\n /**\n * Gets the `context` object of the template binding.\n *\n * @remark\n * Gets the `context` object which represents the `template context` binding into the `list container`\n * by providing the `$implicit` declaration which is the `IgxListComponent` itself.\n *\n * @example\n * ```typescript\n * let listComponent = this.list.context;\n * ```\n */\n get context() {\n return {\n $implicit: this\n };\n }\n /**\n * Gets a `TemplateRef` to the currently used template.\n *\n * @example\n * ```typescript\n * let listTemplate = this.list.template;\n * ```\n */\n get template() {\n if (this.isLoading) {\n return this.dataLoadingTemplate ? this.dataLoadingTemplate.template : this.defaultDataLoadingTemplate;\n }\n else {\n return this.emptyListTemplate ? this.emptyListTemplate.template : this.defaultEmptyListTemplate;\n }\n }\n}\nIgxListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListComponent, deps: [{ token: i0.ElementRef }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxListComponent, selector: \"igx-list\", inputs: { panEndTriggeringThreshold: \"panEndTriggeringThreshold\", id: \"id\", allowLeftPanning: \"allowLeftPanning\", allowRightPanning: \"allowRightPanning\", isLoading: \"isLoading\", resourceStrings: \"resourceStrings\" }, outputs: { leftPan: \"leftPan\", rightPan: \"rightPan\", startPan: \"startPan\", endPan: \"endPan\", resetPan: \"resetPan\", panStateChange: \"panStateChange\", itemClicked: \"itemClicked\" }, host: { properties: { \"attr.id\": \"this.id\", \"attr.role\": \"this.role\", \"class.igx-list--empty\": \"this.isListEmpty\", \"class.igx-list\": \"this.cssClass\", \"class.igx-list--compact\": \"this.cssClassCompact\", \"class.igx-list--cosy\": \"this.cssClassCosy\" } }, providers: [{ provide: IgxListBaseDirective, useExisting: IgxListComponent }], queries: [{ propertyName: \"emptyListTemplate\", first: true, predicate: IgxEmptyListTemplateDirective, descendants: true, read: IgxEmptyListTemplateDirective }, { propertyName: \"dataLoadingTemplate\", first: true, predicate: IgxDataLoadingTemplateDirective, descendants: true, read: IgxDataLoadingTemplateDirective }, { propertyName: \"listItemLeftPanningTemplate\", first: true, predicate: IgxListItemLeftPanningTemplateDirective, descendants: true, read: IgxListItemLeftPanningTemplateDirective }, { propertyName: \"listItemRightPanningTemplate\", first: true, predicate: IgxListItemRightPanningTemplateDirective, descendants: true, read: IgxListItemRightPanningTemplateDirective }, { propertyName: \"children\", predicate: i0.forwardRef(function () { return IgxListItemComponent; }), descendants: true }], viewQueries: [{ propertyName: \"defaultEmptyListTemplate\", first: true, predicate: [\"defaultEmptyList\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"defaultDataLoadingTemplate\", first: true, predicate: [\"defaultDataLoading\"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: \"\\n\\n\\n
    \\n {{resourceStrings.igx_list_no_items}}\\n
    \\n
    \\n\\n\\n
    \\n {{resourceStrings.igx_list_loading}}\\n
    \\n
    \\n\\n\\n \\n \\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-list', providers: [{ provide: IgxListBaseDirective, useExisting: IgxListComponent }], template: \"\\n\\n\\n
    \\n {{resourceStrings.igx_list_no_items}}\\n
    \\n
    \\n\\n\\n
    \\n {{resourceStrings.igx_list_loading}}\\n
    \\n
    \\n\\n\\n \\n \\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }];\n }, propDecorators: { children: [{\n type: ContentChildren,\n args: [forwardRef(() => IgxListItemComponent), { descendants: true }]\n }], emptyListTemplate: [{\n type: ContentChild,\n args: [IgxEmptyListTemplateDirective, { read: IgxEmptyListTemplateDirective }]\n }], dataLoadingTemplate: [{\n type: ContentChild,\n args: [IgxDataLoadingTemplateDirective, { read: IgxDataLoadingTemplateDirective }]\n }], listItemLeftPanningTemplate: [{\n type: ContentChild,\n args: [IgxListItemLeftPanningTemplateDirective, { read: IgxListItemLeftPanningTemplateDirective }]\n }], listItemRightPanningTemplate: [{\n type: ContentChild,\n args: [IgxListItemRightPanningTemplateDirective, { read: IgxListItemRightPanningTemplateDirective }]\n }], panEndTriggeringThreshold: [{\n type: Input\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], allowLeftPanning: [{\n type: Input\n }], allowRightPanning: [{\n type: Input\n }], isLoading: [{\n type: Input\n }], leftPan: [{\n type: Output\n }], rightPan: [{\n type: Output\n }], startPan: [{\n type: Output\n }], endPan: [{\n type: Output\n }], resetPan: [{\n type: Output\n }], panStateChange: [{\n type: Output\n }], itemClicked: [{\n type: Output\n }], defaultEmptyListTemplate: [{\n type: ViewChild,\n args: ['defaultEmptyList', { read: TemplateRef, static: true }]\n }], defaultDataLoadingTemplate: [{\n type: ViewChild,\n args: ['defaultDataLoading', { read: TemplateRef, static: true }]\n }], resourceStrings: [{\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], isListEmpty: [{\n type: HostBinding,\n args: ['class.igx-list--empty']\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-list']\n }], cssClassCompact: [{\n type: HostBinding,\n args: ['class.igx-list--compact']\n }], cssClassCosy: [{\n type: HostBinding,\n args: ['class.igx-list--cosy']\n }] } });\n/**\n * @hidden\n */\nclass IgxListModule {\n}\nIgxListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListModule, declarations: [IgxListBaseDirective, IgxListComponent, IgxListItemComponent, IgxListThumbnailDirective, IgxListActionDirective, IgxListLineDirective, IgxListLineTitleDirective, IgxListLineSubTitleDirective, IgxDataLoadingTemplateDirective,\n IgxEmptyListTemplateDirective,\n IgxListItemLeftPanningTemplateDirective,\n IgxListItemRightPanningTemplateDirective], imports: [CommonModule,\n IgxRippleModule], exports: [IgxListComponent, IgxListItemComponent, IgxListThumbnailDirective, IgxListActionDirective, IgxListLineDirective, IgxListLineTitleDirective, IgxListLineSubTitleDirective, IgxDataLoadingTemplateDirective,\n IgxEmptyListTemplateDirective,\n IgxListItemLeftPanningTemplateDirective,\n IgxListItemRightPanningTemplateDirective] });\nIgxListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListModule, imports: [CommonModule,\n IgxRippleModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxListModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxListBaseDirective,\n IgxListComponent,\n IgxListItemComponent,\n IgxListThumbnailDirective,\n IgxListActionDirective,\n IgxListLineDirective,\n IgxListLineTitleDirective,\n IgxListLineSubTitleDirective,\n IgxDataLoadingTemplateDirective,\n IgxEmptyListTemplateDirective,\n IgxListItemLeftPanningTemplateDirective,\n IgxListItemRightPanningTemplateDirective\n ],\n exports: [\n IgxListComponent,\n IgxListItemComponent,\n IgxListThumbnailDirective,\n IgxListActionDirective,\n IgxListLineDirective,\n IgxListLineTitleDirective,\n IgxListLineSubTitleDirective,\n IgxDataLoadingTemplateDirective,\n IgxEmptyListTemplateDirective,\n IgxListItemLeftPanningTemplateDirective,\n IgxListItemRightPanningTemplateDirective\n ],\n imports: [\n CommonModule,\n IgxRippleModule\n ]\n }]\n }] });\n\nclass IgxProcessBarTextTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxProcessBarTextTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxProcessBarTextTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxProcessBarTextTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxProcessBarTextTemplateDirective, selector: \"[igxProcessBarText]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxProcessBarTextTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxProcessBarText]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\nclass IgxProgressBarGradientDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxProgressBarGradientDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxProgressBarGradientDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxProgressBarGradientDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxProgressBarGradientDirective, selector: \"[igxProgressBarGradient]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxProgressBarGradientDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxProgressBarGradient]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nconst ONE_PERCENT = 0.01;\nconst MIN_VALUE = 0;\nconst IgxTextAlign = mkenum({\n START: 'start',\n CENTER: 'center',\n END: 'end'\n});\nconst IgxProgressType = mkenum({\n ERROR: 'error',\n INFO: 'info',\n WARNING: 'warning',\n SUCCESS: 'success'\n});\n/**\n * @hidden\n */\nclass BaseProgressDirective {\n constructor() {\n /**\n * An event, which is triggered after a progress is changed.\n * ```typescript\n * public progressChange(event) {\n * alert(\"Progress made!\");\n * }\n * //...\n * ```\n * ```html\n * \n * \n * ```\n */\n this.progressChanged = new EventEmitter();\n /**\n * Sets/Gets progressbar in indeterminate. By default it is set to false.\n * ```html\n * \n * \n * ```\n */\n this.indeterminate = false;\n /**\n * Sets/Gets progressbar animation duration. By default it is 2000ms.\n * ```html\n * \n * ```\n */\n this.animationDuration = 2000;\n this._initValue = 0;\n this._contentInit = false;\n this._max = 100;\n this._value = MIN_VALUE;\n this._newVal = MIN_VALUE;\n this._animate = true;\n this._internalState = {\n oldVal: 0,\n newVal: 0\n };\n }\n /**\n * Returns the value which update the progress indicator of the `progress bar`.\n * ```typescript\n * @ViewChild(\"MyProgressBar\")\n * public progressBar: IgxLinearProgressBarComponent | IgxCircularBarComponent;\n * public stepValue(event) {\n * let step = this.progressBar.step;\n * alert(step);\n * }\n * ```\n */\n get step() {\n if (this._step) {\n return this._step;\n }\n return this._max * ONE_PERCENT;\n }\n /**\n * Sets the value by which progress indicator is updated. By default it is 1.\n * ```html\n * \n * \n * ```\n */\n set step(val) {\n const step = Number(val);\n if (step > this.max) {\n return;\n }\n this._step = step;\n }\n /**\n * Animating the progress. By default it is set to true.\n * ```html\n * \n * \n * ```\n */\n set animate(animate) {\n this._animate = animate;\n if (animate) {\n this.animationDuration = 2000;\n }\n else {\n this.animationDuration = 0;\n }\n }\n /**\n * Returns whether the `progress bar` has animation true/false.\n * ```typescript\n * @ViewChild(\"MyProgressBar\")\n * public progressBar: IgxLinearProgressBarComponent | IgxCircularBarComponent;\n * public animationStatus(event) {\n * let animationStatus = this.progressBar.animate;\n * alert(animationStatus);\n * }\n * ```\n */\n get animate() {\n return this._animate;\n }\n /**\n * Set maximum value that can be passed. By default it is set to 100.\n * ```html\n * \n * \n * ```\n */\n set max(maxNum) {\n if (maxNum < MIN_VALUE || this._max === maxNum ||\n (this._animation && this._animation.playState !== 'finished')) {\n return;\n }\n this._internalState.newVal = Math.round(toValue(toPercent(this.value, maxNum), maxNum));\n this._value = this._internalState.oldVal = Math.round(toValue(this.valueInPercent, maxNum));\n this._max = maxNum;\n this.triggerProgressTransition(this._internalState.oldVal, this._internalState.newVal, true);\n }\n /**\n * Returns the the maximum progress value of the `progress bar`.\n * ```typescript\n * @ViewChild(\"MyProgressBar\")\n * public progressBar: IgxLinearProgressBarComponent | IgxCircularBarComponent;\n * public maxValue(event) {\n * let max = this.progressBar.max;\n * alert(max);\n * }\n * ```\n */\n get max() {\n return this._max;\n }\n /**\n * Returns the `IgxLinearProgressBarComponent`/`IgxCircularProgressBarComponent` value in percentage.\n * ```typescript\n * @ViewChild(\"MyProgressBar\")\n * public progressBar: IgxLinearProgressBarComponent; // IgxCircularProgressBarComponent\n * public valuePercent(event){\n * let percentValue = this.progressBar.valueInPercent;\n * alert(percentValue);\n * }\n * ```\n */\n get valueInPercent() {\n const val = toPercent(this._value, this._max);\n return val;\n }\n /**\n * Returns value that indicates the current `IgxLinearProgressBarComponent` position.\n * ```typescript\n * @ViewChild(\"MyProgressBar\")\n * public progressBar: IgxLinearProgressBarComponent;\n * public getValue(event) {\n * let value = this.progressBar.value;\n * alert(value);\n * }\n * ```\n */\n get value() {\n return this._value;\n }\n /**\n * Set value that indicates the current `IgxLinearProgressBarComponent` position.\n * ```html\n * \n * ```\n */\n set value(val) {\n if (this._animation && this._animation.playState !== 'finished' || val < 0) {\n return;\n }\n const valInRange = valueInRange(val, this.max);\n if (isNaN(valInRange) || this._value === val || this.indeterminate) {\n return;\n }\n if (this._contentInit) {\n this.triggerProgressTransition(this._value, valInRange);\n }\n else {\n this._initValue = valInRange;\n }\n }\n triggerProgressTransition(oldVal, newVal, maxUpdate = false) {\n if (oldVal === newVal) {\n return;\n }\n const changedValues = {\n currentValue: newVal,\n previousValue: oldVal\n };\n const stepDirection = this.directionFlow(oldVal, newVal);\n if (this._animate) {\n const newToPercent = toPercent(newVal, this.max);\n const oldToPercent = toPercent(oldVal, this.max);\n const duration = this.animationDuration / Math.abs(newToPercent - oldToPercent) / (this._step ? this._step : 1);\n this.runAnimation(newVal);\n this._interval = setInterval(() => this.increase(newVal, stepDirection), duration);\n }\n else {\n this.updateProgress(newVal);\n }\n if (maxUpdate) {\n return;\n }\n this.progressChanged.emit(changedValues);\n }\n /**\n * @hidden\n */\n increase(newValue, step) {\n const targetValue = toPercent(newValue, this._max);\n this._value = valueInRange(this._value, this._max) + step;\n if ((step > 0 && this.valueInPercent >= targetValue) || (step < 0 && this.valueInPercent <= targetValue)) {\n if (this._value !== newValue) {\n this._value = newValue;\n }\n return clearInterval(this._interval);\n }\n }\n /**\n * @hidden\n */\n directionFlow(currentValue, prevValue) {\n return currentValue < prevValue ? this.step : -this.step;\n }\n /**\n * @hidden\n * @param step\n */\n updateProgress(val) {\n this._value = valueInRange(val, this._max);\n // this.valueInPercent = toPercent(val, this._max);\n this.runAnimation(val);\n }\n}\nBaseProgressDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: BaseProgressDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nBaseProgressDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: BaseProgressDirective, inputs: { indeterminate: \"indeterminate\", animationDuration: \"animationDuration\", step: \"step\", animate: \"animate\", max: \"max\", value: \"value\" }, outputs: { progressChanged: \"progressChanged\" }, host: { properties: { \"attr.aria-valuemax\": \"this.max\", \"attr.aria-valuenow\": \"this.value\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: BaseProgressDirective, decorators: [{\n type: Directive\n }], ctorParameters: function () { return []; }, propDecorators: { progressChanged: [{\n type: Output\n }], indeterminate: [{\n type: Input\n }], animationDuration: [{\n type: Input\n }], step: [{\n type: Input\n }], animate: [{\n type: Input\n }], max: [{\n type: HostBinding,\n args: ['attr.aria-valuemax']\n }, {\n type: Input\n }], value: [{\n type: HostBinding,\n args: ['attr.aria-valuenow']\n }, {\n type: Input\n }] } });\nlet NEXT_LINEAR_ID = 0;\nlet NEXT_CIRCULAR_ID = 0;\nlet NEXT_GRADIENT_ID = 0;\nclass IgxLinearProgressBarComponent extends BaseProgressDirective {\n constructor() {\n super(...arguments);\n this.valueMin = 0;\n this.cssClass = 'igx-linear-bar';\n /**\n * Set `IgxLinearProgressBarComponent` to have striped style. By default it is set to false.\n * ```html\n * \n * ```\n */\n this.striped = false;\n /**\n * An @Input property that sets the value of the `role` attribute. If not provided it will be automatically set to `progressbar`.\n * ```html\n * \n * ```\n */\n this.role = 'progressbar';\n /**\n * An @Input property that sets the value of `id` attribute. If not provided it will be automatically generated.\n * ```html\n * \n * ```\n */\n this.id = `igx-linear-bar-${NEXT_LINEAR_ID++}`;\n /**\n * Set the position that defines where the text is aligned.\n * Possible options - `IgxTextAlign.START` (default), `IgxTextAlign.CENTER`, `IgxTextAlign.END`.\n * ```typescript\n * public positionCenter: IgxTextAlign;\n * public ngOnInit() {\n * this.positionCenter = IgxTextAlign.CENTER;\n * }\n * //...\n * ```\n * ```html\n * \n * ```\n */\n this.textAlign = IgxTextAlign.START;\n /**\n * Set the text to be visible. By default it is set to true.\n * ```html\n * \n * ```\n */\n this.textVisibility = true;\n /**\n * Set the position that defines if the text should be aligned above the progress line. By default is set to false.\n * ```html\n * \n * ```\n */\n this.textTop = false;\n /**\n * Set type of the `IgxLinearProgressBarComponent`. Possible options - `default`, `success`, `info`, `warning`, and `error`.\n * ```html\n * \n * ```\n */\n this.type = 'default';\n this.animationState = {\n width: '0%'\n };\n }\n /**\n * @hidden\n * ```\n */\n get isIndeterminate() {\n return this.indeterminate;\n }\n /**\n * @hidden\n */\n get error() {\n return this.type === IgxProgressType.ERROR;\n }\n /**\n * @hidden\n */\n get info() {\n return this.type === IgxProgressType.INFO;\n }\n /**\n * @hidden\n */\n get warning() {\n return this.type === IgxProgressType.WARNING;\n }\n /**\n * @hidden\n */\n get success() {\n return this.type === IgxProgressType.SUCCESS;\n }\n ngAfterContentInit() {\n this.triggerProgressTransition(MIN_VALUE, this._initValue);\n this._contentInit = true;\n }\n runAnimation(value) {\n if (this._animation && this._animation.playState !== 'finished') {\n return;\n }\n const valueInPercent = this.max <= 0 ? 0 : toPercent(value, this.max);\n const FRAMES = [];\n FRAMES[0] = Object.assign({}, this.animationState);\n this.animationState.width = valueInPercent + '%';\n FRAMES[1] = Object.assign({}, this.animationState);\n this._animation = this._progressIndicator.nativeElement.animate(FRAMES, {\n easing: 'ease-out',\n fill: 'forwards',\n duration: this.animationDuration\n });\n }\n}\nIgxLinearProgressBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxLinearProgressBarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxLinearProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxLinearProgressBarComponent, selector: \"igx-linear-bar\", inputs: { striped: \"striped\", role: \"role\", id: \"id\", textAlign: \"textAlign\", textVisibility: \"textVisibility\", textTop: \"textTop\", text: \"text\", type: \"type\" }, host: { properties: { \"attr.aria-valuemin\": \"this.valueMin\", \"class.igx-linear-bar\": \"this.cssClass\", \"class.igx-linear-bar--striped\": \"this.striped\", \"class.igx-linear-bar--indeterminate\": \"this.isIndeterminate\", \"attr.role\": \"this.role\", \"attr.id\": \"this.id\", \"class.igx-linear-bar--danger\": \"this.error\", \"class.igx-linear-bar--info\": \"this.info\", \"class.igx-linear-bar--warning\": \"this.warning\", \"class.igx-linear-bar--success\": \"this.success\" } }, viewQueries: [{ propertyName: \"_progressIndicator\", first: true, predicate: [\"indicator\"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"
    \\n
    \\n
    \\n
    \\n\\n\\n {{text ? text : valueInPercent + '%'}}\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxLinearProgressBarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-linear-bar', template: \"
    \\n
    \\n
    \\n
    \\n\\n\\n {{text ? text : valueInPercent + '%'}}\\n\\n\" }]\n }], propDecorators: { valueMin: [{\n type: HostBinding,\n args: ['attr.aria-valuemin']\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-linear-bar']\n }], striped: [{\n type: HostBinding,\n args: ['class.igx-linear-bar--striped']\n }, {\n type: Input\n }], isIndeterminate: [{\n type: HostBinding,\n args: ['class.igx-linear-bar--indeterminate']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }, {\n type: Input\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], textAlign: [{\n type: Input\n }], textVisibility: [{\n type: Input\n }], textTop: [{\n type: Input\n }], text: [{\n type: Input\n }], type: [{\n type: Input\n }], _progressIndicator: [{\n type: ViewChild,\n args: ['indicator', { static: true }]\n }], error: [{\n type: HostBinding,\n args: ['class.igx-linear-bar--danger']\n }], info: [{\n type: HostBinding,\n args: ['class.igx-linear-bar--info']\n }], warning: [{\n type: HostBinding,\n args: ['class.igx-linear-bar--warning']\n }], success: [{\n type: HostBinding,\n args: ['class.igx-linear-bar--success']\n }] } });\nclass IgxCircularProgressBarComponent extends BaseProgressDirective {\n /**\n * @hidden\n */\n get isIndeterminate() {\n return this.indeterminate;\n }\n /**\n * @hidden\n */\n get context() {\n return {\n $implicit: { value: this.value, valueInPercent: this.valueInPercent, max: this.max }\n };\n }\n constructor(renderer, _directionality) {\n super();\n this.renderer = renderer;\n this._directionality = _directionality;\n /** @hidden */\n this.cssClass = 'igx-circular-bar';\n /**\n * An @Input property that sets the value of `id` attribute. If not provided it will be automatically generated.\n * ```html\n * \n * ```\n */\n this.id = `igx-circular-bar-${NEXT_CIRCULAR_ID++}`;\n /**\n * Sets the text visibility. By default it is set to true.\n * ```html\n * \n * ```\n */\n this.textVisibility = true;\n /**\n * @hidden\n */\n this.gradientId = `igx-circular-gradient-${NEXT_GRADIENT_ID++}`;\n this._circleRadius = 46;\n this._circumference = 2 * Math.PI * this._circleRadius;\n this.STROKE_OPACITY_DVIDER = 100;\n this.STROKE_OPACITY_ADDITION = .2;\n this.animationState = {\n strokeDashoffset: 289,\n strokeOpacity: 1\n };\n }\n ngAfterContentInit() {\n this.triggerProgressTransition(MIN_VALUE, this._initValue);\n this._contentInit = true;\n }\n ngAfterViewInit() {\n this.renderer.setStyle(this._svgCircle.nativeElement, 'stroke', `url(#${this.gradientId})`);\n }\n /**\n * @hidden\n */\n get textContent() {\n return this.text;\n }\n runAnimation(value) {\n if (this._animation && this._animation.playState !== 'finished') {\n return;\n }\n const valueInPercent = this.max <= 0 ? 0 : toPercent(value, this.max);\n const FRAMES = [];\n FRAMES[0] = Object.assign({}, this.animationState);\n this.animationState.strokeDashoffset = this.getProgress(valueInPercent);\n this.animationState.strokeOpacity = toPercent(value, this.max) / this.STROKE_OPACITY_DVIDER + this.STROKE_OPACITY_ADDITION;\n FRAMES[1] = Object.assign({}, this.animationState);\n this._animation = this._svgCircle.nativeElement.animate(FRAMES, {\n easing: 'ease-out',\n fill: 'forwards',\n duration: this.animationDuration\n });\n }\n getProgress(percentage) {\n return this._directionality.rtl ?\n this._circumference + (percentage * this._circumference / 100) :\n this._circumference - (percentage * this._circumference / 100);\n }\n}\nIgxCircularProgressBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCircularProgressBarComponent, deps: [{ token: i0.Renderer2 }, { token: IgxDirectionality }], target: i0.ɵɵFactoryTarget.Component });\nIgxCircularProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCircularProgressBarComponent, selector: \"igx-circular-bar\", inputs: { id: \"id\", isIndeterminate: \"isIndeterminate\", textVisibility: \"textVisibility\", text: \"text\" }, host: { properties: { \"class.igx-circular-bar\": \"this.cssClass\", \"attr.id\": \"this.id\", \"class.igx-circular-bar--indeterminate\": \"this.isIndeterminate\" } }, queries: [{ propertyName: \"textTemplate\", first: true, predicate: IgxProcessBarTextTemplateDirective, descendants: true, read: IgxProcessBarTextTemplateDirective }, { propertyName: \"gradientTemplate\", first: true, predicate: IgxProgressBarGradientDirective, descendants: true, read: IgxProgressBarGradientDirective }], viewQueries: [{ propertyName: \"_svgCircle\", first: true, predicate: [\"circle\"], descendants: true, static: true }], 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 {{textContent ? textContent: valueInPercent + '%'}}\\n\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCircularProgressBarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-circular-bar', template: \"\\n \\n \\n\\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n\\n\\n \\n \\n\\n\\n\\n {{textContent ? textContent: valueInPercent + '%'}}\\n\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: IgxDirectionality }]; }, propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-circular-bar']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], isIndeterminate: [{\n type: HostBinding,\n args: ['class.igx-circular-bar--indeterminate']\n }, {\n type: Input\n }], textVisibility: [{\n type: Input\n }], text: [{\n type: Input\n }], textTemplate: [{\n type: ContentChild,\n args: [IgxProcessBarTextTemplateDirective, { read: IgxProcessBarTextTemplateDirective }]\n }], gradientTemplate: [{\n type: ContentChild,\n args: [IgxProgressBarGradientDirective, { read: IgxProgressBarGradientDirective }]\n }], _svgCircle: [{\n type: ViewChild,\n args: ['circle', { static: true }]\n }] } });\nconst valueInRange = (value, max, min = 0) => Math.max(Math.min(value, max), min);\nconst toPercent = (value, max) => !max ? 0 : Math.floor(100 * value / max);\nconst toValue = (value, max) => max * value / 100;\n/**\n * @hidden\n */\nclass IgxProgressBarModule {\n}\nIgxProgressBarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxProgressBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxProgressBarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxProgressBarModule, declarations: [IgxLinearProgressBarComponent, IgxCircularProgressBarComponent, IgxProcessBarTextTemplateDirective,\n IgxProgressBarGradientDirective], imports: [CommonModule], exports: [IgxLinearProgressBarComponent, IgxCircularProgressBarComponent, IgxProcessBarTextTemplateDirective,\n IgxProgressBarGradientDirective] });\nIgxProgressBarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxProgressBarModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxProgressBarModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxLinearProgressBarComponent,\n IgxCircularProgressBarComponent,\n IgxProcessBarTextTemplateDirective,\n IgxProgressBarGradientDirective,\n ],\n exports: [\n IgxLinearProgressBarComponent,\n IgxCircularProgressBarComponent,\n IgxProcessBarTextTemplateDirective,\n IgxProgressBarGradientDirective,\n ],\n imports: [CommonModule]\n }]\n }] });\n\n// Enums\nconst IgxTreeSelectionType = mkenum({\n None: 'None',\n BiState: 'BiState',\n Cascading: 'Cascading'\n});\n// Token\nconst IGX_TREE_COMPONENT = new InjectionToken('IgxTreeToken');\nconst IGX_TREE_NODE_COMPONENT = new InjectionToken('IgxTreeNodeToken');\n\n/** @hidden @internal */\nclass IgxTreeService {\n constructor() {\n this.expandedNodes = new Set();\n this.collapsingNodes = new Set();\n this.siblingComparer = (data, node) => node !== data && node.level === data.level;\n }\n /**\n * Adds the node to the `expandedNodes` set and fires the nodes change event\n *\n * @param node target node\n * @param uiTrigger is the event triggered by a ui interraction (so we know if we should animate)\n * @returns void\n */\n expand(node, uiTrigger) {\n var _a;\n this.collapsingNodes.delete(node);\n if (!this.expandedNodes.has(node)) {\n node.expandedChange.emit(true);\n }\n else {\n return;\n }\n this.expandedNodes.add(node);\n if (this.tree.singleBranchExpand) {\n (_a = this.tree.findNodes(node, this.siblingComparer)) === null || _a === void 0 ? void 0 : _a.forEach(e => {\n if (uiTrigger) {\n e.collapse();\n }\n else {\n e.expanded = false;\n }\n });\n }\n }\n /**\n * Adds a node to the `collapsing` collection\n *\n * @param node target node\n */\n collapsing(node) {\n this.collapsingNodes.add(node);\n }\n /**\n * Removes the node from the 'expandedNodes' set and emits the node's change event\n *\n * @param node target node\n * @returns void\n */\n collapse(node) {\n if (this.expandedNodes.has(node)) {\n node.expandedChange.emit(false);\n }\n this.collapsingNodes.delete(node);\n this.expandedNodes.delete(node);\n }\n isExpanded(node) {\n return this.expandedNodes.has(node);\n }\n register(tree) {\n this.tree = tree;\n }\n}\nIgxTreeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIgxTreeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeService, decorators: [{\n type: Injectable\n }] });\n\n;\n/** @hidden @internal */\nclass IgxTreeSelectionService {\n constructor() {\n this.nodeSelection = new Set();\n this.indeterminateNodes = new Set();\n }\n register(tree) {\n this.tree = tree;\n }\n /** Select range from last selected node to the current specified node. */\n selectMultipleNodes(node, event) {\n if (!this.nodeSelection.size) {\n this.selectNode(node);\n return;\n }\n const lastSelectedNodeIndex = this.tree.nodes.toArray().indexOf(this.getSelectedNodes()[this.nodeSelection.size - 1]);\n const currentNodeIndex = this.tree.nodes.toArray().indexOf(node);\n const nodes = this.tree.nodes.toArray().slice(Math.min(currentNodeIndex, lastSelectedNodeIndex), Math.max(currentNodeIndex, lastSelectedNodeIndex) + 1);\n const added = nodes.filter(_node => !this.isNodeSelected(_node));\n const newSelection = this.getSelectedNodes().concat(added);\n this.emitNodeSelectionEvent(newSelection, added, [], event);\n }\n /** Select the specified node and emit event. */\n selectNode(node, event) {\n if (this.tree.selection === IgxTreeSelectionType.None) {\n return;\n }\n this.emitNodeSelectionEvent([...this.getSelectedNodes(), node], [node], [], event);\n }\n /** Deselect the specified node and emit event. */\n deselectNode(node, event) {\n const newSelection = this.getSelectedNodes().filter(r => r !== node);\n this.emitNodeSelectionEvent(newSelection, [], [node], event);\n }\n /** Clears node selection */\n clearNodesSelection() {\n this.nodeSelection.clear();\n this.indeterminateNodes.clear();\n }\n isNodeSelected(node) {\n return this.nodeSelection.has(node);\n }\n isNodeIndeterminate(node) {\n return this.indeterminateNodes.has(node);\n }\n /** Select specified nodes. No event is emitted. */\n selectNodesWithNoEvent(nodes, clearPrevSelection = false, shouldEmit = true) {\n if (this.tree && this.tree.selection === IgxTreeSelectionType.Cascading) {\n this.cascadeSelectNodesWithNoEvent(nodes, clearPrevSelection);\n return;\n }\n const oldSelection = this.getSelectedNodes();\n if (clearPrevSelection) {\n this.nodeSelection.clear();\n }\n nodes.forEach(node => this.nodeSelection.add(node));\n if (shouldEmit) {\n this.emitSelectedChangeEvent(oldSelection);\n }\n }\n /** Deselect specified nodes. No event is emitted. */\n deselectNodesWithNoEvent(nodes, shouldEmit = true) {\n const oldSelection = this.getSelectedNodes();\n if (!nodes) {\n this.nodeSelection.clear();\n }\n else if (this.tree && this.tree.selection === IgxTreeSelectionType.Cascading) {\n this.cascadeDeselectNodesWithNoEvent(nodes);\n }\n else {\n nodes.forEach(node => this.nodeSelection.delete(node));\n }\n if (shouldEmit) {\n this.emitSelectedChangeEvent(oldSelection);\n }\n }\n /** Called on `node.ngOnDestroy` to ensure state is correct after node is removed */\n ensureStateOnNodeDelete(node) {\n var _a;\n if (((_a = this.tree) === null || _a === void 0 ? void 0 : _a.selection) !== IgxTreeSelectionType.Cascading) {\n return;\n }\n requestAnimationFrame(() => {\n var _a;\n if (this.isNodeSelected(node)) {\n // node is destroyed, do not emit event\n this.deselectNodesWithNoEvent([node], false);\n }\n else {\n if (!node.parentNode) {\n return;\n }\n const assitantLeafNode = (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.allChildren.find(e => { var _a; return !((_a = e._children) === null || _a === void 0 ? void 0 : _a.length); });\n if (!assitantLeafNode) {\n return;\n }\n this.retriggerNodeState(assitantLeafNode);\n }\n });\n }\n /** Retriggers a node's selection state */\n retriggerNodeState(node) {\n if (node.selected) {\n this.nodeSelection.delete(node);\n this.selectNodesWithNoEvent([node], false, false);\n }\n else {\n this.nodeSelection.add(node);\n this.deselectNodesWithNoEvent([node], false);\n }\n }\n /** Returns array of the selected nodes. */\n getSelectedNodes() {\n return this.nodeSelection.size ? Array.from(this.nodeSelection) : [];\n }\n /** Returns array of the nodes in indeterminate state. */\n getIndeterminateNodes() {\n return this.indeterminateNodes.size ? Array.from(this.indeterminateNodes) : [];\n }\n emitNodeSelectionEvent(newSelection, added, removed, event) {\n if (this.tree.selection === IgxTreeSelectionType.Cascading) {\n this.emitCascadeNodeSelectionEvent(newSelection, added, removed, event);\n return;\n }\n const currSelection = this.getSelectedNodes();\n if (this.areEqualCollections(currSelection, newSelection)) {\n return;\n }\n const args = {\n oldSelection: currSelection, newSelection,\n added, removed, event, cancel: false, owner: this.tree\n };\n this.tree.nodeSelection.emit(args);\n if (args.cancel) {\n return;\n }\n this.selectNodesWithNoEvent(args.newSelection, true);\n }\n areEqualCollections(first, second) {\n return first.length === second.length && new Set(first.concat(second)).size === first.length;\n }\n cascadeSelectNodesWithNoEvent(nodes, clearPrevSelection = false) {\n const oldSelection = this.getSelectedNodes();\n if (clearPrevSelection) {\n this.indeterminateNodes.clear();\n this.nodeSelection.clear();\n this.calculateNodesNewSelectionState({ added: nodes, removed: [] });\n }\n else {\n const newSelection = [...oldSelection, ...nodes];\n const args = { oldSelection, newSelection };\n // retrieve only the rows without their parents/children which has to be added to the selection\n this.populateAddRemoveArgs(args);\n this.calculateNodesNewSelectionState(args);\n }\n this.nodeSelection = new Set(this.nodesToBeSelected);\n this.indeterminateNodes = new Set(this.nodesToBeIndeterminate);\n this.emitSelectedChangeEvent(oldSelection);\n }\n cascadeDeselectNodesWithNoEvent(nodes) {\n const args = { added: [], removed: nodes };\n this.calculateNodesNewSelectionState(args);\n this.nodeSelection = new Set(this.nodesToBeSelected);\n this.indeterminateNodes = new Set(this.nodesToBeIndeterminate);\n }\n /**\n * populates the nodesToBeSelected and nodesToBeIndeterminate sets\n * with the nodes which will be eventually in selected/indeterminate state\n */\n calculateNodesNewSelectionState(args) {\n this.nodesToBeSelected = new Set(args.oldSelection ? args.oldSelection : this.getSelectedNodes());\n this.nodesToBeIndeterminate = new Set(this.getIndeterminateNodes());\n this.cascadeSelectionState(args.removed, false);\n this.cascadeSelectionState(args.added, true);\n }\n /** Ensures proper selection state for all predescessors and descendants during a selection event */\n cascadeSelectionState(nodes, selected) {\n if (!nodes || nodes.length === 0) {\n return;\n }\n if (nodes && nodes.length > 0) {\n const nodeCollection = this.getCascadingNodeCollection(nodes);\n nodeCollection.nodes.forEach(node => {\n if (selected) {\n this.nodesToBeSelected.add(node);\n }\n else {\n this.nodesToBeSelected.delete(node);\n }\n this.nodesToBeIndeterminate.delete(node);\n });\n Array.from(nodeCollection.parents).forEach((parent) => {\n this.handleParentSelectionState(parent);\n });\n }\n }\n emitCascadeNodeSelectionEvent(newSelection, added, removed, event) {\n const currSelection = this.getSelectedNodes();\n if (this.areEqualCollections(currSelection, newSelection)) {\n return;\n }\n const args = {\n oldSelection: currSelection, newSelection,\n added, removed, event, cancel: false, owner: this.tree\n };\n this.calculateNodesNewSelectionState(args);\n args.newSelection = Array.from(this.nodesToBeSelected);\n // retrieve nodes/parents/children which has been added/removed from the selection\n this.populateAddRemoveArgs(args);\n this.tree.nodeSelection.emit(args);\n if (args.cancel) {\n return;\n }\n // if args.newSelection hasn't been modified\n if (this.areEqualCollections(Array.from(this.nodesToBeSelected), args.newSelection)) {\n this.nodeSelection = new Set(this.nodesToBeSelected);\n this.indeterminateNodes = new Set(this.nodesToBeIndeterminate);\n this.emitSelectedChangeEvent(currSelection);\n }\n else {\n // select the nodes within the modified args.newSelection with no event\n this.cascadeSelectNodesWithNoEvent(args.newSelection, true);\n }\n }\n /**\n * recursively handle the selection state of the direct and indirect parents\n */\n handleParentSelectionState(node) {\n if (!node) {\n return;\n }\n this.handleNodeSelectionState(node);\n if (node.parentNode) {\n this.handleParentSelectionState(node.parentNode);\n }\n }\n /**\n * Handle the selection state of a given node based the selection states of its direct children\n */\n handleNodeSelectionState(node) {\n const nodesArray = (node && node._children) ? node._children.toArray() : [];\n if (nodesArray.length) {\n if (nodesArray.every(n => this.nodesToBeSelected.has(n))) {\n this.nodesToBeSelected.add(node);\n this.nodesToBeIndeterminate.delete(node);\n }\n else if (nodesArray.some(n => this.nodesToBeSelected.has(n) || this.nodesToBeIndeterminate.has(n))) {\n this.nodesToBeIndeterminate.add(node);\n this.nodesToBeSelected.delete(node);\n }\n else {\n this.nodesToBeIndeterminate.delete(node);\n this.nodesToBeSelected.delete(node);\n }\n }\n else {\n // if the children of the node has been deleted and the node was selected do not change its state\n if (this.isNodeSelected(node)) {\n this.nodesToBeSelected.add(node);\n }\n else {\n this.nodesToBeSelected.delete(node);\n }\n this.nodesToBeIndeterminate.delete(node);\n }\n }\n /**\n * Get a collection of all nodes affected by the change event\n *\n * @param nodesToBeProcessed set of the nodes to be selected/deselected\n * @returns a collection of all affected nodes and all their parents\n */\n getCascadingNodeCollection(nodes) {\n const collection = {\n parents: new Set(),\n nodes: new Set(nodes)\n };\n Array.from(collection.nodes).forEach((node) => {\n var _a;\n const nodeAndAllChildren = ((_a = node.allChildren) === null || _a === void 0 ? void 0 : _a.toArray()) || [];\n nodeAndAllChildren.forEach(n => {\n collection.nodes.add(n);\n });\n if (node && node.parentNode) {\n collection.parents.add(node.parentNode);\n }\n });\n return collection;\n }\n /**\n * retrieve the nodes which should be added/removed to/from the old selection\n */\n populateAddRemoveArgs(args) {\n args.removed = args.oldSelection.filter(x => args.newSelection.indexOf(x) < 0);\n args.added = args.newSelection.filter(x => args.oldSelection.indexOf(x) < 0);\n }\n /** Emits the `selectedChange` event for each node affected by the selection */\n emitSelectedChangeEvent(oldSelection) {\n this.getSelectedNodes().forEach(n => {\n if (oldSelection.indexOf(n) < 0) {\n n.selectedChange.emit(true);\n }\n });\n oldSelection.forEach(n => {\n if (!this.nodeSelection.has(n)) {\n n.selectedChange.emit(false);\n }\n });\n }\n}\nIgxTreeSelectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIgxTreeSelectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeSelectionService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeSelectionService, decorators: [{\n type: Injectable\n }] });\n\n/** @hidden @internal */\nclass IgxTreeNavigationService {\n constructor(treeService, selectionService) {\n this.treeService = treeService;\n this.selectionService = selectionService;\n this._focusedNode = null;\n this._lastFocusedNode = null;\n this._activeNode = null;\n this._visibleChildren = [];\n this._invisibleChildren = new Set();\n this._disabledChildren = new Set();\n this._cacheChange = new Subject();\n this._cacheChange.subscribe(() => {\n var _a;\n this._visibleChildren =\n ((_a = this.tree) === null || _a === void 0 ? void 0 : _a.nodes) ?\n this.tree.nodes.filter(e => !(this._invisibleChildren.has(e) || this._disabledChildren.has(e))) :\n [];\n });\n }\n register(tree) {\n this.tree = tree;\n }\n get focusedNode() {\n return this._focusedNode;\n }\n set focusedNode(value) {\n if (this._focusedNode === value) {\n return;\n }\n this._lastFocusedNode = this._focusedNode;\n if (this._lastFocusedNode) {\n this._lastFocusedNode.tabIndex = -1;\n }\n this._focusedNode = value;\n if (this._focusedNode !== null) {\n this._focusedNode.tabIndex = 0;\n this._focusedNode.header.nativeElement.focus();\n }\n }\n get activeNode() {\n return this._activeNode;\n }\n set activeNode(value) {\n if (this._activeNode === value) {\n return;\n }\n this._activeNode = value;\n this.tree.activeNodeChanged.emit(this._activeNode);\n }\n get visibleChildren() {\n return this._visibleChildren;\n }\n update_disabled_cache(node) {\n if (node.disabled) {\n this._disabledChildren.add(node);\n }\n else {\n this._disabledChildren.delete(node);\n }\n this._cacheChange.next();\n }\n init_invisible_cache() {\n this.tree.nodes.filter(e => e.level === 0).forEach(node => {\n this.update_visible_cache(node, node.expanded, false);\n });\n this._cacheChange.next();\n }\n update_visible_cache(node, expanded, shouldEmit = true) {\n if (expanded) {\n node._children.forEach(child => {\n this._invisibleChildren.delete(child);\n this.update_visible_cache(child, child.expanded, false);\n });\n }\n else {\n node.allChildren.forEach(c => this._invisibleChildren.add(c));\n }\n if (shouldEmit) {\n this._cacheChange.next();\n }\n }\n /**\n * Sets the node as focused (and active)\n *\n * @param node target node\n * @param isActive if true, sets the node as active\n */\n setFocusedAndActiveNode(node, isActive = true) {\n if (isActive) {\n this.activeNode = node;\n }\n this.focusedNode = node;\n }\n /** Handler for keydown events. Used in tree.component.ts */\n handleKeydown(event) {\n const key = event.key.toLowerCase();\n if (!this.focusedNode) {\n return;\n }\n if (!(NAVIGATION_KEYS.has(key) || key === '*')) {\n if (key === 'enter') {\n this.activeNode = this.focusedNode;\n }\n return;\n }\n event.preventDefault();\n if (event.repeat) {\n setTimeout(() => this.handleNavigation(event), 1);\n }\n else {\n this.handleNavigation(event);\n }\n }\n ngOnDestroy() {\n this._cacheChange.next();\n this._cacheChange.complete();\n }\n handleNavigation(event) {\n switch (event.key.toLowerCase()) {\n case 'home':\n this.setFocusedAndActiveNode(this.visibleChildren[0]);\n break;\n case 'end':\n this.setFocusedAndActiveNode(this.visibleChildren[this.visibleChildren.length - 1]);\n break;\n case 'arrowleft':\n case 'left':\n this.handleArrowLeft();\n break;\n case 'arrowright':\n case 'right':\n this.handleArrowRight();\n break;\n case 'arrowup':\n case 'up':\n this.handleUpDownArrow(true, event);\n break;\n case 'arrowdown':\n case 'down':\n this.handleUpDownArrow(false, event);\n break;\n case '*':\n this.handleAsterisk();\n break;\n case ' ':\n case 'spacebar':\n case 'space':\n this.handleSpace(event.shiftKey);\n break;\n default:\n return;\n }\n }\n handleArrowLeft() {\n var _a;\n if (this.focusedNode.expanded && !this.treeService.collapsingNodes.has(this.focusedNode) && ((_a = this.focusedNode._children) === null || _a === void 0 ? void 0 : _a.length)) {\n this.activeNode = this.focusedNode;\n this.focusedNode.collapse();\n }\n else {\n const parentNode = this.focusedNode.parentNode;\n if (parentNode && !parentNode.disabled) {\n this.setFocusedAndActiveNode(parentNode);\n }\n }\n }\n handleArrowRight() {\n if (this.focusedNode._children.length > 0) {\n if (!this.focusedNode.expanded) {\n this.activeNode = this.focusedNode;\n this.focusedNode.expand();\n }\n else {\n if (this.treeService.collapsingNodes.has(this.focusedNode)) {\n this.focusedNode.expand();\n return;\n }\n const firstChild = this.focusedNode._children.find(node => !node.disabled);\n if (firstChild) {\n this.setFocusedAndActiveNode(firstChild);\n }\n }\n }\n }\n handleUpDownArrow(isUp, event) {\n const next = this.getVisibleNode(this.focusedNode, isUp ? -1 : 1);\n if (next === this.focusedNode) {\n return;\n }\n if (event.ctrlKey) {\n this.setFocusedAndActiveNode(next, false);\n }\n else {\n this.setFocusedAndActiveNode(next);\n }\n }\n handleAsterisk() {\n const nodes = this.focusedNode.parentNode ? this.focusedNode.parentNode._children : this.tree.rootNodes;\n nodes === null || nodes === void 0 ? void 0 : nodes.forEach(node => {\n if (!node.disabled && (!node.expanded || this.treeService.collapsingNodes.has(node))) {\n node.expand();\n }\n });\n }\n handleSpace(shiftKey = false) {\n if (this.tree.selection === IgxTreeSelectionType.None) {\n return;\n }\n this.activeNode = this.focusedNode;\n if (shiftKey) {\n this.selectionService.selectMultipleNodes(this.focusedNode);\n return;\n }\n if (this.focusedNode.selected) {\n this.selectionService.deselectNode(this.focusedNode);\n }\n else {\n this.selectionService.selectNode(this.focusedNode);\n }\n }\n /** Gets the next visible node in the given direction - 1 -> next, -1 -> previous */\n getVisibleNode(node, dir = 1) {\n const nodeIndex = this.visibleChildren.indexOf(node);\n return this.visibleChildren[nodeIndex + dir] || node;\n }\n}\nIgxTreeNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeNavigationService, deps: [{ token: IgxTreeService }, { token: IgxTreeSelectionService }], target: i0.ɵɵFactoryTarget.Injectable });\nIgxTreeNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeNavigationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeNavigationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: IgxTreeService }, { type: IgxTreeSelectionService }]; } });\n\n// TODO: Implement aria functionality\n/**\n * @hidden @internal\n * Used for links (`a` tags) in the body of an `igx-tree-node`. Handles aria and event dispatch.\n */\nclass IgxTreeNodeLinkDirective {\n /**\n * The node's parent. Should be used only when the link is defined\n * in `` tag outside of its parent, as Angular DI will not properly provide a reference\n *\n * ```html\n * \n * \n * \n * \n * \n * ...\n * \n * \n * {{ data.label }}\n * \n * \n * ```\n */\n set parentNode(val) {\n if (val) {\n this._parentNode = val;\n this._parentNode.addLinkChild(this);\n }\n }\n get parentNode() {\n return this._parentNode;\n }\n /** A pointer to the parent node */\n get target() {\n return this.node || this.parentNode;\n }\n constructor(node, navService, elementRef) {\n this.node = node;\n this.navService = navService;\n this.elementRef = elementRef;\n this.role = 'treeitem';\n this._parentNode = null;\n }\n /** @hidden @internal */\n get tabIndex() {\n var _a;\n return this.navService.focusedNode === this.target ? (((_a = this.target) === null || _a === void 0 ? void 0 : _a.disabled) ? -1 : 0) : -1;\n }\n /**\n * @hidden @internal\n * Clear the node's focused state\n */\n handleBlur() {\n this.target.isFocused = false;\n }\n /**\n * @hidden @internal\n * Set the node as focused\n */\n handleFocus() {\n if (this.target && !this.target.disabled) {\n if (this.navService.focusedNode !== this.target) {\n this.navService.focusedNode = this.target;\n }\n this.target.isFocused = true;\n }\n }\n ngOnDestroy() {\n this.target.removeLinkChild(this);\n }\n}\nIgxTreeNodeLinkDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeNodeLinkDirective, deps: [{ token: IGX_TREE_NODE_COMPONENT, optional: true }, { token: IgxTreeNavigationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTreeNodeLinkDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTreeNodeLinkDirective, selector: \"[igxTreeNodeLink]\", inputs: { parentNode: [\"igxTreeNodeLink\", \"parentNode\"] }, host: { listeners: { \"blur\": \"handleBlur()\", \"focus\": \"handleFocus()\" }, properties: { \"attr.role\": \"this.role\", \"attr.tabindex\": \"this.tabIndex\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeNodeLinkDirective, decorators: [{\n type: Directive,\n args: [{\n selector: `[igxTreeNodeLink]`\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IGX_TREE_NODE_COMPONENT]\n }] }, { type: IgxTreeNavigationService }, { type: i0.ElementRef }];\n }, propDecorators: { role: [{\n type: HostBinding,\n args: ['attr.role']\n }], parentNode: [{\n type: Input,\n args: ['igxTreeNodeLink']\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], handleBlur: [{\n type: HostListener,\n args: ['blur']\n }], handleFocus: [{\n type: HostListener,\n args: ['focus']\n }] } });\n/**\n *\n * The tree node component represents a child node of the tree component or another tree node.\n * Usage:\n *\n * ```html\n * \n * ...\n * \n * {{ data.FirstName }} {{ data.LastName }}\n * \n * ...\n * \n * ```\n */\nclass IgxTreeNodeComponent extends ToggleAnimationPlayer {\n // TO DO: return different tab index depending on anchor child\n /** @hidden @internal */\n set tabIndex(val) {\n this._tabIndex = val;\n }\n /** @hidden @internal */\n get tabIndex() {\n if (this.disabled) {\n return -1;\n }\n if (this._tabIndex === null) {\n if (this.navService.focusedNode === null) {\n return this.hasLinkChildren ? -1 : 0;\n }\n return -1;\n }\n return this.hasLinkChildren ? -1 : this._tabIndex;\n }\n /** @hidden @internal */\n get animationSettings() {\n return this.tree.animationSettings;\n }\n /**\n * Gets/Sets the resource strings.\n *\n * @remarks\n * Uses EN resources by default.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /**\n * An accessor that returns the resource strings.\n */\n get resourceStrings() {\n if (!this._resourceStrings) {\n this._resourceStrings = CurrentResourceStrings.TreeResStrings;\n }\n return this._resourceStrings;\n }\n /**\n * Gets/Sets the active state of the node\n *\n * @param value: boolean\n */\n set active(value) {\n if (value) {\n this.navService.activeNode = this;\n this.tree.activeNodeBindingChange.emit(this);\n }\n }\n get active() {\n return this.navService.activeNode === this;\n }\n /** @hidden @internal */\n get focused() {\n return this.isFocused &&\n this.navService.focusedNode === this;\n }\n /**\n * Retrieves the full path to the node incuding itself\n *\n * ```typescript\n * const node: IgxTreeNode = this.tree.findNodes(data[0])[0];\n * const path: IgxTreeNode[] = node.path;\n * ```\n */\n get path() {\n var _a;\n return ((_a = this.parentNode) === null || _a === void 0 ? void 0 : _a.path) ? [...this.parentNode.path, this] : [this];\n }\n // TODO: bind to disabled state when node is dragged\n /**\n * Gets/Sets the disabled state of the node\n *\n * @param value: boolean\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n if (value !== this._disabled) {\n this._disabled = value;\n this.tree.disabledChange.emit(this);\n }\n }\n /** @hidden @internal */\n get role() {\n return this.hasLinkChildren ? 'none' : 'treeitem';\n }\n ;\n /**\n * Return the child nodes of the node (if any)\n *\n * @remark\n * Returns `null` if node does not have children\n *\n * @example\n * ```typescript\n * const node: IgxTreeNode = this.tree.findNodes(data[0])[0];\n * const children: IgxTreeNode[] = node.children;\n * ```\n */\n get children() {\n var _a;\n return ((_a = this._children) === null || _a === void 0 ? void 0 : _a.length) ? this._children.toArray() : null;\n }\n get hasLinkChildren() {\n var _a, _b;\n return ((_a = this.linkChildren) === null || _a === void 0 ? void 0 : _a.length) > 0 || ((_b = this.registeredChildren) === null || _b === void 0 ? void 0 : _b.length) > 0;\n }\n /** @hidden @internal */\n get isCompact() {\n var _a;\n return ((_a = this.tree) === null || _a === void 0 ? void 0 : _a.displayDensity) === DisplayDensity.compact;\n }\n /** @hidden @internal */\n get isCosy() {\n var _a;\n return ((_a = this.tree) === null || _a === void 0 ? void 0 : _a.displayDensity) === DisplayDensity.cosy;\n }\n constructor(tree, selectionService, treeService, navService, cdr, animationService, element, parentNode) {\n super(animationService);\n this.tree = tree;\n this.selectionService = selectionService;\n this.treeService = treeService;\n this.navService = navService;\n this.cdr = cdr;\n this.element = element;\n this.parentNode = parentNode;\n /**\n * To be used for load-on-demand scenarios in order to specify whether the node is loading data.\n *\n * @remarks\n * Loading nodes do not render children.\n */\n this.loading = false;\n /**\n * Emitted when the node's `selected` property changes.\n *\n * ```html\n * \n * \n * \n * \n * ```\n *\n * ```typescript\n * const node: IgxTreeNode = this.tree.findNodes(data[0])[0];\n * node.selectedChange.pipe(takeUntil(this.destroy$)).subscribe((e: boolean) => console.log(\"Node selection changed to \", e))\n * ```\n */\n this.selectedChange = new EventEmitter();\n /**\n * Emitted when the node's `expanded` property changes.\n *\n * ```html\n * \n * \n * \n * \n * ```\n *\n * ```typescript\n * const node: IgxTreeNode = this.tree.findNodes(data[0])[0];\n * node.expandedChange.pipe(takeUntil(this.destroy$)).subscribe((e: boolean) => console.log(\"Node expansion state changed to \", e))\n * ```\n */\n this.expandedChange = new EventEmitter();\n /** @hidden @internal */\n this.cssClass = 'igx-tree-node';\n /** @hidden @internal */\n this.registeredChildren = [];\n /** @hidden @internal */\n this._resourceStrings = CurrentResourceStrings.TreeResStrings;\n this._tabIndex = null;\n this._disabled = false;\n }\n /**\n * @hidden @internal\n */\n get showSelectors() {\n return this.tree.selection !== IgxTreeSelectionType.None;\n }\n /**\n * @hidden @internal\n */\n get indeterminate() {\n return this.selectionService.isNodeIndeterminate(this);\n }\n /** The depth of the node, relative to the root\n *\n * ```html\n * \n * ...\n * \n * My level is {{ node.level }}\n * \n * \n * ```\n *\n * ```typescript\n * const node: IgxTreeNode = this.tree.findNodes(data[12])[0];\n * const level: number = node.level;\n * ```\n */\n get level() {\n return this.parentNode ? this.parentNode.level + 1 : 0;\n }\n /** Get/set whether the node is selected. Supporst two-way binding.\n *\n * ```html\n * \n * ...\n * \n * {{ node.label }}\n * \n * \n * ```\n *\n * ```typescript\n * const node: IgxTreeNode = this.tree.findNodes(data[0])[0];\n * const selected = node.selected;\n * node.selected = true;\n * ```\n */\n get selected() {\n return this.selectionService.isNodeSelected(this);\n }\n set selected(val) {\n var _a;\n if (!(((_a = this.tree) === null || _a === void 0 ? void 0 : _a.nodes) && this.tree.nodes.find((e) => e === this)) && val) {\n this.tree.forceSelect.push(this);\n return;\n }\n if (val && !this.selectionService.isNodeSelected(this)) {\n this.selectionService.selectNodesWithNoEvent([this]);\n }\n if (!val && this.selectionService.isNodeSelected(this)) {\n this.selectionService.deselectNodesWithNoEvent([this]);\n }\n }\n /** Get/set whether the node is expanded\n *\n * ```html\n * \n * ...\n * \n * {{ node.label }}\n * \n * \n * ```\n *\n * ```typescript\n * const node: IgxTreeNode = this.tree.findNodes(data[0])[0];\n * const expanded = node.expanded;\n * node.expanded = true;\n * ```\n */\n get expanded() {\n return this.treeService.isExpanded(this);\n }\n set expanded(val) {\n if (val) {\n this.treeService.expand(this, false);\n }\n else {\n this.treeService.collapse(this);\n }\n }\n /** @hidden @internal */\n get expandIndicatorTemplate() {\n var _a;\n return ((_a = this.tree) === null || _a === void 0 ? void 0 : _a.expandIndicator) ? this.tree.expandIndicator : this._defaultExpandIndicatorTemplate;\n }\n /**\n * The native DOM element representing the node. Could be null in certain environments.\n *\n * ```typescript\n * // get the nativeElement of the second node\n * const node: IgxTreeNode = this.tree.nodes.first();\n * const nodeElement: HTMLElement = node.nativeElement;\n * ```\n */\n /** @hidden @internal */\n get nativeElement() {\n return this.element.nativeElement;\n }\n /** @hidden @internal */\n ngOnInit() {\n this.openAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.tree.nodeExpanded.emit({ owner: this.tree, node: this });\n });\n this.closeAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.tree.nodeCollapsed.emit({ owner: this.tree, node: this });\n this.treeService.collapse(this);\n this.cdr.markForCheck();\n });\n }\n /**\n * @hidden @internal\n * Sets the focus to the node's child, if present\n * Sets the node as the tree service's focusedNode\n * Marks the node as the current active element\n */\n handleFocus() {\n var _a;\n if (this.disabled) {\n return;\n }\n if (this.navService.focusedNode !== this) {\n this.navService.focusedNode = this;\n }\n this.isFocused = true;\n if ((_a = this.linkChildren) === null || _a === void 0 ? void 0 : _a.length) {\n this.linkChildren.first.nativeElement.focus();\n return;\n }\n if (this.registeredChildren.length) {\n this.registeredChildren[0].elementRef.nativeElement.focus();\n return;\n }\n }\n /**\n * @hidden @internal\n * Clear the node's focused status\n */\n clearFocus() {\n this.isFocused = false;\n }\n /**\n * @hidden @internal\n */\n onSelectorClick(event) {\n // event.stopPropagation();\n event.preventDefault();\n // this.navService.handleFocusedAndActiveNode(this);\n if (event.shiftKey) {\n this.selectionService.selectMultipleNodes(this, event);\n return;\n }\n if (this.selected) {\n this.selectionService.deselectNode(this, event);\n }\n else {\n this.selectionService.selectNode(this, event);\n }\n }\n /**\n * Toggles the node expansion state, triggering animation\n *\n * ```html\n * \n * My Node\n * \n * \n * ```\n *\n * ```typescript\n * const myNode: IgxTreeNode = this.tree.findNodes(data[0])[0];\n * myNode.toggle();\n * ```\n */\n toggle() {\n if (this.expanded) {\n this.collapse();\n }\n else {\n this.expand();\n }\n }\n /** @hidden @internal */\n indicatorClick() {\n this.toggle();\n this.navService.setFocusedAndActiveNode(this);\n }\n /**\n * @hidden @internal\n */\n onPointerDown(event) {\n event.stopPropagation();\n this.navService.setFocusedAndActiveNode(this);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this.selectionService.ensureStateOnNodeDelete(this);\n }\n /**\n * Expands the node, triggering animation\n *\n * ```html\n * \n * My Node\n * \n * \n * ```\n *\n * ```typescript\n * const myNode: IgxTreeNode = this.tree.findNodes(data[0])[0];\n * myNode.expand();\n * ```\n */\n expand() {\n if (this.expanded && !this.treeService.collapsingNodes.has(this)) {\n return;\n }\n const args = {\n owner: this.tree,\n node: this,\n cancel: false\n };\n this.tree.nodeExpanding.emit(args);\n if (!args.cancel) {\n this.treeService.expand(this, true);\n this.cdr.detectChanges();\n this.playOpenAnimation(this.childrenContainer);\n }\n }\n /**\n * Collapses the node, triggering animation\n *\n * ```html\n * \n * My Node\n * \n * \n * ```\n *\n * ```typescript\n * const myNode: IgxTreeNode = this.tree.findNodes(data[0])[0];\n * myNode.collapse();\n * ```\n */\n collapse() {\n if (!this.expanded || this.treeService.collapsingNodes.has(this)) {\n return;\n }\n const args = {\n owner: this.tree,\n node: this,\n cancel: false\n };\n this.tree.nodeCollapsing.emit(args);\n if (!args.cancel) {\n this.treeService.collapsing(this);\n this.playCloseAnimation(this.childrenContainer);\n }\n }\n /** @hidden @internal */\n addLinkChild(link) {\n this._tabIndex = -1;\n this.registeredChildren.push(link);\n }\n ;\n /** @hidden @internal */\n removeLinkChild(link) {\n const index = this.registeredChildren.indexOf(link);\n if (index !== -1) {\n this.registeredChildren.splice(index, 1);\n }\n }\n}\nIgxTreeNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeNodeComponent, deps: [{ token: IGX_TREE_COMPONENT }, { token: IgxTreeSelectionService }, { token: IgxTreeService }, { token: IgxTreeNavigationService }, { token: i0.ChangeDetectorRef }, { token: IgxAngularAnimationService }, { token: i0.ElementRef }, { token: IGX_TREE_NODE_COMPONENT, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxTreeNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTreeNodeComponent, selector: \"igx-tree-node\", inputs: { data: \"data\", loading: \"loading\", resourceStrings: \"resourceStrings\", active: \"active\", disabled: \"disabled\", selected: \"selected\", expanded: \"expanded\" }, outputs: { selectedChange: \"selectedChange\", expandedChange: \"expandedChange\" }, host: { properties: { \"class.igx-tree-node--disabled\": \"this.disabled\", \"class.igx-tree-node\": \"this.cssClass\", \"attr.role\": \"this.role\" } }, providers: [\n { provide: IGX_TREE_NODE_COMPONENT, useExisting: IgxTreeNodeComponent }\n ], queries: [{ propertyName: \"linkChildren\", predicate: IgxTreeNodeLinkDirective, read: ElementRef }, { propertyName: \"_children\", predicate: IGX_TREE_NODE_COMPONENT, read: IGX_TREE_NODE_COMPONENT }, { propertyName: \"allChildren\", predicate: IGX_TREE_NODE_COMPONENT, descendants: true, read: IGX_TREE_NODE_COMPONENT }], viewQueries: [{ propertyName: \"header\", first: true, predicate: [\"ghostTemplate\"], descendants: true, read: ElementRef }, { propertyName: \"_defaultExpandIndicatorTemplate\", first: true, predicate: [\"defaultIndicator\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"childrenContainer\", first: true, predicate: [\"childrenContainer\"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: \"\\n \\n\\n\\n\\n\\n\\n\\n
    \\n \\n
    \\n\\n\\n\\n \\n {{ expanded ? \\\"keyboard_arrow_down\\\" : \\\"keyboard_arrow_right\\\" }}\\n \\n\\n\\n\\n\\n \\n \\n\\n\\n\\n
    \\n
    \\n \\n
    \\n\\n \\n \\n \\n \\n \\n \\n \\t\\n \\t\\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\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"component\", type: IgxCheckboxComponent, selector: \"igx-checkbox\", inputs: [\"id\", \"labelId\", \"value\", \"name\", \"tabindex\", \"labelPosition\", \"disableRipple\", \"required\", \"aria-labelledby\", \"aria-label\", \"indeterminate\", \"checked\", \"disabled\", \"invalid\", \"readonly\", \"disableTransitions\"], outputs: [\"change\"] }, { kind: \"component\", type: IgxCircularProgressBarComponent, selector: \"igx-circular-bar\", inputs: [\"id\", \"isIndeterminate\", \"textVisibility\", \"text\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeNodeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-tree-node', providers: [\n { provide: IGX_TREE_NODE_COMPONENT, useExisting: IgxTreeNodeComponent }\n ], template: \"\\n \\n\\n\\n\\n\\n\\n\\n
    \\n \\n
    \\n\\n\\n\\n \\n {{ expanded ? \\\"keyboard_arrow_down\\\" : \\\"keyboard_arrow_right\\\" }}\\n \\n\\n\\n\\n\\n \\n \\n\\n\\n\\n
    \\n
    \\n \\n
    \\n\\n \\n \\n \\n \\n \\n \\n \\t\\n \\t\\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 }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_TREE_COMPONENT]\n }] }, { type: IgxTreeSelectionService }, { type: IgxTreeService }, { type: IgxTreeNavigationService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [IgxAngularAnimationService]\n }] }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }, {\n type: Inject,\n args: [IGX_TREE_NODE_COMPONENT]\n }] }];\n }, propDecorators: { data: [{\n type: Input\n }], loading: [{\n type: Input\n }], resourceStrings: [{\n type: Input\n }], active: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], expandedChange: [{\n type: Output\n }], disabled: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.igx-tree-node--disabled']\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-tree-node']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], linkChildren: [{\n type: ContentChildren,\n args: [IgxTreeNodeLinkDirective, { read: ElementRef }]\n }], _children: [{\n type: ContentChildren,\n args: [IGX_TREE_NODE_COMPONENT, { read: IGX_TREE_NODE_COMPONENT }]\n }], allChildren: [{\n type: ContentChildren,\n args: [IGX_TREE_NODE_COMPONENT, { read: IGX_TREE_NODE_COMPONENT, descendants: true }]\n }], header: [{\n type: ViewChild,\n args: ['ghostTemplate', { read: ElementRef }]\n }], _defaultExpandIndicatorTemplate: [{\n type: ViewChild,\n args: ['defaultIndicator', { read: TemplateRef, static: true }]\n }], childrenContainer: [{\n type: ViewChild,\n args: ['childrenContainer', { read: ElementRef }]\n }], selected: [{\n type: Input\n }], expanded: [{\n type: Input\n }] } });\n\n/**\n * @hidden @internal\n * Used for templating the select marker of the tree\n */\nclass IgxTreeSelectMarkerDirective {\n}\nIgxTreeSelectMarkerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeSelectMarkerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxTreeSelectMarkerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTreeSelectMarkerDirective, selector: \"[igxTreeSelectMarker]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeSelectMarkerDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxTreeSelectMarker]'\n }]\n }] });\n/**\n * @hidden @internal\n * Used for templating the expand indicator of the tree\n */\nclass IgxTreeExpandIndicatorDirective {\n}\nIgxTreeExpandIndicatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeExpandIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxTreeExpandIndicatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTreeExpandIndicatorDirective, selector: \"[igxTreeExpandIndicator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeExpandIndicatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxTreeExpandIndicator]'\n }]\n }] });\n/**\n * IgxTreeComponent allows a developer to show a set of nodes in a hierarchical fashion.\n *\n * @igxModule IgxTreeModule\n * @igxKeywords tree\n * @igxTheme igx-tree-theme\n * @igxGroup Grids & Lists\n *\n * @remark\n * The Angular Tree Component allows users to represent hierarchical data in a tree-view structure,\n * maintaining parent-child relationships, as well as to define static tree-view structure without a corresponding data model.\n * Its primary purpose is to allow end-users to visualize and navigate within hierarchical data structures.\n * The Ignite UI for Angular Tree Component also provides load on demand capabilities, item activation,\n * bi-state and cascading selection of items through built-in checkboxes, built-in keyboard navigation and more.\n *\n * @example\n * ```html\n * \n * \n * I am a parent node 1\n * \n * I am a child node 1\n * \n * ...\n * \n *\t ...\n * \n * ```\n */\nclass IgxTreeComponent extends DisplayDensityBase {\n /**\n * Gets/Sets tree selection mode\n *\n * @remarks\n * By default the tree selection mode is 'None'\n * @param selectionMode: IgxTreeSelectionType\n */\n get selection() {\n return this._selection;\n }\n set selection(selectionMode) {\n this._selection = selectionMode;\n this.selectionService.clearNodesSelection();\n }\n /**\n * Returns all **root level** nodes\n *\n * ```typescript\n * const tree: IgxTree = this.tree;\n * const rootNodes: IgxTreeNodeComponent[] = tree.rootNodes;\n * ```\n */\n get rootNodes() {\n var _a;\n return (_a = this.nodes) === null || _a === void 0 ? void 0 : _a.filter(node => node.level === 0);\n }\n constructor(navService, selectionService, treeService, element, _displayDensityOptions) {\n super(_displayDensityOptions);\n this.navService = navService;\n this.selectionService = selectionService;\n this.treeService = treeService;\n this.element = element;\n this._displayDensityOptions = _displayDensityOptions;\n this.cssClass = 'igx-tree';\n /** Get/Set how the tree should handle branch expansion.\n * If set to `true`, only a single branch can be expanded at a time, collapsing all others\n *\n * ```html\n * \n * ...\n * \n * ```\n *\n * ```typescript\n * const tree: IgxTree = this.tree;\n * this.tree.singleBranchExpand = false;\n * ```\n */\n this.singleBranchExpand = false;\n /** Get/Set the animation settings that branches should use when expanding/collpasing.\n *\n * ```html\n * \n * \n * ```\n *\n * ```typescript\n * const animationSettings: ToggleAnimationSettings = {\n * openAnimation: growVerIn,\n * closeAnimation: growVerOut\n * };\n *\n * this.tree.animationSettings = animationSettings;\n * ```\n */\n this.animationSettings = {\n openAnimation: growVerIn,\n closeAnimation: growVerOut\n };\n /** Emitted when the node selection is changed through interaction\n *\n * ```html\n * \n * \n * ```\n *\n *```typescript\n * public handleNodeSelection(event: ITreeNodeSelectionEvent) {\n * const newSelection: IgxTreeNode[] = event.newSelection;\n * const added: IgxTreeNode[] = event.added;\n * console.log(\"New selection will be: \", newSelection);\n * console.log(\"Added nodes: \", event.added);\n * }\n *```\n */\n this.nodeSelection = new EventEmitter();\n /** Emitted when a node is expanding, before it finishes\n *\n * ```html\n * \n * \n * ```\n *\n *```typescript\n * public handleNodeExpanding(event: ITreeNodeTogglingEventArgs) {\n * const expandedNode: IgxTreeNode = event.node;\n * if (expandedNode.disabled) {\n * event.cancel = true;\n * }\n * }\n *```\n */\n this.nodeExpanding = new EventEmitter();\n /** Emitted when a node is expanded, after it finishes\n *\n * ```html\n * \n * \n * ```\n *\n *```typescript\n * public handleNodeExpanded(event: ITreeNodeToggledEventArgs) {\n * const expandedNode: IgxTreeNode = event.node;\n * console.log(\"Node is expanded: \", expandedNode.data);\n * }\n *```\n */\n this.nodeExpanded = new EventEmitter();\n /** Emitted when a node is collapsing, before it finishes\n *\n * ```html\n * \n * \n * ```\n *\n *```typescript\n * public handleNodeCollapsing(event: ITreeNodeTogglingEventArgs) {\n * const collapsedNode: IgxTreeNode = event.node;\n * if (collapsedNode.alwaysOpen) {\n * event.cancel = true;\n * }\n * }\n *```\n */\n this.nodeCollapsing = new EventEmitter();\n /** Emitted when a node is collapsed, after it finishes\n *\n * @example\n * ```html\n * \n * \n * ```\n * ```typescript\n * public handleNodeCollapsed(event: ITreeNodeToggledEventArgs) {\n * const collapsedNode: IgxTreeNode = event.node;\n * console.log(\"Node is collapsed: \", collapsedNode.data);\n * }\n * ```\n */\n this.nodeCollapsed = new EventEmitter();\n /**\n * Emitted when the active node is changed.\n *\n * @example\n * ```\n * \n * ```\n */\n this.activeNodeChanged = new EventEmitter();\n /** @hidden @internal */\n this.disabledChange = new EventEmitter();\n /**\n * Emitted when the active node is set through API\n *\n * @hidden @internal\n */\n this.activeNodeBindingChange = new EventEmitter();\n /** @hidden @internal */\n this.forceSelect = [];\n this._selection = IgxTreeSelectionType.None;\n this.destroy$ = new Subject();\n this.unsubChildren$ = new Subject();\n this._comparer = (data, node) => node.data === data;\n this.selectionService.register(this);\n this.treeService.register(this);\n this.navService.register(this);\n }\n /** @hidden @internal */\n get nativeElement() {\n return this.element.nativeElement;\n }\n /**\n * Expands all of the passed nodes.\n * If no nodes are passed, expands ALL nodes\n *\n * @param nodes nodes to be expanded\n *\n * ```typescript\n * const targetNodes: IgxTreeNode = this.tree.findNodes(true, (_data: any, node: IgxTreeNode) => node.data.expandable);\n * tree.expandAll(nodes);\n * ```\n */\n expandAll(nodes) {\n nodes = nodes || this.nodes.toArray();\n nodes.forEach(e => e.expanded = true);\n }\n /**\n * Collapses all of the passed nodes.\n * If no nodes are passed, collapses ALL nodes\n *\n * @param nodes nodes to be collapsed\n *\n * ```typescript\n * const targetNodes: IgxTreeNode = this.tree.findNodes(true, (_data: any, node: IgxTreeNode) => node.data.collapsible);\n * tree.collapseAll(nodes);\n * ```\n */\n collapseAll(nodes) {\n nodes = nodes || this.nodes.toArray();\n nodes.forEach(e => e.expanded = false);\n }\n /**\n * Deselect all nodes if the nodes collection is empty. Otherwise, deselect the nodes in the nodes collection.\n *\n * @example\n * ```typescript\n * const arr = [\n * this.tree.nodes.toArray()[0],\n * this.tree.nodes.toArray()[1]\n * ];\n * this.tree.deselectAll(arr);\n * ```\n * @param nodes: IgxTreeNodeComponent[]\n */\n deselectAll(nodes) {\n this.selectionService.deselectNodesWithNoEvent(nodes);\n }\n /**\n * Returns all of the nodes that match the passed searchTerm.\n * Accepts a custom comparer function for evaluating the search term against the nodes.\n *\n * @remark\n * Default search compares the passed `searchTerm` against the node's `data` Input.\n * When using `findNodes` w/o a `comparer`, make sure all nodes have `data` passed.\n *\n * @param searchTerm The data of the searched node\n * @param comparer A custom comparer function that evaluates the passed `searchTerm` against all nodes.\n * @returns Array of nodes that match the search. `null` if no nodes are found.\n *\n * ```html\n * \n * \n * {{ node.label }}\n * \n * \n * ```\n *\n * ```typescript\n * public data: DataEntry[] = FETCHED_DATA;\n * ...\n * const matchedNodes: IgxTreeNode[] = this.tree.findNodes(searchTerm: data[5]);\n * ```\n *\n * Using a custom comparer\n * ```typescript\n * public data: DataEntry[] = FETCHED_DATA;\n * ...\n * const comparer: IgxTreeSearchResolver = (data: any, node: IgxTreeNode) {\n * return node.data.index % 2 === 0;\n * }\n * const evenIndexNodes: IgxTreeNode[] = this.tree.findNodes(null, comparer);\n * ```\n */\n findNodes(searchTerm, comparer) {\n const compareFunc = comparer || this._comparer;\n const results = this.nodes.filter(node => compareFunc(searchTerm, node));\n return (results === null || results === void 0 ? void 0 : results.length) === 0 ? null : results;\n }\n /** @hidden @internal */\n handleKeydown(event) {\n this.navService.handleKeydown(event);\n }\n /** @hidden @internal */\n ngOnInit() {\n super.ngOnInit();\n this.disabledChange.pipe(takeUntil(this.destroy$)).subscribe((e) => {\n this.navService.update_disabled_cache(e);\n });\n this.activeNodeBindingChange.pipe(takeUntil(this.destroy$)).subscribe((node) => {\n var _a;\n this.expandToNode(this.navService.activeNode);\n this.scrollNodeIntoView((_a = node === null || node === void 0 ? void 0 : node.header) === null || _a === void 0 ? void 0 : _a.nativeElement);\n });\n this.densityChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n requestAnimationFrame(() => {\n var _a;\n this.scrollNodeIntoView((_a = this.navService.activeNode) === null || _a === void 0 ? void 0 : _a.header.nativeElement);\n });\n });\n this.subToCollapsing();\n }\n /** @hidden @internal */\n ngAfterViewInit() {\n var _a, _b;\n this.nodes.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.subToChanges();\n });\n this.scrollNodeIntoView((_b = (_a = this.navService.activeNode) === null || _a === void 0 ? void 0 : _a.header) === null || _b === void 0 ? void 0 : _b.nativeElement);\n this.subToChanges();\n }\n /** @hidden @internal */\n ngOnDestroy() {\n this.unsubChildren$.next();\n this.unsubChildren$.complete();\n this.destroy$.next();\n this.destroy$.complete();\n }\n expandToNode(node) {\n if (node && node.parentNode) {\n node.path.forEach(n => {\n if (n !== node && !n.expanded) {\n n.expanded = true;\n }\n });\n }\n }\n subToCollapsing() {\n this.nodeCollapsing.pipe(takeUntil(this.destroy$)).subscribe(event => {\n if (event.cancel) {\n return;\n }\n this.navService.update_visible_cache(event.node, false);\n });\n this.nodeExpanding.pipe(takeUntil(this.destroy$)).subscribe(event => {\n if (event.cancel) {\n return;\n }\n this.navService.update_visible_cache(event.node, true);\n });\n }\n subToChanges() {\n this.unsubChildren$.next();\n const toBeSelected = [...this.forceSelect];\n requestAnimationFrame(() => {\n this.selectionService.selectNodesWithNoEvent(toBeSelected);\n });\n this.forceSelect = [];\n this.nodes.forEach(node => {\n node.expandedChange.pipe(takeUntil(this.unsubChildren$)).subscribe(nodeState => {\n this.navService.update_visible_cache(node, nodeState);\n });\n node.closeAnimationDone.pipe(takeUntil(this.unsubChildren$)).subscribe(() => {\n var _a;\n const targetElement = (_a = this.navService.focusedNode) === null || _a === void 0 ? void 0 : _a.header.nativeElement;\n this.scrollNodeIntoView(targetElement);\n });\n node.openAnimationDone.pipe(takeUntil(this.unsubChildren$)).subscribe(() => {\n var _a;\n const targetElement = (_a = this.navService.focusedNode) === null || _a === void 0 ? void 0 : _a.header.nativeElement;\n this.scrollNodeIntoView(targetElement);\n });\n });\n this.navService.init_invisible_cache();\n }\n scrollNodeIntoView(el) {\n if (!el) {\n return;\n }\n const nodeRect = el.getBoundingClientRect();\n const treeRect = this.nativeElement.getBoundingClientRect();\n const topOffset = treeRect.top > nodeRect.top ? nodeRect.top - treeRect.top : 0;\n const bottomOffset = treeRect.bottom < nodeRect.bottom ? nodeRect.bottom - treeRect.bottom : 0;\n const shouldScroll = !!topOffset || !!bottomOffset;\n if (shouldScroll && this.nativeElement.scrollHeight > this.nativeElement.clientHeight) {\n // this.nativeElement.scrollTop = nodeRect.y - treeRect.y - nodeRect.height;\n this.nativeElement.scrollTop =\n this.nativeElement.scrollTop + bottomOffset + topOffset + (topOffset ? -1 : +1) * nodeRect.height;\n }\n }\n}\nIgxTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeComponent, deps: [{ token: IgxTreeNavigationService }, { token: IgxTreeSelectionService }, { token: IgxTreeService }, { token: i0.ElementRef }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTreeComponent, selector: \"igx-tree\", inputs: { selection: \"selection\", singleBranchExpand: \"singleBranchExpand\", animationSettings: \"animationSettings\" }, outputs: { nodeSelection: \"nodeSelection\", nodeExpanding: \"nodeExpanding\", nodeExpanded: \"nodeExpanded\", nodeCollapsing: \"nodeCollapsing\", nodeCollapsed: \"nodeCollapsed\", activeNodeChanged: \"activeNodeChanged\" }, host: { properties: { \"class.igx-tree\": \"this.cssClass\" } }, providers: [\n IgxTreeService,\n IgxTreeSelectionService,\n IgxTreeNavigationService,\n { provide: IGX_TREE_COMPONENT, useExisting: IgxTreeComponent },\n ], queries: [{ propertyName: \"expandIndicator\", first: true, predicate: IgxTreeExpandIndicatorDirective, descendants: true, read: TemplateRef }, { propertyName: \"nodes\", predicate: IgxTreeNodeComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: \"
    \\n \\n
    \\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-tree', providers: [\n IgxTreeService,\n IgxTreeSelectionService,\n IgxTreeNavigationService,\n { provide: IGX_TREE_COMPONENT, useExisting: IgxTreeComponent },\n ], template: \"
    \\n \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: IgxTreeNavigationService }, { type: IgxTreeSelectionService }, { type: IgxTreeService }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }];\n }, propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-tree']\n }], selection: [{\n type: Input\n }], singleBranchExpand: [{\n type: Input\n }], animationSettings: [{\n type: Input\n }], nodeSelection: [{\n type: Output\n }], nodeExpanding: [{\n type: Output\n }], nodeExpanded: [{\n type: Output\n }], nodeCollapsing: [{\n type: Output\n }], nodeCollapsed: [{\n type: Output\n }], activeNodeChanged: [{\n type: Output\n }], expandIndicator: [{\n type: ContentChild,\n args: [IgxTreeExpandIndicatorDirective, { read: TemplateRef }]\n }], nodes: [{\n type: ContentChildren,\n args: [IgxTreeNodeComponent, { descendants: true }]\n }] } });\n/**\n * @hidden\n *\n * NgModule defining the components and directives needed for `igx-tree`\n */\nclass IgxTreeModule {\n}\nIgxTreeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxTreeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeModule, declarations: [IgxTreeSelectMarkerDirective, IgxTreeExpandIndicatorDirective, IgxTreeNodeLinkDirective, IgxTreeComponent, IgxTreeNodeComponent], imports: [CommonModule,\n FormsModule,\n IgxIconModule,\n IgxInputGroupModule,\n IgxCheckboxModule,\n IgxProgressBarModule], exports: [IgxTreeSelectMarkerDirective, IgxTreeExpandIndicatorDirective, IgxTreeNodeLinkDirective, IgxTreeComponent, IgxTreeNodeComponent,\n IgxIconModule,\n IgxInputGroupModule,\n IgxCheckboxModule,\n IgxExpansionPanelModule] });\nIgxTreeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeModule, imports: [CommonModule,\n FormsModule,\n IgxIconModule,\n IgxInputGroupModule,\n IgxCheckboxModule,\n IgxProgressBarModule, IgxIconModule,\n IgxInputGroupModule,\n IgxCheckboxModule,\n IgxExpansionPanelModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxTreeSelectMarkerDirective,\n IgxTreeExpandIndicatorDirective,\n IgxTreeNodeLinkDirective,\n IgxTreeComponent,\n IgxTreeNodeComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n IgxIconModule,\n IgxInputGroupModule,\n IgxCheckboxModule,\n IgxProgressBarModule\n ],\n exports: [\n IgxTreeSelectMarkerDirective,\n IgxTreeExpandIndicatorDirective,\n IgxTreeNodeLinkDirective,\n IgxTreeComponent,\n IgxTreeNodeComponent,\n IgxIconModule,\n IgxInputGroupModule,\n IgxCheckboxModule,\n IgxExpansionPanelModule\n ]\n }]\n }] });\n\nclass IgxExcelStyleLoadingValuesTemplateDirective {\n static ngTemplateContextGuard(_dir, ctx) {\n return true;\n }\n ;\n constructor(template) {\n this.template = template;\n }\n}\nIgxExcelStyleLoadingValuesTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleLoadingValuesTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxExcelStyleLoadingValuesTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleLoadingValuesTemplateDirective, selector: \"[igxExcelStyleLoading]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleLoadingValuesTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxExcelStyleLoading]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * A component used for presenting Excel style search UI.\n */\nclass IgxExcelStyleSearchComponent {\n /**\n * @hidden @internal\n */\n get selectAllItem() {\n if (!this._selectAllItem) {\n const selectAllItem = {\n isSelected: false,\n isFiltered: false,\n indeterminate: false,\n isSpecial: true,\n isBlanks: false,\n value: this.esf.grid.resourceStrings.igx_grid_excel_select_all,\n label: this.esf.grid.resourceStrings.igx_grid_excel_select_all\n };\n this._selectAllItem = selectAllItem;\n }\n return this._selectAllItem;\n }\n /**\n * @hidden @internal\n */\n get addToCurrentFilterItem() {\n if (!this._addToCurrentFilterItem) {\n const addToCurrentFilterItem = {\n isSelected: false,\n isFiltered: false,\n indeterminate: false,\n isSpecial: true,\n isBlanks: false,\n value: this.esf.grid.resourceStrings.igx_grid_excel_add_to_filter,\n label: this.esf.grid.resourceStrings.igx_grid_excel_add_to_filter\n };\n this._addToCurrentFilterItem = addToCurrentFilterItem;\n }\n return this._addToCurrentFilterItem;\n }\n /**\n * @hidden @internal\n */\n get isLoading() {\n return this._isLoading;\n }\n /**\n * @hidden @internal\n */\n set isLoading(value) {\n this._isLoading = value;\n if (!this.cdr.destroyed) {\n this.cdr.detectChanges();\n }\n }\n /**\n * @hidden @internal\n */\n get valuesLoadingTemplate() {\n var _a;\n if ((_a = this.esf.grid) === null || _a === void 0 ? void 0 : _a.excelStyleLoadingValuesTemplateDirective) {\n return this.esf.grid.excelStyleLoadingValuesTemplateDirective.template;\n }\n else {\n return this.defaultExcelStyleLoadingValuesTemplate;\n }\n }\n constructor(cdr, esf, platform) {\n this.cdr = cdr;\n this.esf = esf;\n this.platform = platform;\n /**\n * @hidden @internal\n */\n this.defaultClass = true;\n /**\n * @hidden @internal\n */\n this.displayedListData = [];\n this.destroy$ = new Subject();\n /**\n * @hidden @internal\n */\n this.refreshSize = () => {\n if (this.virtDir) {\n this.virtDir.igxForContainerSize = this.containerSize;\n this.virtDir.igxForItemSize = this.itemSize;\n this.virtDir.recalcUpdateSizes();\n this.cdr.detectChanges();\n }\n };\n esf.loadingStart.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.displayedListData = [];\n this.isLoading = true;\n });\n esf.loadingEnd.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.refreshSize();\n this.isLoading = false;\n });\n esf.initialized.pipe(takeUntil(this.destroy$)).subscribe(() => {\n requestAnimationFrame(() => {\n this.refreshSize();\n this.searchInput.nativeElement.focus();\n });\n });\n esf.columnChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\n var _a;\n (_a = this.virtDir) === null || _a === void 0 ? void 0 : _a.resetScrollPosition();\n });\n esf.listDataLoaded.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this._selectAllItem = this.esf.listData[0];\n if (this.isHierarchical() && this.esf.listData[0].isSpecial) {\n this.esf.listData.splice(0, 1);\n }\n if (this.searchValue) {\n this.clearInput();\n }\n else {\n this.filterListData();\n }\n this.cdr.detectChanges();\n requestAnimationFrame(() => {\n this.refreshSize();\n this.searchInput.nativeElement.focus();\n });\n });\n }\n ngAfterViewInit() {\n requestAnimationFrame(this.refreshSize);\n }\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n /**\n * @hidden @internal\n */\n clearInput() {\n this.searchValue = null;\n this.filterListData();\n }\n /**\n * @hidden @internal\n */\n onCheckboxChange(eventArgs) {\n const selectedIndex = this.displayedListData.indexOf(eventArgs.checkbox.value);\n const selectAllBtn = this.displayedListData[0];\n if (selectedIndex === 0) {\n this.displayedListData.forEach(element => {\n if (element === this.addToCurrentFilterItem) {\n return;\n }\n element.isSelected = eventArgs.checked;\n });\n selectAllBtn.indeterminate = false;\n }\n else {\n eventArgs.checkbox.value.isSelected = eventArgs.checked;\n const indexToStartSlicing = this.displayedListData.indexOf(this.addToCurrentFilterItem) > -1 ? 2 : 1;\n const slicedArray = this.displayedListData.slice(indexToStartSlicing, this.displayedListData.length);\n if (!slicedArray.find(el => el.isSelected === false)) {\n selectAllBtn.indeterminate = false;\n selectAllBtn.isSelected = true;\n }\n else if (!slicedArray.find(el => el.isSelected === true)) {\n selectAllBtn.indeterminate = false;\n selectAllBtn.isSelected = false;\n }\n else {\n selectAllBtn.indeterminate = true;\n }\n }\n eventArgs.checkbox.nativeCheckbox.nativeElement.blur();\n }\n /**\n * @hidden @internal\n */\n onSelectAllCheckboxChange(eventArgs) {\n this._selectAllItem.isSelected = eventArgs.checked;\n this._selectAllItem.indeterminate = false;\n const treeNodes = this.tree.nodes;\n treeNodes.forEach(node => node.data.isSelected = eventArgs.checked);\n }\n /**\n * @hidden @internal\n */\n onNodeSelectionChange(eventArgs) {\n eventArgs.added.forEach(node => {\n node.data.isSelected = true;\n });\n eventArgs.removed.forEach(node => {\n node.data.isSelected = false;\n });\n this._hierarchicalSelectedItems = eventArgs.newSelection.map(item => item.data);\n const selectAllBtn = this.selectAllItem;\n if (this._hierarchicalSelectedItems.length === 0) {\n selectAllBtn.indeterminate = false;\n selectAllBtn.isSelected = false;\n }\n else if (this._hierarchicalSelectedItems.length === this.tree.nodes.length) {\n selectAllBtn.indeterminate = false;\n selectAllBtn.isSelected = true;\n }\n else {\n selectAllBtn.indeterminate = true;\n selectAllBtn.isSelected = false;\n }\n }\n /**\n * @hidden @internal\n */\n get itemSize() {\n let itemSize = '40px';\n switch (this.esf.displayDensity) {\n case DisplayDensity.cosy:\n itemSize = '32px';\n break;\n case DisplayDensity.compact:\n itemSize = '24px';\n break;\n default: break;\n }\n return itemSize;\n }\n /**\n * @hidden @internal\n */\n get containerSize() {\n var _a;\n if (this.esf.listData.length) {\n return (_a = this.list) === null || _a === void 0 ? void 0 : _a.element.nativeElement.offsetHeight;\n }\n // GE Nov 1st, 2021 #10355 Return a numeric value, so the chunk size is calculated properly.\n // If we skip this branch, on applying the filter the _calculateChunkSize() method off the ForOfDirective receives\n // an igxForContainerSize = undefined, thus assigns the chunkSize to the igxForOf.length which leads to performance issues.\n return 0;\n }\n /**\n * @hidden @internal\n */\n get applyButtonDisabled() {\n return (this._selectAllItem && !this._selectAllItem.isSelected && !this._selectAllItem.indeterminate) ||\n (this.displayedListData && this.displayedListData.length === 0);\n }\n /**\n * @hidden @internal\n */\n onInputKeyDown(event) {\n switch (event.key) {\n case this.platform.KEYMAP.ENTER:\n event.preventDefault();\n this.applyFilter();\n return;\n case this.platform.KEYMAP.ESCAPE:\n if (this.searchValue) {\n event.stopPropagation();\n this.clearInput();\n }\n return;\n }\n }\n /**\n * @hidden @internal\n */\n filterListData() {\n var _a, _b, _c;\n if (((_a = this.esf.column) === null || _a === void 0 ? void 0 : _a.dataType) === GridColumnDataType.Number ||\n ((_b = this.esf.column) === null || _b === void 0 ? void 0 : _b.dataType) === GridColumnDataType.Currency ||\n ((_c = this.esf.column) === null || _c === void 0 ? void 0 : _c.dataType) === GridColumnDataType.Percent) {\n this.rejectNonNumericalEntries();\n }\n if (!this.esf.listData || !this.esf.listData.length) {\n this.displayedListData = [];\n return;\n }\n let selectAllBtn;\n if (this._selectAllItem) {\n selectAllBtn = this._selectAllItem;\n }\n else {\n selectAllBtn = this.esf.listData[0];\n }\n if (!this.searchValue) {\n let anyFiltered = this.esf.listData.some(i => i.isFiltered);\n let anyUnfiltered = this.esf.listData.some(i => !i.isFiltered);\n selectAllBtn.indeterminate = anyFiltered && anyUnfiltered;\n if (this.isHierarchical() && this.tree) {\n this._hierarchicalSelectedItems = this.tree.nodes.map(n => n.data).filter(item => item.isFiltered);\n }\n this.esf.listData.forEach(i => i.isSelected = i.isFiltered);\n if (this.displayedListData !== this.esf.listData) {\n this.displayedListData = this.esf.listData;\n if (this.isHierarchical()) {\n this.cdr.detectChanges();\n this.tree.nodes.forEach(n => {\n const item = n.data;\n n.selected = item.isSelected || item.isFiltered;\n anyFiltered = anyFiltered || n.selected;\n anyUnfiltered = anyUnfiltered || !n.selected;\n });\n selectAllBtn.indeterminate = anyFiltered && anyUnfiltered;\n }\n }\n selectAllBtn.label = this.esf.grid.resourceStrings.igx_grid_excel_select_all;\n this.cdr.detectChanges();\n return;\n }\n const searchVal = this.searchValue.toLowerCase();\n if (this.isHierarchical()) {\n this._hierarchicalSelectedItems = [];\n this.esf.listData.forEach(i => i.isSelected = false);\n const matchedData = cloneHierarchicalArray(this.esf.listData, 'children');\n this.displayedListData = this.hierarchicalSelectMatches(matchedData, searchVal);\n this.cdr.detectChanges();\n this.tree.nodes.forEach(n => {\n n.selected = true;\n if (n.data.label.toString().toLowerCase().indexOf(searchVal) > -1) {\n this.expandAllParentNodes(n);\n }\n });\n }\n else {\n this.displayedListData = this.esf.listData.filter((it, i) => (i === 0 && it.isSpecial) ||\n (it.label !== null && it.label !== undefined) &&\n !it.isBlanks &&\n it.label.toString().toLowerCase().indexOf(searchVal) > -1);\n this.esf.listData.forEach(i => i.isSelected = false);\n this.displayedListData.forEach(i => i.isSelected = true);\n this.displayedListData.splice(1, 0, this.addToCurrentFilterItem);\n if (this.displayedListData.length === 2) {\n this.displayedListData = [];\n }\n }\n selectAllBtn.indeterminate = false;\n selectAllBtn.isSelected = true;\n selectAllBtn.label = this.esf.grid.resourceStrings.igx_grid_excel_select_all_search_results;\n this.cdr.detectChanges();\n }\n /**\n * @hidden @internal\n */\n applyFilter() {\n const filterTree = new FilteringExpressionsTree(FilteringLogic.Or, this.esf.column.field);\n let selectedItems = [];\n if (this.isHierarchical()) {\n if (this.addToCurrentFilterCheckbox && this.addToCurrentFilterCheckbox.checked) {\n this.addFilteredToSelectedItems(this.esf.listData);\n }\n selectedItems = this._hierarchicalSelectedItems;\n }\n else {\n const item = this.displayedListData[1];\n const addToCurrentFilterOptionVisible = item === this.addToCurrentFilterItem;\n selectedItems = addToCurrentFilterOptionVisible && item.isSelected ?\n this.esf.listData.slice(1, this.esf.listData.length).filter(el => el.isSelected || el.isFiltered) :\n this.esf.listData.slice(1, this.esf.listData.length).filter(el => el.isSelected);\n }\n let unselectedItem;\n if (this.isHierarchical()) {\n unselectedItem = this.esf.listData.find(el => el.isSelected === false);\n }\n else {\n unselectedItem = this.esf.listData.slice(1, this.esf.listData.length).find(el => el.isSelected === false);\n }\n if (unselectedItem) {\n if (selectedItems.length <= IgxExcelStyleSearchComponent.filterOptimizationThreshold) {\n selectedItems.forEach(element => {\n let condition = null;\n if (element.value !== null && element.value !== undefined) {\n if (this.esf.column.dataType === GridColumnDataType.Boolean) {\n condition = this.createCondition(element.value.toString());\n }\n else {\n const filterCondition = this.esf.column.dataType === GridColumnDataType.Time ? 'at' : 'equals';\n condition = this.createCondition(filterCondition);\n }\n }\n else {\n condition = this.createCondition('empty');\n }\n filterTree.filteringOperands.push({\n condition,\n fieldName: this.esf.column.field,\n ignoreCase: this.esf.column.filteringIgnoreCase,\n searchVal: element.value\n });\n });\n }\n else {\n const blanksItemIndex = selectedItems.findIndex(e => e.value === null || e.value === undefined);\n let blanksItem;\n if (blanksItemIndex >= 0) {\n blanksItem = selectedItems[blanksItemIndex];\n selectedItems.splice(blanksItemIndex, 1);\n }\n filterTree.filteringOperands.push({\n condition: this.createCondition('in'),\n fieldName: this.esf.column.field,\n ignoreCase: this.esf.column.filteringIgnoreCase,\n searchVal: new Set(this.esf.column.dataType === GridColumnDataType.Date ||\n this.esf.column.dataType === GridColumnDataType.DateTime ?\n selectedItems.map(d => d.value.toISOString()) : this.esf.column.dataType === GridColumnDataType.Time ?\n selectedItems.map(e => e.value.toLocaleTimeString()) :\n selectedItems.map(e => e.value))\n });\n if (blanksItem) {\n filterTree.filteringOperands.push({\n condition: this.createCondition('empty'),\n fieldName: this.esf.column.field,\n ignoreCase: this.esf.column.filteringIgnoreCase,\n searchVal: blanksItem.value\n });\n }\n }\n const grid = this.esf.grid;\n const col = this.esf.column;\n grid.filteringService.filterInternal(col.field, filterTree);\n this.esf.expressionsList = new Array();\n grid.filteringService.generateExpressionsList(col.filteringExpressionsTree, grid.filteringLogic, this.esf.expressionsList);\n }\n else {\n this.esf.grid.filteringService.clearFilter(this.esf.column.field);\n }\n this.esf.closeDropdown();\n }\n /**\n * @hidden @internal\n */\n isHierarchical() {\n return this.esf.isHierarchical;\n }\n /**\n * @hidden @internal\n */\n isTreeEmpty() {\n return this.esf.isHierarchical && this.displayedListData.length === 0;\n }\n hierarchicalSelectMatches(data, searchVal) {\n data.forEach(element => {\n element.indeterminate = false;\n element.isSelected = false;\n const node = this.tree.nodes.filter(n => n.data.label === element.label)[0];\n if (node) {\n node.expanded = false;\n }\n if (element.label.toString().toLowerCase().indexOf(searchVal) > -1) {\n element.isSelected = true;\n this.hierarchicalSelectAllChildren(element);\n this._hierarchicalSelectedItems.push(element);\n }\n else if (element.children.length > 0) {\n element.children = this.hierarchicalSelectMatches(element.children, searchVal);\n if (element.children.length > 0) {\n element.isSelected = true;\n if (node) {\n node.expanded = true;\n }\n }\n }\n });\n return data.filter(element => element.isSelected === true);\n }\n hierarchicalSelectAllChildren(element) {\n element.children.forEach(child => {\n child.indeterminate = false;\n child.isSelected = true;\n this._hierarchicalSelectedItems.push(child);\n if (child.children) {\n this.hierarchicalSelectAllChildren(child);\n }\n });\n }\n expandAllParentNodes(node) {\n if (node.parentNode) {\n node.parentNode.expanded = true;\n this.expandAllParentNodes(node.parentNode);\n }\n }\n addFilteredToSelectedItems(records) {\n records.forEach(record => {\n if (record.children) {\n this.addFilteredToSelectedItems(record.children);\n }\n if (record.isFiltered && this._hierarchicalSelectedItems.indexOf(record) < 0) {\n this._hierarchicalSelectedItems.push(record);\n }\n });\n }\n createCondition(conditionName) {\n switch (this.esf.column.dataType) {\n case GridColumnDataType.Boolean:\n return IgxBooleanFilteringOperand.instance().condition(conditionName);\n case GridColumnDataType.Number:\n case GridColumnDataType.Currency:\n case GridColumnDataType.Percent:\n return IgxNumberFilteringOperand.instance().condition(conditionName);\n case GridColumnDataType.Date:\n return IgxDateFilteringOperand.instance().condition(conditionName);\n case GridColumnDataType.Time:\n return IgxTimeFilteringOperand.instance().condition(conditionName);\n case GridColumnDataType.DateTime:\n return IgxDateTimeFilteringOperand.instance().condition(conditionName);\n default:\n return IgxStringFilteringOperand.instance().condition(conditionName);\n }\n }\n /**\n * @hidden @internal\n */\n rejectNonNumericalEntries() {\n const regExp = /[^0-9\\.,eE\\-]/g;\n if (this.searchValue && regExp.test(this.searchValue)) {\n this.searchInput.value = this.searchValue.replace(regExp, '');\n this.searchValue = this.searchInput.value;\n }\n }\n}\nIgxExcelStyleSearchComponent.filterOptimizationThreshold = 2;\nIgxExcelStyleSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleSearchComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: BaseFilteringComponent }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nIgxExcelStyleSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleSearchComponent, selector: \"igx-excel-style-search\", host: { properties: { \"class.igx-excel-filter__menu-main\": \"this.defaultClass\" } }, viewQueries: [{ propertyName: \"searchInput\", first: true, predicate: [\"input\"], descendants: true, read: IgxInputDirective, static: true }, { propertyName: \"list\", first: true, predicate: [\"list\"], descendants: true, read: IgxListComponent }, { propertyName: \"selectAllCheckbox\", first: true, predicate: [\"selectAllCheckbox\"], descendants: true, read: IgxCheckboxComponent }, { propertyName: \"addToCurrentFilterCheckbox\", first: true, predicate: [\"addToCurrentFilterCheckbox\"], descendants: true, read: IgxCheckboxComponent }, { propertyName: \"tree\", first: true, predicate: [\"tree\"], descendants: true, read: IgxTreeComponent }, { propertyName: \"virtDir\", first: true, predicate: IgxForOfDirective, descendants: true, static: true }, { propertyName: \"defaultExcelStyleLoadingValuesTemplate\", first: true, predicate: [\"defaultExcelStyleLoadingValuesTemplate\"], descendants: true, read: TemplateRef }], ngImport: i0, template: \"\\n search\\n \\n \\n clear\\n \\n\\n\\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 {{ selectAllItem.label }}\\n \\n
    \\n
    \\n \\n\\n {{ addToCurrentFilterItem.label }}\\n \\n
    \\n
    \\n\\n \\n \\n
    {{item.label}}
    \\n \\n
    {{childLevel1.label}}
    \\n \\n
    {{childLevel2.label}}
    \\n \\n
    {{childLevel3.label}}
    \\n \\n
    {{childLevel4.label}}
    \\n \\n
    {{childLevel5.label}}
    \\n \\n
    {{childLevel6.label}}
    \\n \\n
    {{childLevel7.label}}
    \\n \\n
    {{childLevel8.label}}
    \\n \\n
    {{childLevel9.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 {{esf.grid?.resourceStrings.igx_grid_excel_no_matches}}\\n
    \\n
    \\n\\n\\n \\n \\n\\n\\n
    \\n
    \\n \\n {{ esf.grid?.resourceStrings.igx_grid_excel_cancel }}\\n \\n
    \\n
    \\n \\n {{ esf.grid?.resourceStrings.igx_grid_excel_apply }}\\n \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i5.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i5.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i5.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxInputGroupComponent, selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: IgxInputDirective, selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: IgxPrefixDirective, selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"directive\", type: IgxSuffixDirective, selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxForOfDirective, selector: \"[igxFor][igxForOf]\", inputs: [\"igxForOf\", \"igxForSizePropName\", \"igxForScrollOrientation\", \"igxForScrollContainer\", \"igxForContainerSize\", \"igxForItemSize\", \"igxForTotalItemCount\", \"igxForTrackBy\"], outputs: [\"chunkLoad\", \"scrollbarVisibilityChanged\", \"contentSizeChange\", \"dataChanged\", \"beforeViewDestroyed\", \"chunkPreload\"] }, { kind: \"component\", type: IgxCheckboxComponent, selector: \"igx-checkbox\", inputs: [\"id\", \"labelId\", \"value\", \"name\", \"tabindex\", \"labelPosition\", \"disableRipple\", \"required\", \"aria-labelledby\", \"aria-label\", \"indeterminate\", \"checked\", \"disabled\", \"invalid\", \"readonly\", \"disableTransitions\"], outputs: [\"change\"] }, { kind: \"component\", type: IgxListComponent, selector: \"igx-list\", inputs: [\"panEndTriggeringThreshold\", \"id\", \"allowLeftPanning\", \"allowRightPanning\", \"isLoading\", \"resourceStrings\"], outputs: [\"leftPan\", \"rightPan\", \"startPan\", \"endPan\", \"resetPan\", \"panStateChange\", \"itemClicked\"] }, { kind: \"component\", type: IgxListItemComponent, selector: \"igx-list-item\", inputs: [\"isHeader\", \"hidden\", \"index\"] }, { kind: \"directive\", type: IgxDataLoadingTemplateDirective, selector: \"[igxDataLoading]\" }, { kind: \"directive\", type: IgxEmptyListTemplateDirective, selector: \"[igxEmptyList]\" }, { kind: \"component\", type: IgxCircularProgressBarComponent, selector: \"igx-circular-bar\", inputs: [\"id\", \"isIndeterminate\", \"textVisibility\", \"text\"] }, { kind: \"component\", type: IgxTreeComponent, selector: \"igx-tree\", inputs: [\"selection\", \"singleBranchExpand\", \"animationSettings\"], outputs: [\"nodeSelection\", \"nodeExpanding\", \"nodeExpanded\", \"nodeCollapsing\", \"nodeCollapsed\", \"activeNodeChanged\"] }, { kind: \"component\", type: IgxTreeNodeComponent, selector: \"igx-tree-node\", inputs: [\"data\", \"loading\", \"resourceStrings\", \"active\", \"disabled\", \"selected\", \"expanded\"], outputs: [\"selectedChange\", \"expandedChange\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleSearchComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-excel-style-search', template: \"\\n search\\n \\n \\n clear\\n \\n\\n\\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 {{ selectAllItem.label }}\\n \\n
    \\n
    \\n \\n\\n {{ addToCurrentFilterItem.label }}\\n \\n
    \\n
    \\n\\n \\n \\n
    {{item.label}}
    \\n \\n
    {{childLevel1.label}}
    \\n \\n
    {{childLevel2.label}}
    \\n \\n
    {{childLevel3.label}}
    \\n \\n
    {{childLevel4.label}}
    \\n \\n
    {{childLevel5.label}}
    \\n \\n
    {{childLevel6.label}}
    \\n \\n
    {{childLevel7.label}}
    \\n \\n
    {{childLevel8.label}}
    \\n \\n
    {{childLevel9.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 {{esf.grid?.resourceStrings.igx_grid_excel_no_matches}}\\n
    \\n
    \\n\\n\\n \\n \\n\\n\\n
    \\n
    \\n \\n {{ esf.grid?.resourceStrings.igx_grid_excel_cancel }}\\n \\n
    \\n
    \\n \\n {{ esf.grid?.resourceStrings.igx_grid_excel_apply }}\\n \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: BaseFilteringComponent }, { type: PlatformUtil }]; }, propDecorators: { defaultClass: [{\n type: HostBinding,\n args: ['class.igx-excel-filter__menu-main']\n }], searchInput: [{\n type: ViewChild,\n args: ['input', { read: IgxInputDirective, static: true }]\n }], list: [{\n type: ViewChild,\n args: ['list', { read: IgxListComponent, static: false }]\n }], selectAllCheckbox: [{\n type: ViewChild,\n args: ['selectAllCheckbox', { read: IgxCheckboxComponent, static: false }]\n }], addToCurrentFilterCheckbox: [{\n type: ViewChild,\n args: ['addToCurrentFilterCheckbox', { read: IgxCheckboxComponent, static: false }]\n }], tree: [{\n type: ViewChild,\n args: ['tree', { read: IgxTreeComponent, static: false }]\n }], virtDir: [{\n type: ViewChild,\n args: [IgxForOfDirective, { static: true }]\n }], defaultExcelStyleLoadingValuesTemplate: [{\n type: ViewChild,\n args: ['defaultExcelStyleLoadingValuesTemplate', { read: TemplateRef }]\n }] } });\n\n/**\n * A component used for presenting Excel style conditional filter UI.\n */\nclass IgxExcelStyleSelectingComponent {\n constructor(esf) {\n this.esf = esf;\n }\n}\nIgxExcelStyleSelectingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleSelectingComponent, deps: [{ token: BaseFilteringComponent }], target: i0.ɵɵFactoryTarget.Component });\nIgxExcelStyleSelectingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleSelectingComponent, selector: \"igx-excel-style-selecting\", ngImport: i0, template: \"
    \\n {{esf.grid.resourceStrings.igx_grid_excel_select }}\\n done\\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleSelectingComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-excel-style-selecting', template: \"
    \\n {{esf.grid.resourceStrings.igx_grid_excel_select }}\\n done\\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: BaseFilteringComponent }]; } });\n\n/**\n * A component used for presenting Excel style column sorting UI.\n */\nclass IgxExcelStyleSortingComponent {\n constructor(esf, cdr) {\n this.esf = esf;\n this.cdr = cdr;\n /**\n * @hidden @internal\n */\n this.defaultClass = true;\n this.destroy$ = new Subject();\n this.esf.sortingChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.updateSelectedButtons(this.esf.column.field);\n });\n }\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n /**\n * @hidden @internal\n */\n onSortButtonClicked(sortDirection) {\n if (this.sortButtonGroup.selectedIndexes.length === 0) {\n if (this.esf.grid.isColumnGrouped(this.esf.column.field)) {\n this.sortButtonGroup.selectButton(sortDirection - 1);\n }\n else {\n this.esf.grid.clearSort(this.esf.column.field);\n }\n }\n else {\n this.esf.grid.sort({ fieldName: this.esf.column.field, dir: sortDirection, ignoreCase: true });\n }\n }\n updateSelectedButtons(fieldName) {\n const sortIndex = this.esf.grid.sortingExpressions.findIndex(s => s.fieldName === fieldName);\n this.cdr.detectChanges();\n this.sortButtonGroup.buttons.forEach((b, i) => {\n this.sortButtonGroup.deselectButton(i);\n });\n if (sortIndex !== -1) {\n const sortDirection = this.esf.grid.sortingExpressions[sortIndex].dir;\n this.sortButtonGroup.selectButton(sortDirection - 1);\n }\n }\n}\nIgxExcelStyleSortingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleSortingComponent, deps: [{ token: BaseFilteringComponent }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxExcelStyleSortingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleSortingComponent, selector: \"igx-excel-style-sorting\", host: { properties: { \"class.igx-excel-filter__sort\": \"this.defaultClass\" } }, viewQueries: [{ propertyName: \"sortButtonGroup\", first: true, predicate: [\"sortButtonGroup\"], descendants: true, read: IgxButtonGroupComponent }], ngImport: i0, template: \"\\n
    \\n {{ esf.grid.resourceStrings.igx_grid_excel_filter_sorting_header }}\\n
    \\n\\n \\n\\n \\n\\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxButtonGroupComponent, selector: \"igx-buttongroup\", inputs: [\"id\", \"itemContentCssClass\", \"multiSelection\", \"values\", \"disabled\", \"alignment\"], outputs: [\"selected\", \"deselected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleSortingComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-excel-style-sorting', template: \"\\n
    \\n {{ esf.grid.resourceStrings.igx_grid_excel_filter_sorting_header }}\\n
    \\n\\n \\n\\n \\n\\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: BaseFilteringComponent }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { defaultClass: [{\n type: HostBinding,\n args: ['class.igx-excel-filter__sort']\n }], sortButtonGroup: [{\n type: ViewChild,\n args: ['sortButtonGroup', { read: IgxButtonGroupComponent }]\n }] } });\n\nclass IgxExcelStyleColumnOperationsTemplateDirective {\n}\nIgxExcelStyleColumnOperationsTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleColumnOperationsTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxExcelStyleColumnOperationsTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleColumnOperationsTemplateDirective, selector: \"igx-excel-style-column-operations,[igxExcelStyleColumnOperations]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleColumnOperationsTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-excel-style-column-operations,[igxExcelStyleColumnOperations]'\n }]\n }] });\nclass IgxExcelStyleFilterOperationsTemplateDirective {\n}\nIgxExcelStyleFilterOperationsTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleFilterOperationsTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxExcelStyleFilterOperationsTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleFilterOperationsTemplateDirective, selector: \"igx-excel-style-filter-operations,[igxExcelStyleFilterOperations]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleFilterOperationsTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-excel-style-filter-operations,[igxExcelStyleFilterOperations]'\n }]\n }] });\n/**\n * A component used for presenting Excel style filtering UI for a specific column.\n * It is used internally in the Grid, but could also be hosted in a container outside of it.\n *\n * Example:\n * ```html\n * \n * \n * ```\n */\nclass IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent {\n /**\n * An @Input property that sets the column.\n */\n set column(value) {\n var _a;\n this._column = value;\n this.listData = new Array();\n this.columnChange.emit(this._column);\n (_a = this.subscriptions) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n if (this._column) {\n this.grid.filteringService.registerSVGIcons();\n this.init();\n this.sortingChanged.emit();\n this.subscriptions = this.grid.columnPin.subscribe(() => {\n requestAnimationFrame(() => {\n if (!this.cdr.destroyed) {\n this.cdr.detectChanges();\n }\n });\n });\n this.subscriptions.add(this.grid.columnVisibilityChanged.subscribe(() => this.detectChanges()));\n this.subscriptions.add(this.grid.sortingExpressionsChange.subscribe(() => this.sortingChanged.emit()));\n this.subscriptions.add(this.grid.filteringExpressionsTreeChange.subscribe(() => this.init()));\n this.subscriptions.add(this.grid.densityChanged.subscribe(() => this.detectChanges()));\n this.subscriptions.add(this.grid.columnMovingEnd.subscribe(() => this.cdr.markForCheck()));\n }\n }\n /**\n * Returns the current column.\n */\n get column() {\n return this._column;\n }\n /**\n * Gets the minimum height.\n */\n get minHeight() {\n if (this._minHeight || this._minHeight === 0) {\n return this._minHeight;\n }\n if (!this.inline) {\n let minHeight = 645;\n switch (this.displayDensity) {\n case DisplayDensity.cosy:\n minHeight = 465;\n break;\n case DisplayDensity.compact:\n minHeight = 330;\n break;\n default: break;\n }\n return `${minHeight}px`;\n }\n }\n /**\n * Sets the minimum height.\n */\n set minHeight(value) {\n this._minHeight = value;\n }\n /**\n * Gets the maximum height.\n */\n get maxHeight() {\n if (this._maxHeight) {\n return this._maxHeight;\n }\n if (!this.inline) {\n let maxHeight = 775;\n switch (this.displayDensity) {\n case DisplayDensity.cosy:\n maxHeight = 565;\n break;\n case DisplayDensity.compact:\n maxHeight = 405;\n break;\n default: break;\n }\n return `${maxHeight}px`;\n }\n }\n /**\n * Sets the maximum height.\n */\n set maxHeight(value) {\n this._maxHeight = value;\n }\n /**\n * @hidden @internal\n */\n get grid() {\n var _a, _b;\n return (_b = (_a = this.column) === null || _a === void 0 ? void 0 : _a.grid) !== null && _b !== void 0 ? _b : this.gridAPI;\n }\n /**\n * @hidden @internal\n */\n get displayDensity() {\n var _a;\n return (_a = this.grid) === null || _a === void 0 ? void 0 : _a.displayDensity;\n }\n constructor(cdr, element, platform, gridAPI) {\n super(cdr, element, platform);\n this.gridAPI = gridAPI;\n /**\n * @hidden @internal\n */\n this.defaultClass = true;\n /**\n * @hidden @internal\n */\n this.inline = true;\n /**\n * @hidden @internal\n */\n this.loadingStart = new EventEmitter();\n /**\n * @hidden @internal\n */\n this.loadingEnd = new EventEmitter();\n /**\n * @hidden @internal\n */\n this.initialized = new EventEmitter();\n /**\n * @hidden @internal\n */\n this.sortingChanged = new EventEmitter();\n /**\n * @hidden @internal\n */\n this.columnChange = new EventEmitter();\n /**\n * @hidden @internal\n */\n this.listDataLoaded = new EventEmitter();\n /**\n * @hidden @internal\n */\n this.expressionsList = new Array();\n /**\n * @hidden @internal\n */\n this.listData = new Array();\n /**\n * @hidden @internal\n */\n this.uniqueValues = [];\n /**\n * @hidden @internal\n */\n this.isHierarchical = false;\n this.containsNullOrEmpty = false;\n this.selectAllSelected = true;\n this.selectAllIndeterminate = false;\n this.filterValues = new Set();\n }\n /**\n * @hidden @internal\n */\n ngOnDestroy() {\n var _a;\n (_a = this.subscriptions) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n delete this.overlayComponentId;\n }\n /**\n * @hidden @internal\n */\n initialize(column, overlayService) {\n this.inline = false;\n this.column = column;\n this.overlayService = overlayService;\n if (this._originalDisplay) {\n this.element.nativeElement.style.display = this._originalDisplay;\n }\n this.initialized.emit();\n this.subscriptions.add(this.grid.columnMoving.subscribe(() => this.closeDropdown()));\n }\n /**\n * @hidden @internal\n */\n onPin() {\n this.closeDropdown();\n this.column.pinned = !this.column.pinned;\n }\n /**\n * @hidden @internal\n */\n onSelect() {\n if (!this.column.selected) {\n this.grid.selectionService.selectColumn(this.column.field, this.grid.columnSelection === GridSelectionMode.single);\n }\n else {\n this.grid.selectionService.deselectColumn(this.column.field);\n }\n this.grid.notifyChanges();\n }\n /**\n * @hidden @internal\n */\n columnSelectable() {\n var _a, _b;\n return ((_a = this.grid) === null || _a === void 0 ? void 0 : _a.columnSelection) !== GridSelectionMode.none && ((_b = this.column) === null || _b === void 0 ? void 0 : _b.selectable);\n }\n /**\n * @hidden @internal\n */\n onHideToggle() {\n this.column.toggleVisibility();\n this.closeDropdown();\n }\n /**\n * @hidden @internal\n */\n cancel() {\n if (!this.overlayComponentId) {\n this.init();\n }\n this.closeDropdown();\n }\n /**\n * @hidden @internal\n */\n closeDropdown() {\n if (this.overlayComponentId) {\n this.overlayService.hide(this.overlayComponentId);\n this.overlayComponentId = null;\n }\n }\n /**\n * @hidden @internal\n */\n onKeyDown(eventArgs) {\n if (this.platform.isFilteringKeyCombo(eventArgs)) {\n eventArgs.preventDefault();\n this.closeDropdown();\n }\n eventArgs.stopPropagation();\n }\n /**\n * @hidden @internal\n */\n hide() {\n this._originalDisplay = document.defaultView.getComputedStyle(this.element.nativeElement).display;\n this.element.nativeElement.style.display = 'none';\n }\n /**\n * @hidden @internal\n */\n detectChanges() {\n this.cdr.detectChanges();\n }\n init() {\n this.expressionsList = new Array();\n generateExpressionsList(this.column.filteringExpressionsTree, this.grid.filteringLogic, this.expressionsList);\n this.populateColumnData();\n }\n areExpressionsSelectable() {\n if (this.expressionsList.length === 1 &&\n (this.expressionsList[0].expression.condition.name === 'equals' ||\n this.expressionsList[0].expression.condition.name === 'at' ||\n this.expressionsList[0].expression.condition.name === 'true' ||\n this.expressionsList[0].expression.condition.name === 'false' ||\n this.expressionsList[0].expression.condition.name === 'empty' ||\n this.expressionsList[0].expression.condition.name === 'in')) {\n return true;\n }\n const selectableExpressionsCount = this.expressionsList.filter(exp => (exp.beforeOperator === 1 || exp.afterOperator === 1) &&\n (exp.expression.condition.name === 'equals' ||\n exp.expression.condition.name === 'at' ||\n exp.expression.condition.name === 'true' ||\n exp.expression.condition.name === 'false' ||\n exp.expression.condition.name === 'empty' ||\n exp.expression.condition.name === 'in')).length;\n return selectableExpressionsCount === this.expressionsList.length;\n }\n populateColumnData() {\n this.cdr.detectChanges();\n if (this.grid.uniqueColumnValuesStrategy) {\n this.renderColumnValuesRemotely();\n }\n else {\n this.renderColumnValuesFromData();\n }\n }\n renderColumnValuesRemotely() {\n this.loadingStart.emit();\n const expressionsTree = this.getColumnFilterExpressionsTree();\n const prevColumn = this.column;\n this.grid.uniqueColumnValuesStrategy(this.column, expressionsTree, (values) => {\n if (!this.column || this.column !== prevColumn) {\n return;\n }\n const items = values.map(v => ({\n value: v\n }));\n this.uniqueValues = this.column.sortStrategy.sort(items, 'value', SortingDirection.Asc, this.column.sortingIgnoreCase, (obj, key) => {\n let resolvedValue = obj[key];\n if (this.column.dataType === GridColumnDataType.Time) {\n resolvedValue = new Date().setHours(resolvedValue.getHours(), resolvedValue.getMinutes(), resolvedValue.getSeconds(), resolvedValue.getMilliseconds());\n }\n return resolvedValue;\n });\n this.renderValues();\n this.loadingEnd.emit();\n });\n }\n renderColumnValuesFromData() {\n this.loadingStart.emit();\n const expressionsTree = this.getColumnFilterExpressionsTree();\n const promise = this.grid.filterStrategy.getFilterItems(this.column, expressionsTree);\n promise.then((items) => {\n this.isHierarchical = items.length > 0 && items.some(i => i.children && i.children.length > 0);\n this.uniqueValues = items;\n this.renderValues();\n this.loadingEnd.emit();\n this.sortingChanged.emit();\n });\n }\n renderValues() {\n this.filterValues = this.generateFilterValues(this.column.dataType === GridColumnDataType.Date || this.column.dataType === GridColumnDataType.DateTime);\n this.generateListData();\n }\n generateFilterValues(isDateColumn = false) {\n let filterValues;\n if (isDateColumn) {\n filterValues = new Set(this.expressionsList.reduce((arr, e) => {\n if (e.expression.condition.name === 'in') {\n return [...arr, ...Array.from(e.expression.searchVal.values()).map(v => new Date(v).toISOString())];\n }\n return [...arr, ...[e.expression.searchVal ? e.expression.searchVal.toISOString() : e.expression.searchVal]];\n }, []));\n }\n else if (this.column.dataType === GridColumnDataType.Time) {\n filterValues = new Set(this.expressionsList.reduce((arr, e) => {\n if (e.expression.condition.name === 'in') {\n return [...arr, ...Array.from(e.expression.searchVal.values()).map(v => typeof v === 'string' ? v : new Date(v).toLocaleTimeString())];\n }\n return [...arr, ...[e.expression.searchVal ? e.expression.searchVal.toLocaleTimeString() : e.expression.searchVal]];\n }, []));\n }\n else {\n filterValues = new Set(this.expressionsList.reduce((arr, e) => {\n if (e.expression.condition.name === 'in') {\n return [...arr, ...Array.from(e.expression.searchVal.values())];\n }\n return [...arr, ...[e.expression.searchVal]];\n }, []));\n }\n return filterValues;\n }\n generateListData() {\n this.listData = new Array();\n const shouldUpdateSelection = this.areExpressionsSelectable();\n if (this.column.dataType === GridColumnDataType.Boolean) {\n this.addBooleanItems();\n }\n else {\n this.addItems(shouldUpdateSelection);\n }\n if (!this.isHierarchical && this.containsNullOrEmpty) {\n const blanksItem = this.generateBlanksItem(shouldUpdateSelection);\n this.listData.unshift(blanksItem);\n }\n if (this.listData.length > 0) {\n this.addSelectAllItem();\n }\n if (!this.cdr.destroyed) {\n this.cdr.detectChanges();\n }\n this.listDataLoaded.emit();\n }\n getColumnFilterExpressionsTree() {\n const gridExpressionsTree = this.grid.filteringExpressionsTree;\n const expressionsTree = new FilteringExpressionsTree(gridExpressionsTree.operator, gridExpressionsTree.fieldName);\n for (const operand of gridExpressionsTree.filteringOperands) {\n if (operand instanceof FilteringExpressionsTree) {\n const columnExprTree = operand;\n if (columnExprTree.fieldName === this.column.field) {\n continue;\n }\n }\n expressionsTree.filteringOperands.push(operand);\n }\n return expressionsTree;\n }\n addBooleanItems() {\n this.selectAllSelected = true;\n this.selectAllIndeterminate = false;\n this.uniqueValues.forEach(element => {\n const value = element.value;\n const filterListItem = new FilterListItem();\n if (value !== undefined && value !== null && value !== '') {\n if (this.column.filteringExpressionsTree) {\n if (value === true && this.expressionsList.find(exp => exp.expression.condition.name === 'true')) {\n filterListItem.isSelected = true;\n filterListItem.isFiltered = true;\n this.selectAllIndeterminate = true;\n }\n else if (value === false && this.expressionsList.find(exp => exp.expression.condition.name === 'false')) {\n filterListItem.isSelected = true;\n filterListItem.isFiltered = true;\n this.selectAllIndeterminate = true;\n }\n else {\n filterListItem.isSelected = false;\n filterListItem.isFiltered = false;\n }\n }\n else {\n filterListItem.isSelected = true;\n filterListItem.isFiltered = true;\n }\n filterListItem.value = value;\n filterListItem.label = value ?\n this.grid.resourceStrings.igx_grid_filter_true :\n this.grid.resourceStrings.igx_grid_filter_false;\n filterListItem.indeterminate = false;\n this.listData.push(filterListItem);\n }\n else {\n this.containsNullOrEmpty = true;\n }\n });\n }\n addItems(shouldUpdateSelection) {\n this.selectAllSelected = true;\n this.selectAllIndeterminate = false;\n this.containsNullOrEmpty = false;\n this.listData = this.generateFilterListItems(this.uniqueValues, shouldUpdateSelection);\n this.containsNullOrEmpty = this.uniqueValues.length > this.listData.length;\n }\n generateFilterListItems(values, shouldUpdateSelection, parent) {\n let filterListItems = [];\n values === null || values === void 0 ? void 0 : values.forEach(element => {\n var _a, _b;\n const value = element.value;\n const hasValue = value !== undefined && value !== null && value !== '';\n if (hasValue) {\n const filterListItem = new FilterListItem();\n filterListItem.parent = parent;\n filterListItem.value = value;\n filterListItem.label = element.label !== undefined ?\n element.label :\n this.getFilterItemLabel(value);\n filterListItem.indeterminate = false;\n filterListItem.isSelected = true;\n filterListItem.isFiltered = true;\n if (this.column.filteringExpressionsTree) {\n filterListItem.isSelected = false;\n filterListItem.isFiltered = false;\n if (shouldUpdateSelection) {\n const exprValue = this.getExpressionValue(value);\n if (this.filterValues.has(exprValue)) {\n filterListItem.isSelected = true;\n filterListItem.isFiltered = true;\n }\n this.selectAllIndeterminate = true;\n }\n else {\n this.selectAllSelected = false;\n }\n }\n filterListItem.children = this.generateFilterListItems((_a = element.children) !== null && _a !== void 0 ? _a : (_b = element.value) === null || _b === void 0 ? void 0 : _b.children, shouldUpdateSelection, filterListItem);\n filterListItems.push(filterListItem);\n }\n });\n return filterListItems;\n }\n addSelectAllItem() {\n const selectAll = new FilterListItem();\n selectAll.isSelected = this.selectAllSelected;\n selectAll.value = this.grid.resourceStrings.igx_grid_excel_select_all;\n selectAll.label = this.grid.resourceStrings.igx_grid_excel_select_all;\n selectAll.indeterminate = this.selectAllIndeterminate;\n selectAll.isSpecial = true;\n selectAll.isFiltered = this.selectAllSelected;\n this.listData.unshift(selectAll);\n }\n generateBlanksItem(shouldUpdateSelection) {\n const blanks = new FilterListItem();\n if (this.column.filteringExpressionsTree) {\n if (shouldUpdateSelection) {\n if (this.filterValues.has(null)) {\n blanks.isSelected = true;\n blanks.isFiltered = true;\n }\n else {\n blanks.isSelected = false;\n blanks.isFiltered = false;\n }\n }\n }\n else {\n blanks.isSelected = true;\n blanks.isFiltered = true;\n }\n blanks.value = null;\n blanks.label = this.grid.resourceStrings.igx_grid_excel_blanks;\n blanks.indeterminate = false;\n blanks.isSpecial = true;\n blanks.isBlanks = true;\n return blanks;\n }\n getFilterItemLabel(value, applyFormatter = true, data) {\n if (this.column.formatter) {\n if (applyFormatter) {\n return this.column.formatter(value, data);\n }\n return value;\n }\n const { display, format, digitsInfo, currencyCode, timezone } = this.column.pipeArgs;\n const locale = this.grid.locale;\n switch (this.column.dataType) {\n case GridColumnDataType.Date:\n case GridColumnDataType.DateTime:\n case GridColumnDataType.Time:\n return formatDate(value, format, locale, timezone);\n case GridColumnDataType.Currency:\n return formatCurrency(value, currencyCode || getLocaleCurrencyCode(locale), display, digitsInfo, locale);\n case GridColumnDataType.Number:\n return formatNumber(value, locale, digitsInfo);\n case GridColumnDataType.Percent:\n return formatPercent(value, locale, digitsInfo);\n default:\n return value;\n }\n }\n getExpressionValue(value) {\n if (this.column.dataType === GridColumnDataType.Date) {\n value = value ? new Date(value).toISOString() : value;\n }\n else if (this.column.dataType === GridColumnDataType.DateTime) {\n value = value ? new Date(value).toISOString() : value;\n }\n else if (this.column.dataType === GridColumnDataType.Time) {\n value = value ? new Date(value).toLocaleTimeString() : value;\n }\n return value;\n }\n}\nIgxGridExcelStyleFilteringComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridExcelStyleFilteringComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: PlatformUtil }, { token: IGX_GRID_BASE, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxGridExcelStyleFilteringComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridExcelStyleFilteringComponent, selector: \"igx-grid-excel-style-filtering\", inputs: { column: \"column\", minHeight: \"minHeight\", maxHeight: \"maxHeight\" }, outputs: { loadingStart: \"loadingStart\", loadingEnd: \"loadingEnd\", initialized: \"initialized\", sortingChanged: \"sortingChanged\", columnChange: \"columnChange\", listDataLoaded: \"listDataLoaded\" }, host: { properties: { \"class.igx-excel-filter\": \"this.defaultClass\", \"class.igx-excel-filter--inline\": \"this.inline\", \"style.max-height\": \"this.maxHeight\" } }, providers: [{ provide: BaseFilteringComponent, useExisting: forwardRef(() => IgxGridExcelStyleFilteringComponent) }], queries: [{ propertyName: \"excelColumnOperationsDirective\", first: true, predicate: IgxExcelStyleColumnOperationsTemplateDirective, descendants: true, read: IgxExcelStyleColumnOperationsTemplateDirective }, { propertyName: \"excelFilterOperationsDirective\", first: true, predicate: IgxExcelStyleFilterOperationsTemplateDirective, descendants: true, read: IgxExcelStyleFilterOperationsTemplateDirective }], viewQueries: [{ propertyName: \"mainDropdown\", first: true, predicate: [\"mainDropdown\"], descendants: true, read: ElementRef }, { propertyName: \"defaultExcelColumnOperations\", first: true, predicate: [\"defaultExcelColumnOperations\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"defaultExcelFilterOperations\", first: true, predicate: [\"defaultExcelFilterOperations\"], descendants: true, read: TemplateRef, static: true }], 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\\n \\n \\n \\n \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxExcelStyleHeaderComponent, selector: \"igx-excel-style-header\", inputs: [\"showPinning\", \"showSelecting\", \"showHiding\"] }, { kind: \"component\", type: IgxExcelStyleSortingComponent, selector: \"igx-excel-style-sorting\" }, { kind: \"component\", type: IgxExcelStylePinningComponent, selector: \"igx-excel-style-pinning\" }, { kind: \"component\", type: IgxExcelStyleHidingComponent, selector: \"igx-excel-style-hiding\" }, { kind: \"component\", type: IgxExcelStyleSelectingComponent, selector: \"igx-excel-style-selecting\" }, { kind: \"component\", type: IgxExcelStyleClearFiltersComponent, selector: \"igx-excel-style-clear-filters\" }, { kind: \"component\", type: IgxExcelStyleConditionalFilterComponent, selector: \"igx-excel-style-conditional-filter\" }, { kind: \"component\", type: IgxExcelStyleMovingComponent, selector: \"igx-excel-style-moving\" }, { kind: \"component\", type: IgxExcelStyleSearchComponent, selector: \"igx-excel-style-search\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridExcelStyleFilteringComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: BaseFilteringComponent, useExisting: forwardRef(() => IgxGridExcelStyleFilteringComponent) }], selector: 'igx-grid-excel-style-filtering', 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 }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: PlatformUtil }, { type: undefined, decorators: [{\n type: Host\n }, {\n type: Optional\n }, {\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n }, propDecorators: { defaultClass: [{\n type: HostBinding,\n args: ['class.igx-excel-filter']\n }], inline: [{\n type: HostBinding,\n args: ['class.igx-excel-filter--inline']\n }], loadingStart: [{\n type: Output\n }], loadingEnd: [{\n type: Output\n }], initialized: [{\n type: Output\n }], sortingChanged: [{\n type: Output\n }], columnChange: [{\n type: Output\n }], listDataLoaded: [{\n type: Output\n }], mainDropdown: [{\n type: ViewChild,\n args: ['mainDropdown', { read: ElementRef }]\n }], excelColumnOperationsDirective: [{\n type: ContentChild,\n args: [IgxExcelStyleColumnOperationsTemplateDirective, { read: IgxExcelStyleColumnOperationsTemplateDirective }]\n }], excelFilterOperationsDirective: [{\n type: ContentChild,\n args: [IgxExcelStyleFilterOperationsTemplateDirective, { read: IgxExcelStyleFilterOperationsTemplateDirective }]\n }], defaultExcelColumnOperations: [{\n type: ViewChild,\n args: ['defaultExcelColumnOperations', { read: TemplateRef, static: true }]\n }], defaultExcelFilterOperations: [{\n type: ViewChild,\n args: ['defaultExcelFilterOperations', { read: TemplateRef, static: true }]\n }], column: [{\n type: Input\n }], minHeight: [{\n type: Input\n }], maxHeight: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['style.max-height']\n }] } });\n\n/**\n * This enumeration is used to configure whether the drop position is set before or after\n * the target.\n */\nvar DropPosition;\n(function (DropPosition) {\n DropPosition[DropPosition[\"BeforeDropTarget\"] = 0] = \"BeforeDropTarget\";\n DropPosition[DropPosition[\"AfterDropTarget\"] = 1] = \"AfterDropTarget\";\n})(DropPosition || (DropPosition = {}));\n/**\n * @hidden\n * @internal\n */\nclass IgxColumnMovingService {\n}\nIgxColumnMovingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnMovingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIgxColumnMovingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnMovingService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnMovingService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * @hidden\n */\nclass GridBaseAPIService {\n constructor(crudService, cms) {\n this.crudService = crudService;\n this.cms = cms;\n this.destroyMap = new Map();\n }\n get_column_by_name(name) {\n return this.grid.columns.find((col) => col.field === name);\n }\n get_summary_data() {\n const grid = this.grid;\n let data = grid.filteredData;\n if (data && grid.hasPinnedRecords) {\n data = grid._filteredUnpinnedData;\n }\n if (!data) {\n if (grid.transactions.enabled) {\n data = DataUtil.mergeTransactions(cloneArray(grid.data), grid.transactions.getAggregatedChanges(true), grid.primaryKey, grid.dataCloneStrategy);\n const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === TransactionType.DELETE).map(t => t.id);\n deletedRows.forEach(rowID => {\n const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;\n const index = tempData.indexOf(rowID);\n if (index !== -1) {\n data.splice(index, 1);\n }\n });\n }\n else {\n data = grid.data;\n }\n }\n return data;\n }\n /**\n * @hidden\n * @internal\n */\n getRowData(rowID) {\n const data = this.get_all_data(this.grid.transactions.enabled);\n const index = this.get_row_index_in_data(rowID, data);\n return data[index];\n }\n get_row_index_in_data(rowID, dataCollection) {\n const grid = this.grid;\n if (!grid) {\n return -1;\n }\n const data = dataCollection !== null && dataCollection !== void 0 ? dataCollection : this.get_all_data(grid.transactions.enabled);\n return grid.primaryKey ? data.findIndex(record => record.recordRef ? record.recordRef[grid.primaryKey] === rowID\n : record[grid.primaryKey] === rowID) : data.indexOf(rowID);\n }\n get_row_by_key(rowSelector) {\n if (!this.grid) {\n return null;\n }\n const primaryKey = this.grid.primaryKey;\n if (primaryKey !== undefined && primaryKey !== null) {\n return this.grid.dataRowList.find((row) => row.data[primaryKey] === rowSelector);\n }\n else {\n return this.grid.dataRowList.find((row) => row.data === rowSelector);\n }\n }\n get_row_by_index(rowIndex) {\n return this.grid.rowList.find((row) => row.index === rowIndex);\n }\n /**\n * Gets the rowID of the record at the specified data view index\n *\n * @param index\n * @param dataCollection\n */\n get_rec_id_by_index(index, dataCollection) {\n dataCollection = dataCollection || this.grid.data;\n if (index >= 0 && index < dataCollection.length) {\n const rec = dataCollection[index];\n return this.grid.primaryKey ? rec[this.grid.primaryKey] : rec;\n }\n return null;\n }\n get_cell_by_key(rowSelector, field) {\n const row = this.get_row_by_key(rowSelector);\n if (row && row.cells) {\n return row.cells.find((cell) => cell.column.field === field);\n }\n }\n get_cell_by_index(rowIndex, columnID) {\n const row = this.get_row_by_index(rowIndex);\n const hasCells = row && row.cells;\n if (hasCells && typeof columnID === 'number') {\n return row.cells.find((cell) => cell.column.index === columnID);\n }\n if (hasCells && typeof columnID === 'string') {\n return row.cells.find((cell) => cell.column.field === columnID);\n }\n }\n get_cell_by_visible_index(rowIndex, columnIndex) {\n const row = this.get_row_by_index(rowIndex);\n if (row && row.cells) {\n return row.cells.find((cell) => cell.visibleColumnIndex === columnIndex);\n }\n }\n update_cell(cell) {\n if (!cell) {\n return;\n }\n const args = cell.createEditEventArgs(true);\n this.grid.summaryService.clearSummaryCache(args);\n const data = this.getRowData(cell.id.rowID);\n const newRowData = reverseMapper(cell.column.field, args.newValue);\n this.updateData(this.grid, cell.id.rowID, data, cell.rowData, newRowData);\n if (!this.grid.crudService.row) {\n this.grid.validation.update(cell.id.rowID, newRowData);\n }\n if (this.grid.primaryKey === cell.column.field) {\n if (this.grid.pinnedRecords.length > 0) {\n const rowIndex = this.grid.pinnedRecords.indexOf(cell.rowData);\n if (rowIndex !== -1) {\n const previousRowId = cell.value;\n const rowType = this.grid.getRowByIndex(cell.rowIndex);\n this.unpin_row(previousRowId, rowType);\n this.pin_row(args.newValue, rowIndex, rowType);\n }\n }\n if (this.grid.selectionService.isRowSelected(cell.id.rowID)) {\n this.grid.selectionService.deselectRow(cell.id.rowID);\n this.grid.selectionService.selectRowById(args.newValue);\n }\n if (this.grid.hasSummarizedColumns) {\n this.grid.summaryService.removeSummaries(cell.id.rowID);\n }\n }\n if (!this.grid.rowEditable || !this.crudService.row ||\n this.crudService.row.id !== cell.id.rowID || !this.grid.transactions.enabled) {\n this.grid.summaryService.clearSummaryCache(args);\n this.grid.pipeTrigger++;\n }\n return args;\n }\n // TODO: CRUD refactor to not emit editing evts.\n update_row(row, value, event) {\n const grid = this.grid;\n const selected = grid.selectionService.isRowSelected(row.id);\n const rowInEditMode = this.crudService.row;\n const data = this.get_all_data(grid.transactions.enabled);\n const index = this.get_row_index_in_data(row.id, data);\n const hasSummarized = grid.hasSummarizedColumns;\n this.crudService.updateRowEditData(row, value);\n const args = row.createEditEventArgs(true, event);\n // If no valid row is found\n if (index === -1) {\n return args;\n }\n if (rowInEditMode) {\n const hasChanges = grid.transactions.getState(args.rowID, true);\n grid.transactions.endPending(false);\n if (!hasChanges) {\n return args;\n }\n }\n if (!args.newValue) {\n return args;\n }\n if (hasSummarized) {\n grid.summaryService.removeSummaries(args.rowID);\n }\n this.updateData(grid, row.id, data[index], args.oldValue, args.newValue);\n this.grid.validation.update(row.id, args.newValue);\n const newId = grid.primaryKey ? args.newValue[grid.primaryKey] : args.newValue;\n if (selected) {\n grid.selectionService.deselectRow(row.id);\n grid.selectionService.selectRowById(newId);\n }\n // make sure selection is handled prior to updating the row.id\n row.id = newId;\n if (hasSummarized) {\n grid.summaryService.removeSummaries(newId);\n }\n grid.pipeTrigger++;\n return args;\n }\n sort(expression) {\n if (expression.dir === SortingDirection.None) {\n this.remove_grouping_expression(expression.fieldName);\n }\n const sortingState = cloneArray(this.grid.sortingExpressions);\n this.prepare_sorting_expression([sortingState], expression);\n this.grid.sortingExpressions = sortingState;\n }\n sort_decoupled(expression) {\n if (expression.dir === SortingDirection.None) {\n this.remove_grouping_expression(expression.fieldName);\n }\n const groupingState = cloneArray(this.grid.groupingExpressions);\n this.prepare_grouping_expression([groupingState], expression);\n this.grid.groupingExpressions = groupingState;\n }\n sort_multiple(expressions) {\n const sortingState = cloneArray(this.grid.sortingExpressions);\n for (const each of expressions) {\n if (each.dir === SortingDirection.None) {\n this.remove_grouping_expression(each.fieldName);\n }\n this.prepare_sorting_expression([sortingState], each);\n }\n this.grid.sortingExpressions = sortingState;\n }\n sort_groupBy_multiple(expressions) {\n const groupingState = cloneArray(this.grid.groupingExpressions);\n for (const each of expressions) {\n if (each.dir === SortingDirection.None) {\n this.remove_grouping_expression(each.fieldName);\n }\n this.prepare_grouping_expression([groupingState], each);\n }\n }\n clear_sort(fieldName) {\n const sortingState = this.grid.sortingExpressions;\n const index = sortingState.findIndex((expr) => expr.fieldName === fieldName);\n if (index > -1) {\n sortingState.splice(index, 1);\n this.grid.sortingExpressions = sortingState;\n }\n }\n clear_groupby(_name) {\n }\n should_apply_number_style(column) {\n return column.dataType === GridColumnDataType.Number;\n }\n get_data() {\n const grid = this.grid;\n const data = grid.data ? grid.data : [];\n return data;\n }\n get_all_data(includeTransactions = false) {\n const grid = this.grid;\n let data = grid && grid.data ? grid.data : [];\n data = includeTransactions ? grid.dataWithAddedInTransactionRows : data;\n return data;\n }\n get_filtered_data() {\n return this.grid.filteredData;\n }\n addRowToData(rowData, _parentID) {\n // Add row goes to transactions and if rowEditable is properly implemented, added rows will go to pending transactions\n // If there is a row in edit - > commit and close\n const grid = this.grid;\n const rowId = grid.primaryKey ? rowData[grid.primaryKey] : rowData;\n if (grid.transactions.enabled) {\n const transaction = { id: rowId, type: TransactionType.ADD, newValue: rowData };\n grid.transactions.add(transaction);\n }\n else {\n grid.data.push(rowData);\n }\n grid.validation.markAsTouched(rowId);\n grid.validation.update(rowId, rowData);\n }\n deleteRowFromData(rowID, index) {\n // if there is a row (index !== 0) delete it\n // if there is a row in ADD or UPDATE state change it's state to DELETE\n const grid = this.grid;\n if (index !== -1) {\n if (grid.transactions.enabled) {\n const transaction = { id: rowID, type: TransactionType.DELETE, newValue: null };\n grid.transactions.add(transaction, grid.data[index]);\n }\n else {\n grid.data.splice(index, 1);\n }\n }\n else {\n const state = grid.transactions.getState(rowID);\n grid.transactions.add({ id: rowID, type: TransactionType.DELETE, newValue: null }, state && state.recordRef);\n }\n grid.validation.clear(rowID);\n }\n deleteRowById(rowId) {\n let index;\n const grid = this.grid;\n const data = this.get_all_data();\n if (grid.primaryKey) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n index = data.map((record) => record[grid.primaryKey]).indexOf(rowId);\n }\n else {\n index = data.indexOf(rowId);\n }\n const state = grid.transactions.getState(rowId);\n const hasRowInNonDeletedState = state && state.type !== TransactionType.DELETE;\n // if there is a row (index !== -1) and the we have cell in edit mode on same row exit edit mode\n // if there is no row (index === -1), but there is a row in ADD or UPDATE state do as above\n // Otherwise just exit - there is nothing to delete\n if (index !== -1 || hasRowInNonDeletedState) {\n // Always exit edit when row is deleted\n this.crudService.endEdit(true);\n }\n else {\n return;\n }\n const record = data[index];\n const key = record ? record[grid.primaryKey] : undefined;\n grid.rowDeletedNotifier.next({ data: record, owner: grid, primaryKey: key });\n this.deleteRowFromData(rowId, index);\n if (grid.selectionService.isRowSelected(rowId)) {\n grid.selectionService.deselectRowsWithNoEvent([rowId]);\n }\n else {\n grid.selectionService.clearHeaderCBState();\n }\n grid.pipeTrigger++;\n grid.notifyChanges();\n // Data needs to be recalculated if transactions are in place\n // If no transactions, `data` will be a reference to the grid getter, otherwise it will be stale\n const dataAfterDelete = grid.transactions.enabled ? grid.dataWithAddedInTransactionRows : data;\n grid.refreshSearch();\n if (dataAfterDelete.length % grid.perPage === 0 && dataAfterDelete.length / grid.perPage - 1 < grid.page && grid.page !== 0) {\n grid.page--;\n }\n return record;\n }\n get_row_id(rowData) {\n return this.grid.primaryKey ? rowData[this.grid.primaryKey] : rowData;\n }\n row_deleted_transaction(rowID) {\n const grid = this.grid;\n if (!grid) {\n return false;\n }\n if (!grid.transactions.enabled) {\n return false;\n }\n const state = grid.transactions.getState(rowID);\n if (state) {\n return state.type === TransactionType.DELETE;\n }\n return false;\n }\n get_row_expansion_state(record) {\n const grid = this.grid;\n const states = grid.expansionStates;\n const rowID = grid.primaryKey ? record[grid.primaryKey] : record;\n const expanded = states.get(rowID);\n if (expanded !== undefined) {\n return expanded;\n }\n else {\n return grid.getDefaultExpandState(record);\n }\n }\n set_row_expansion_state(rowID, expanded, event) {\n const grid = this.grid;\n const expandedStates = grid.expansionStates;\n if (!this.allow_expansion_state_change(rowID, expanded)) {\n return;\n }\n const args = {\n rowID,\n expanded,\n event,\n cancel: false\n };\n grid.rowToggle.emit(args);\n if (args.cancel) {\n return;\n }\n expandedStates.set(rowID, expanded);\n grid.expansionStates = expandedStates;\n // K.D. 28 Feb, 2022 #10634 Don't trigger endEdit/commit upon row expansion state change\n // this.crudService.endEdit(false);\n }\n get_rec_by_id(rowID) {\n return this.grid.primaryKey ? this.getRowData(rowID) : rowID;\n }\n /**\n * Returns the index of the record in the data view by pk or -1 if not found or primaryKey is not set.\n *\n * @param pk\n * @param dataCollection\n */\n get_rec_index_by_id(pk, dataCollection) {\n dataCollection = dataCollection || this.grid.data;\n return this.grid.primaryKey ? dataCollection.findIndex(rec => rec[this.grid.primaryKey] === pk) : -1;\n }\n allow_expansion_state_change(rowID, expanded) {\n return this.grid.expansionStates.get(rowID) !== expanded;\n }\n prepare_sorting_expression(stateCollections, expression) {\n if (expression.dir === SortingDirection.None) {\n stateCollections.forEach(state => {\n state.splice(state.findIndex((expr) => expr.fieldName === expression.fieldName), 1);\n });\n return;\n }\n /**\n * We need to make sure the states in each collection with same fields point to the same object reference.\n * If the different state collections provided have different sizes we need to get the largest one.\n * That way we can get the state reference from the largest one that has the same fieldName as the expression to prepare.\n */\n let maxCollection = stateCollections[0];\n for (let i = 1; i < stateCollections.length; i++) {\n if (maxCollection.length < stateCollections[i].length) {\n maxCollection = stateCollections[i];\n }\n }\n const maxExpr = maxCollection.find((expr) => expr.fieldName === expression.fieldName);\n stateCollections.forEach(collection => {\n const myExpr = collection.find((expr) => expr.fieldName === expression.fieldName);\n if (!myExpr && !maxExpr) {\n // Expression with this fieldName is missing from the current and the max collection.\n collection.push(expression);\n }\n else if (!myExpr && maxExpr) {\n // Expression with this fieldName is missing from the current and but the max collection has.\n collection.push(maxExpr);\n Object.assign(maxExpr, expression);\n }\n else {\n // The current collection has the expression so just update it.\n Object.assign(myExpr, expression);\n }\n });\n }\n prepare_grouping_expression(stateCollections, expression) {\n if (expression.dir === SortingDirection.None) {\n stateCollections.forEach(state => {\n state.splice(state.findIndex((expr) => expr.fieldName === expression.fieldName), 1);\n });\n return;\n }\n /**\n * We need to make sure the states in each collection with same fields point to the same object reference.\n * If the different state collections provided have different sizes we need to get the largest one.\n * That way we can get the state reference from the largest one that has the same fieldName as the expression to prepare.\n */\n let maxCollection = stateCollections[0];\n for (let i = 1; i < stateCollections.length; i++) {\n if (maxCollection.length < stateCollections[i].length) {\n maxCollection = stateCollections[i];\n }\n }\n const maxExpr = maxCollection.find((expr) => expr.fieldName === expression.fieldName);\n stateCollections.forEach(collection => {\n const myExpr = collection.find((expr) => expr.fieldName === expression.fieldName);\n if (!myExpr && !maxExpr) {\n // Expression with this fieldName is missing from the current and the max collection.\n collection.push(expression);\n }\n else if (!myExpr && maxExpr) {\n // Expression with this fieldName is missing from the current and but the max collection has.\n collection.push(maxExpr);\n Object.assign(maxExpr, expression);\n }\n else {\n // The current collection has the expression so just update it.\n Object.assign(myExpr, expression);\n }\n });\n }\n remove_grouping_expression(_fieldName) {\n }\n filterDataByExpressions(expressionsTree) {\n let data = this.get_all_data();\n if (expressionsTree.filteringOperands.length) {\n const state = { expressionsTree, strategy: this.grid.filterStrategy };\n data = FilterUtil.filter(cloneArray(data), state, this.grid);\n }\n return data;\n }\n sortDataByExpressions(data, expressions) {\n return DataUtil.sort(cloneArray(data), expressions, this.grid.sortStrategy, this.grid);\n }\n pin_row(rowID, index, row) {\n const grid = this.grid;\n if (grid._pinnedRecordIDs.indexOf(rowID) !== -1) {\n return;\n }\n const eventArgs = this.get_pin_row_event_args(rowID, index, row, true);\n grid.rowPinning.emit(eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n const insertIndex = typeof eventArgs.insertAtIndex === 'number' ? eventArgs.insertAtIndex : grid._pinnedRecordIDs.length;\n grid._pinnedRecordIDs.splice(insertIndex, 0, rowID);\n }\n unpin_row(rowID, row) {\n const grid = this.grid;\n const index = grid._pinnedRecordIDs.indexOf(rowID);\n if (index === -1) {\n return;\n }\n const eventArgs = this.get_pin_row_event_args(rowID, null, row, false);\n grid.rowPinning.emit(eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n grid._pinnedRecordIDs.splice(index, 1);\n }\n get_pin_row_event_args(rowID, index, row, pinned) {\n const eventArgs = {\n isPinned: pinned ? true : false,\n rowID,\n row,\n cancel: false\n };\n if (typeof index === 'number') {\n eventArgs.insertAtIndex = index <= this.grid.pinnedRecords.length ? index : this.grid.pinnedRecords.length;\n }\n return eventArgs;\n }\n /**\n * Updates related row of provided grid's data source with provided new row value\n *\n * @param grid Grid to update data for\n * @param rowID ID of the row to update\n * @param rowValueInDataSource Initial value of the row as it is in data source\n * @param rowCurrentValue Current value of the row as it is with applied previous transactions\n * @param rowNewValue New value of the row\n */\n updateData(grid, rowID, rowValueInDataSource, rowCurrentValue, rowNewValue) {\n if (grid.transactions.enabled) {\n const transaction = {\n id: rowID,\n type: TransactionType.UPDATE,\n newValue: rowNewValue\n };\n grid.transactions.add(transaction, rowCurrentValue);\n }\n else {\n mergeObjects(rowValueInDataSource, rowNewValue);\n }\n }\n update_row_in_array(value, rowID, index) {\n const grid = this.grid;\n grid.data[index] = value;\n }\n getSortStrategyPerColumn(fieldName) {\n return this.get_column_by_name(fieldName) ?\n this.get_column_by_name(fieldName).sortStrategy : undefined;\n }\n}\nGridBaseAPIService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: GridBaseAPIService, deps: [{ token: IgxGridCRUDService }, { token: IgxColumnMovingService }], target: i0.ɵɵFactoryTarget.Injectable });\nGridBaseAPIService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: GridBaseAPIService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: GridBaseAPIService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: IgxGridCRUDService }, { type: IgxColumnMovingService }]; } });\n\n/**\n * @hidden\n */\nfunction WatchChanges() {\n return (target, key, propDesc) => {\n const privateKey = '_' + key.toString();\n propDesc = propDesc || {\n configurable: true,\n enumerable: true,\n };\n propDesc.get = propDesc.get || (function () {\n return this[privateKey];\n });\n const originalSetter = propDesc.set || (function (val) {\n this[privateKey] = val;\n });\n propDesc.set = function (val) {\n const init = this._init;\n const oldValue = this[key];\n if (val !== oldValue || (typeof val === 'object' && val === oldValue)) {\n originalSetter.call(this, val);\n if (this.ngOnChanges && !init) {\n // in case wacthed prop changes trigger ngOnChanges manually\n const changes = {\n [key]: new SimpleChange(oldValue, val, false)\n };\n this.ngOnChanges(changes);\n }\n }\n };\n return propDesc;\n };\n}\nfunction WatchColumnChanges() {\n return (target, key, propDesc) => {\n const privateKey = '_' + key.toString();\n propDesc = propDesc || {\n configurable: true,\n enumerable: true,\n };\n propDesc.get = propDesc.get || (function () {\n return this[privateKey];\n });\n const originalSetter = propDesc.set || (function (val) {\n this[privateKey] = val;\n });\n propDesc.set = function (val) {\n const oldValue = this[key];\n originalSetter.call(this, val);\n if (val !== oldValue || (typeof val === 'object' && val === oldValue)) {\n if (this.columnChange) {\n this.columnChange.emit();\n }\n }\n };\n return propDesc;\n };\n}\nfunction notifyChanges(repaint = false) {\n return (_, key, propDesc) => {\n const privateKey = `__${key}`;\n propDesc = propDesc || {\n enumerable: true,\n configurable: true\n };\n const originalSetter = propDesc ? propDesc.set : null;\n propDesc.get = propDesc.get || (function () {\n return this[privateKey];\n });\n propDesc.set = function (newValue) {\n if (originalSetter) {\n originalSetter.call(this, newValue);\n if (this.grid) {\n this.grid.notifyChanges(repaint && !this.grid.isPivot);\n }\n }\n else {\n if (newValue === this[key]) {\n return;\n }\n this[privateKey] = newValue;\n if (this.grid) {\n this.grid.notifyChanges(repaint && !this.grid.isPivot);\n }\n }\n };\n return propDesc;\n };\n}\n\nclass IgxFilterCellTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxFilterCellTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterCellTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxFilterCellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxFilterCellTemplateDirective, selector: \"[igxFilterCellTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterCellTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxFilterCellTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\nclass IgxCellTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxCellTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCellTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxCellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCellTemplateDirective, selector: \"[igxCell]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCellTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCell]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\nclass IgxCellValidationErrorDirective {\n constructor(template) {\n this.template = template;\n }\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxCellValidationErrorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCellValidationErrorDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxCellValidationErrorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCellValidationErrorDirective, selector: \"[igxCellValidationError]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCellValidationErrorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCellValidationError]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\nclass IgxCellHeaderTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxCellHeaderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCellHeaderTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxCellHeaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCellHeaderTemplateDirective, selector: \"[igxHeader]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCellHeaderTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxHeader]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * @hidden\n */\nclass IgxCellFooterTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxCellFooterTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCellFooterTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxCellFooterTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCellFooterTemplateDirective, selector: \"[igxFooter]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCellFooterTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxFooter]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\nclass IgxCellEditorTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxCellEditorTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCellEditorTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxCellEditorTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCellEditorTemplateDirective, selector: \"[igxCellEditor]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCellEditorTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCellEditor]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\nclass IgxCollapsibleIndicatorTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxCollapsibleIndicatorTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCollapsibleIndicatorTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxCollapsibleIndicatorTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCollapsibleIndicatorTemplateDirective, selector: \"[igxCollapsibleIndicator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCollapsibleIndicatorTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxCollapsibleIndicator]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\nclass IgxSummaryTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxSummaryTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSummaryTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxSummaryTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSummaryTemplateDirective, selector: \"[igxSummary]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSummaryTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxSummary]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nclass IgxGridCell {\n /**\n * @hidden\n */\n constructor(grid, row, column) {\n this.grid = grid;\n if (typeof row === 'number') {\n this._rowIndex = row;\n }\n else {\n this._row = row;\n this._rowIndex = row.index;\n }\n if (typeof column === 'string') {\n this._columnField = column;\n }\n else {\n this._column = column;\n }\n }\n /**\n * Returns the row containing the cell.\n * ```typescript\n * let row = this.cell.row;\n * ```\n *\n * @memberof IgxGridCell\n */\n get row() {\n return this._row || this.grid.createRow(this._rowIndex);\n }\n /**\n * Returns the column of the cell.\n * ```typescript\n * let column = this.cell.column;\n * ```\n *\n * @memberof IgxGridCell\n */\n get column() {\n return this._column || this.grid.getColumnByName(this._columnField);\n }\n /**\n * Gets the current edit value while a cell is in edit mode.\n * ```typescript\n * let editValue = this.cell.editValue;\n * ```\n *\n * @memberof IgxGridCell\n */\n get editValue() {\n if (this.isCellInEditMode()) {\n return this.grid.crudService.cell.editValue;\n }\n }\n /**\n * Gets the validation status and errors, if any.\n * ```typescript\n * let validation = this.cell.validation;\n * let errors = validation.errors;\n * ```\n */\n get validation() {\n const form = this.grid.validation.getFormControl(this.row.key, this.column.field);\n return { status: (form === null || form === void 0 ? void 0 : form.status) || 'VALID', errors: form === null || form === void 0 ? void 0 : form.errors };\n }\n /**\n * Sets the current edit value while a cell is in edit mode.\n * Only for cell editing mode.\n * ```typescript\n * this.cell.editValue = value;\n * ```\n *\n * @memberof IgxGridCell\n */\n set editValue(value) {\n if (this.isCellInEditMode()) {\n this.grid.crudService.cell.editValue = value;\n }\n }\n /**\n * Returns whether the cell is editable..\n *\n * @memberof IgxGridCell\n */\n get editable() {\n var _a;\n return this.column.editable && !((_a = this.row) === null || _a === void 0 ? void 0 : _a.disabled);\n }\n /**\n * Gets the width of the cell.\n * ```typescript\n * let cellWidth = this.cell.width;\n * ```\n *\n * @memberof IgxGridCell\n */\n get width() {\n return this.column.width;\n }\n /**\n * Returns the cell value.\n *\n * @memberof IgxGridCell\n */\n get value() {\n var _a, _b;\n // will return undefined for a column layout, because getCellByColumnVisibleIndex may return the column layout at that index.\n // getCellByColumnVisibleIndex is deprecated and will be removed in future version\n return this.column.field ?\n this.column.hasNestedPath ? resolveNestedPath((_a = this.row) === null || _a === void 0 ? void 0 : _a.data, this.column.field) : (_b = this.row) === null || _b === void 0 ? void 0 : _b.data[this.column.field]\n : undefined;\n }\n /**\n * Updates the cell value.\n *\n * @memberof IgxGridCell\n */\n set value(val) {\n this.update(val);\n }\n /**\n * Gets the cell id.\n * A cell in the grid is identified by:\n * - rowID - primaryKey data value or the whole rowData, if the primaryKey is omitted.\n * - rowIndex - the row index\n * - columnID - column index\n *\n * ```typescript\n * let cellID = cell.id;\n * ```\n *\n * @memberof IgxGridCell\n */\n get id() {\n var _a, _b, _c;\n const primaryKey = this.grid.primaryKey;\n const rowID = primaryKey ? (_a = this.row) === null || _a === void 0 ? void 0 : _a.data[primaryKey] : (_b = this.row) === null || _b === void 0 ? void 0 : _b.data;\n return { rowID, columnID: this.column.index, rowIndex: this._rowIndex || ((_c = this.row) === null || _c === void 0 ? void 0 : _c.index) };\n }\n /**\n * Returns if the row is currently in edit mode.\n *\n * @memberof IgxGridCell\n */\n get editMode() {\n return this.isCellInEditMode();\n }\n /**\n * Starts/ends edit mode for the cell.\n *\n * ```typescript\n * cell.editMode = !cell.editMode;\n * ```\n *\n * @memberof IgxGridCell\n */\n set editMode(value) {\n var _a;\n const isInEditMode = this.isCellInEditMode();\n if (!this.row || ((_a = this.row) === null || _a === void 0 ? void 0 : _a.deleted) || isInEditMode === value) {\n return;\n }\n if (this.editable && value) {\n this.endEdit();\n // TODO possibly define similar method in gridAPI, which does not emit event\n this.grid.crudService.enterEditMode(this);\n }\n else {\n this.grid.crudService.endCellEdit();\n }\n this.grid.notifyChanges();\n }\n /**\n * Gets whether the cell is selected.\n * ```typescript\n * let isSelected = this.cell.selected;\n * ```\n *\n *\n * @memberof IgxGridCell\n */\n get selected() {\n return this.grid.selectionService.selected(this.selectionNode);\n }\n /**\n * Selects/deselects the cell.\n * ```typescript\n * this.cell.selected = true.\n * ```\n *\n *\n * @memberof IgxGridCell\n */\n set selected(val) {\n const node = this.selectionNode;\n if (val) {\n this.grid.selectionService.add(node);\n }\n else {\n this.grid.selectionService.remove(node);\n }\n this.grid.notifyChanges();\n }\n get active() {\n var _a;\n const node = this.grid.navigation.activeNode;\n return node ? node.row === ((_a = this.row) === null || _a === void 0 ? void 0 : _a.index) && node.column === this.column.visibleIndex : false;\n }\n /**\n * Updates the cell value.\n *\n * ```typescript\n * cell.update(newValue);\n * ```\n *\n * @memberof IgxGridCell\n */\n update(val) {\n var _a;\n if ((_a = this.row) === null || _a === void 0 ? void 0 : _a.deleted) {\n return;\n }\n this.endEdit();\n const cell = this.isCellInEditMode() ? this.grid.crudService.cell : this.grid.crudService.createCell(this);\n cell.editValue = val;\n this.grid.gridAPI.update_cell(cell);\n this.grid.crudService.endCellEdit();\n this.grid.notifyChanges();\n }\n get selectionNode() {\n var _a;\n return {\n row: (_a = this.row) === null || _a === void 0 ? void 0 : _a.index,\n column: this.column.columnLayoutChild ? this.column.parent.visibleIndex : this.column.visibleIndex,\n layout: this.column.columnLayoutChild ? {\n rowStart: this.column.rowStart,\n colStart: this.column.colStart,\n rowEnd: this.column.rowEnd,\n colEnd: this.column.colEnd,\n columnVisibleIndex: this.column.visibleIndex\n } : null\n };\n }\n isCellInEditMode() {\n if (this.grid.crudService.cellInEditMode) {\n const cellInEditMode = this.grid.crudService.cell.id;\n const isCurrentCell = cellInEditMode.rowID === this.id.rowID &&\n cellInEditMode.rowIndex === this.id.rowIndex &&\n cellInEditMode.columnID === this.id.columnID;\n return isCurrentCell;\n }\n return false;\n }\n endEdit() {\n if (!this.isCellInEditMode()) {\n this.grid.gridAPI.update_cell(this.grid.crudService.cell);\n this.grid.crudService.endCellEdit();\n }\n }\n}\n\nconst DEFAULT_DATE_FORMAT = 'mediumDate';\nconst DEFAULT_TIME_FORMAT$1 = 'mediumTime';\nconst DEFAULT_DATE_TIME_FORMAT$1 = 'medium';\nconst DEFAULT_DIGITS_INFO = '1.0-3';\n/**\n * **Ignite UI for Angular Column** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/grid#columns-configuration)\n *\n * The Ignite UI Column is used within an `igx-grid` element to define what data the column will show. Features such as sorting,\n * filtering & editing are enabled at the column level. You can also provide a template containing custom content inside\n * the column using `ng-template` which will be used for all cells within the column.\n */\nclass IgxColumnComponent {\n /**\n * Sets/gets the `field` value.\n * ```typescript\n * let columnField = this.column.field;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n set field(value) {\n this._field = value;\n this.hasNestedPath = value === null || value === void 0 ? void 0 : value.includes('.');\n }\n get field() {\n return this._field;\n }\n /**\n * Returns if the column is selectable.\n * ```typescript\n * let columnSelectable = this.column.selectable;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get selectable() {\n return this._selectable;\n }\n /**\n * Sets if the column is selectable.\n * Default value is `true`.\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n set selectable(value) {\n this._selectable = value;\n }\n /**\n * Gets whether the column is editable.\n * Default value is `false`.\n * ```typescript\n * let isEditable = this.column.editable;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get editable() {\n // Updating the primary key when grid has transactions (incl. row edit)\n // should not be allowed, as that can corrupt transaction state.\n const rowEditable = this.grid && this.grid.rowEditable;\n const hasTransactions = this.grid && this.grid.transactions.enabled;\n if (this.isPrimaryColumn && (rowEditable || hasTransactions)) {\n return false;\n }\n if (this._editable !== undefined) {\n return this._editable;\n }\n else {\n return rowEditable;\n }\n }\n /**\n * Sets whether the column is editable.\n * ```typescript\n * this.column.editable = true;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n set editable(editable) {\n this._editable = editable;\n }\n /**\n * Gets a value indicating whether the summary for the column is enabled.\n * ```typescript\n * let hasSummary = this.column.hasSummary;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get hasSummary() {\n return this._hasSummary;\n }\n /**\n * Sets a value indicating whether the summary for the column is enabled.\n * Default value is `false`.\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n set hasSummary(value) {\n this._hasSummary = value;\n if (this.grid) {\n this.grid.summaryService.resetSummaryHeight();\n }\n }\n /**\n * Gets whether the column is hidden.\n * ```typescript\n * let isHidden = this.column.hidden;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get hidden() {\n return this._hidden;\n }\n /**\n * Sets the column hidden property.\n * Default value is `false`.\n * ```html\n * \n * ```\n *\n * Two-way data binding.\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n set hidden(value) {\n if (this._hidden !== value) {\n this._hidden = value;\n this.hiddenChange.emit(this._hidden);\n if (this.columnLayoutChild && this.parent.hidden !== value) {\n this.parent.hidden = value;\n return;\n }\n if (this.grid) {\n this.grid.crudService.endEdit(false);\n this.grid.summaryService.resetSummaryHeight();\n this.grid.filteringService.refreshExpressions();\n this.grid.filteringService.hideFilteringRowOnColumnVisibilityChange(this);\n this.grid.notifyChanges();\n }\n }\n }\n /**\n * Returns if the column is selected.\n * ```typescript\n * let isSelected = this.column.selected;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get selected() {\n return this.grid.selectionService.isColumnSelected(this.field);\n }\n /**\n * Select/deselect a column.\n * Default value is `false`.\n * ```typescript\n * this.column.selected = true;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n set selected(value) {\n if (this.selectable && value !== this.selected) {\n if (value) {\n this.grid.selectionService.selectColumnsWithNoEvent([this.field]);\n }\n else {\n this.grid.selectionService.deselectColumnsWithNoEvent([this.field]);\n }\n this.grid.notifyChanges();\n }\n }\n /**\n * Gets the `width` of the column.\n * ```typescript\n * let columnWidth = this.column.width;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get width() {\n const isAutoWidth = this._width && typeof this._width === 'string' && this._width === 'auto';\n if (isAutoWidth) {\n if (!this.autoSize) {\n return 'fit-content';\n }\n else {\n return this.autoSize + 'px';\n }\n }\n return this.widthSetByUser ? this._width : this.defaultWidth;\n }\n /**\n * Sets the `width` of the column.\n * ```html\n * \n * ```\n *\n * Two-way data binding.\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n set width(value) {\n if (value) {\n this._calcWidth = null;\n this.calcPixelWidth = NaN;\n this.widthSetByUser = true;\n // width could be passed as number from the template\n // host bindings are not px affixed so we need to ensure we affix simple number strings\n if (typeof (value) === 'number' || value.match(/^[0-9]*$/)) {\n value = value + 'px';\n }\n if (value === 'fit-content') {\n value = 'auto';\n }\n this._width = value;\n if (this.grid) {\n this.cacheCalcWidth();\n }\n this.widthChange.emit(this._width);\n }\n }\n /**\n * @hidden\n */\n get calcWidth() {\n return this.getCalcWidth();\n }\n /**\n * @hidden\n */\n get maxWidthPx() {\n const gridAvailableSize = this.grid.calcWidth;\n const isPercentageWidth = this.maxWidth && typeof this.maxWidth === 'string' && this.maxWidth.indexOf('%') !== -1;\n return isPercentageWidth ? parseFloat(this.maxWidth) / 100 * gridAvailableSize : parseFloat(this.maxWidth);\n }\n /**\n * @hidden\n */\n get maxWidthPercent() {\n const gridAvailableSize = this.grid.calcWidth;\n const isPercentageWidth = this.maxWidth && typeof this.maxWidth === 'string' && this.maxWidth.indexOf('%') !== -1;\n return isPercentageWidth ? parseFloat(this.maxWidth) : parseFloat(this.maxWidth) / gridAvailableSize * 100;\n }\n /**\n * @hidden\n */\n get minWidthPx() {\n const gridAvailableSize = this.grid.calcWidth;\n const isPercentageWidth = this.minWidth && typeof this.minWidth === 'string' && this.minWidth.indexOf('%') !== -1;\n return isPercentageWidth ? parseFloat(this.minWidth) / 100 * gridAvailableSize : parseFloat(this.minWidth);\n }\n /**\n * @hidden\n */\n get minWidthPercent() {\n const gridAvailableSize = this.grid.calcWidth;\n const isPercentageWidth = this.minWidth && typeof this.minWidth === 'string' && this.minWidth.indexOf('%') !== -1;\n return isPercentageWidth ? parseFloat(this.minWidth) : parseFloat(this.minWidth) / gridAvailableSize * 100;\n }\n /**\n * Sets/gets the minimum `width` of the column.\n * Default value is `88`;\n * ```typescript\n * let columnMinWidth = this.column.minWidth;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n set minWidth(value) {\n const minVal = parseFloat(value);\n if (Number.isNaN(minVal)) {\n return;\n }\n this._defaultMinWidth = value;\n }\n get minWidth() {\n return !this._defaultMinWidth ? this.defaultMinWidth : this._defaultMinWidth;\n }\n /**\n * Gets the column index.\n * ```typescript\n * let columnIndex = this.column.index;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get index() {\n return this.grid._columns.indexOf(this);\n }\n /**\n * Gets whether the column is `pinned`.\n * ```typescript\n * let isPinned = this.column.pinned;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get pinned() {\n return this._pinned;\n }\n /**\n * Sets whether the column is pinned.\n * Default value is `false`.\n * ```html\n * \n * ```\n *\n * Two-way data binding.\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n set pinned(value) {\n if (this._pinned !== value) {\n const isAutoWidth = this.width && typeof this.width === 'string' && this.width === 'fit-content';\n if (this.grid && this.width && (isAutoWidth || !isNaN(parseInt(this.width, 10)))) {\n if (value) {\n this.pin();\n }\n else {\n this.unpin();\n }\n return;\n }\n /* No grid/width available at initialization. `initPinning` in the grid\n will re-init the group (if present)\n */\n this._pinned = value;\n this.pinnedChange.emit(this._pinned);\n }\n }\n /**\n * Gets the column `summaries`.\n * ```typescript\n * let columnSummaries = this.column.summaries;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get summaries() {\n return this._summaries;\n }\n /**\n * Sets the column `summaries`.\n * ```typescript\n * this.column.summaries = IgxNumberSummaryOperand;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n set summaries(classRef) {\n if (isConstructor(classRef)) {\n this._summaries = new classRef();\n }\n if (this.grid) {\n this.grid.summaryService.removeSummariesCachePerColumn(this.field);\n this.grid.summaryPipeTrigger++;\n this.grid.summaryService.resetSummaryHeight();\n }\n }\n /**\n * Gets the column `filters`.\n * ```typescript\n * let columnFilters = this.column.filters'\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get filters() {\n return this._filters;\n }\n /**\n * Sets the column `filters`.\n * ```typescript\n * this.column.filters = IgxBooleanFilteringOperand.instance().\n * ```\n *\n * @memberof IgxColumnComponent\n */\n set filters(instance) {\n this._filters = instance;\n }\n /**\n * Gets the column `sortStrategy`.\n * ```typescript\n * let sortStrategy = this.column.sortStrategy\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get sortStrategy() {\n return this._sortStrategy;\n }\n /**\n * Sets the column `sortStrategy`.\n * ```typescript\n * this.column.sortStrategy = new CustomSortingStrategy().\n * class CustomSortingStrategy extends SortingStrategy {...}\n * ```\n *\n * @memberof IgxColumnComponent\n */\n set sortStrategy(classRef) {\n this._sortStrategy = classRef;\n }\n /**\n * Gets the function that compares values for grouping.\n * ```typescript\n * let groupingComparer = this.column.groupingComparer'\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get groupingComparer() {\n return this._groupingComparer;\n }\n /**\n * Sets a custom function to compare values for grouping.\n * Subsequent values in the sorted data that the function returns 0 for are grouped.\n * ```typescript\n * this.column.groupingComparer = (a: any, b: any, currRec?: any, groupRec?: any) => { return a === b ? 0 : -1; }\n * ```\n *\n * @memberof IgxColumnComponent\n */\n set groupingComparer(funcRef) {\n this._groupingComparer = funcRef;\n }\n /**\n * Gets the default minimum `width` of the column.\n * ```typescript\n * let defaultMinWidth = this.column.defaultMinWidth;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get defaultMinWidth() {\n if (!this.grid) {\n return '80';\n }\n switch (this.grid.displayDensity) {\n case DisplayDensity.cosy:\n return '64';\n case DisplayDensity.compact:\n return '56';\n default:\n return '80';\n }\n }\n /**\n * Returns a reference to the `summaryTemplate`.\n * ```typescript\n * let summaryTemplate = this.column.summaryTemplate;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get summaryTemplate() {\n return this._summaryTemplate;\n }\n /**\n * Sets the summary template.\n * ```html\n * \n *

    {{ summaryResults[0].label }}: {{ summaryResults[0].summaryResult }}

    \n *

    {{ summaryResults[1].label }}: {{ summaryResults[1].summaryResult }}

    \n *
    \n * ```\n * ```typescript\n * @ViewChild(\"'summaryTemplate'\", {read: TemplateRef })\n * public summaryTemplate: TemplateRef;\n * this.column.summaryTemplate = this.summaryTemplate;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n set summaryTemplate(template) {\n this._summaryTemplate = template;\n }\n /**\n * Returns a reference to the `bodyTemplate`.\n * ```typescript\n * let bodyTemplate = this.column.bodyTemplate;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get bodyTemplate() {\n return this._bodyTemplate;\n }\n /**\n * Sets the body template.\n * ```html\n * \n *
    \n * {{val}} \n *
    \n *
    \n * ```\n * ```typescript\n * @ViewChild(\"'bodyTemplate'\", {read: TemplateRef })\n * public bodyTemplate: TemplateRef;\n * this.column.bodyTemplate = this.bodyTemplate;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n set bodyTemplate(template) {\n this._bodyTemplate = template;\n }\n /**\n * Returns a reference to the header template.\n * ```typescript\n * let headerTemplate = this.column.headerTemplate;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get headerTemplate() {\n return this._headerTemplate;\n }\n /**\n * Sets the header template.\n * Note that the column header height is fixed and any content bigger than it will be cut off.\n * ```html\n * \n *
    \n * {{column.field}}\n *
    \n *
    \n * ```\n * ```typescript\n * @ViewChild(\"'headerTemplate'\", {read: TemplateRef })\n * public headerTemplate: TemplateRef;\n * this.column.headerTemplate = this.headerTemplate;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n set headerTemplate(template) {\n this._headerTemplate = template;\n }\n /**\n * Returns a reference to the inline editor template.\n * ```typescript\n * let inlineEditorTemplate = this.column.inlineEditorTemplate;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get inlineEditorTemplate() {\n return this._inlineEditorTemplate;\n }\n /**\n * Sets the inline editor template.\n * ```html\n * \n * \n * \n * ```\n * ```typescript\n * @ViewChild(\"'inlineEditorTemplate'\", {read: TemplateRef })\n * public inlineEditorTemplate: TemplateRef;\n * this.column.inlineEditorTemplate = this.inlineEditorTemplate;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n set inlineEditorTemplate(template) {\n this._inlineEditorTemplate = template;\n }\n /**\n * Returns a reference to the validation error template.\n * ```typescript\n * let errorTemplate = this.column.errorTemplate;\n * ```\n */\n get errorTemplate() {\n return this._errorTemplate;\n }\n /**\n * Sets the error template.\n * ```html\n * \n *
    \n * This name is forbidden.\n *
    \n *
    \n * ```\n * ```typescript\n * @ViewChild(\"'errorTemplate'\", {read: TemplateRef })\n * public errorTemplate: TemplateRef;\n * this.column.errorTemplate = this.errorTemplate;\n * ```\n */\n set errorTemplate(template) {\n this._errorTemplate = template;\n }\n /**\n * Returns a reference to the `filterCellTemplate`.\n * ```typescript\n * let filterCellTemplate = this.column.filterCellTemplate;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get filterCellTemplate() {\n return this._filterCellTemplate;\n }\n /**\n * Sets the quick filter template.\n * ```html\n * \n * \n * \n * ```\n * ```typescript\n * @ViewChild(\"'filterCellTemplate'\", {read: TemplateRef })\n * public filterCellTemplate: TemplateRef;\n * this.column.filterCellTemplate = this.filterCellTemplate;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n set filterCellTemplate(template) {\n this._filterCellTemplate = template;\n }\n /**\n * Gets the cells of the column.\n * ```typescript\n * let columnCells = this.column.cells;\n * ```\n *\n */\n get cells() {\n return this.grid.dataView\n .map((rec, index) => {\n if (!this.grid.isGroupByRecord(rec) && !this.grid.isSummaryRow(rec)) {\n this.grid.pagingMode === 1 && this.grid.page !== 0 ? index = index + this.grid.perPage * this.grid.page : index = this.grid.dataRowList.first.index + index;\n const cell = new IgxGridCell(this.grid, index, this.field);\n return cell;\n }\n }).filter(cell => cell);\n }\n /**\n * @hidden @internal\n */\n get _cells() {\n return this.grid.rowList.filter((row) => row instanceof IgxRowDirective)\n .map((row) => {\n if (row._cells) {\n return row._cells.filter((cell) => cell.columnIndex === this.index);\n }\n }).reduce((a, b) => a.concat(b), []);\n }\n /**\n * Gets the column visible index.\n * If the column is not visible, returns `-1`.\n * ```typescript\n * let visibleColumnIndex = this.column.visibleIndex;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get visibleIndex() {\n if (!isNaN(this._vIndex)) {\n return this._vIndex;\n }\n const unpinnedColumns = this.grid.unpinnedColumns.filter(c => !c.columnGroup);\n const pinnedColumns = this.grid.pinnedColumns.filter(c => !c.columnGroup);\n let col = this;\n let vIndex = -1;\n if (this.columnGroup) {\n col = this.allChildren.filter(c => !c.columnGroup && !c.hidden)[0];\n }\n if (this.columnLayoutChild) {\n return this.parent.childrenVisibleIndexes.find(x => x.column === this).index;\n }\n if (!this.pinned) {\n const indexInCollection = unpinnedColumns.indexOf(col);\n vIndex = indexInCollection === -1 ?\n -1 :\n (this.grid.isPinningToStart ?\n pinnedColumns.length + indexInCollection :\n indexInCollection);\n }\n else {\n const indexInCollection = pinnedColumns.indexOf(col);\n vIndex = this.grid.isPinningToStart ?\n indexInCollection :\n unpinnedColumns.length + indexInCollection;\n }\n this._vIndex = vIndex;\n return vIndex;\n }\n /**\n * Returns a boolean indicating if the column is a `ColumnGroup`.\n * ```typescript\n * let columnGroup = this.column.columnGroup;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get columnGroup() {\n return false;\n }\n /**\n * Returns a boolean indicating if the column is a `ColumnLayout` for multi-row layout.\n * ```typescript\n * let columnGroup = this.column.columnGroup;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get columnLayout() {\n return false;\n }\n /**\n * Returns a boolean indicating if the column is a child of a `ColumnLayout` for multi-row layout.\n * ```typescript\n * let columnLayoutChild = this.column.columnLayoutChild;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get columnLayoutChild() {\n return this.parent && this.parent.columnLayout;\n }\n /**\n * Returns the children columns collection.\n * Returns an empty array if the column does not contain children columns.\n * ```typescript\n * let childrenColumns = this.column.allChildren;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get allChildren() {\n return [];\n }\n /**\n * Returns the level of the column in a column group.\n * Returns `0` if the column doesn't have a `parent`.\n * ```typescript\n * let columnLevel = this.column.level;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get level() {\n let ptr = this.parent;\n let lvl = 0;\n while (ptr) {\n lvl++;\n ptr = ptr.parent;\n }\n return lvl;\n }\n get isLastPinned() {\n return this.grid.isPinningToStart &&\n this.grid.pinnedColumns[this.grid.pinnedColumns.length - 1] === this;\n }\n get isFirstPinned() {\n const pinnedCols = this.grid.pinnedColumns.filter(x => !x.columnGroup);\n return !this.grid.isPinningToStart && pinnedCols[0] === this;\n }\n get rightPinnedOffset() {\n return this.pinned && !this.grid.isPinningToStart ?\n -this.grid.pinnedWidth - this.grid.headerFeaturesWidth + 'px' :\n null;\n }\n get gridRowSpan() {\n return this.rowEnd && this.rowStart ? this.rowEnd - this.rowStart : 1;\n }\n get gridColumnSpan() {\n return this.colEnd && this.colStart ? this.colEnd - this.colStart : 1;\n }\n /**\n * Indicates whether the column will be visible when its parent is collapsed.\n * ```html\n * \n * \n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n set visibleWhenCollapsed(value) {\n this._visibleWhenCollapsed = value;\n this.visibleWhenCollapsedChange.emit(this._visibleWhenCollapsed);\n if (this.parent) {\n this.parent.setExpandCollapseState();\n }\n }\n get visibleWhenCollapsed() {\n return this._visibleWhenCollapsed;\n }\n /**\n * @remarks\n * Pass optional parameters for DatePipe and/or DecimalPipe to format the display value for date and numeric columns.\n * Accepts an `IColumnPipeArgs` object with any of the `format`, `timezone` and `digitsInfo` properties.\n * For more details see https://angular.io/api/common/DatePipe and https://angular.io/api/common/DecimalPipe\n * @example\n * ```typescript\n * const pipeArgs: IColumnPipeArgs = {\n * format: 'longDate',\n * timezone: 'UTC',\n * digitsInfo: '1.1-2'\n * }\n * ```\n * ```html\n * \n * \n * ```\n * @memberof IgxColumnComponent\n */\n set pipeArgs(value) {\n this._columnPipeArgs = Object.assign(this._columnPipeArgs, value);\n this.grid.summaryService.clearSummaryCache();\n this.grid.pipeTrigger++;\n }\n get pipeArgs() {\n return this._columnPipeArgs;\n }\n /**\n * @hidden\n * @internal\n */\n get collapsible() {\n return false;\n }\n set collapsible(_value) { }\n /**\n * @hidden\n * @internal\n */\n get expanded() {\n return true;\n }\n set expanded(_value) { }\n /**\n * Returns the filteringExpressionsTree of the column.\n * ```typescript\n * let tree = this.column.filteringExpressionsTree;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get filteringExpressionsTree() {\n return this.grid.filteringExpressionsTree.find(this.field);\n }\n /**\n * @hidden\n */\n get isPrimaryColumn() {\n return this.field !== undefined && this.grid !== undefined && this.field === this.grid.primaryKey;\n }\n constructor(grid, _validators, cdr, platform) {\n this.grid = grid;\n this._validators = _validators;\n this.cdr = cdr;\n this.platform = platform;\n /**\n * @hidden @internal\n */\n this.validators = [];\n /**\n * Sets/gets the `header` value.\n * ```typescript\n * let columnHeader = this.column.header;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.header = '';\n /**\n * Sets/gets the `title` value.\n * ```typescript\n * let title = this.column.title;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.title = '';\n /**\n * Sets/gets whether the column is sortable.\n * Default value is `false`.\n * ```typescript\n * let isSortable = this.column.sortable;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.sortable = false;\n /**\n * Sets/gets whether the column is groupable.\n * Default value is `false`.\n * ```typescript\n * let isGroupable = this.column.groupable;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.groupable = false;\n /**\n * Sets/gets whether the column is filterable.\n * Default value is `true`.\n * ```typescript\n * let isFilterable = this.column.filterable;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.filterable = true;\n /**\n * Sets/gets whether the column is resizable.\n * Default value is `false`.\n * ```typescript\n * let isResizable = this.column.resizable;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.resizable = false;\n /**\n * Sets/gets whether the column header is included in autosize logic.\n * Useful when template for a column header is sized based on parent, for example a default `div`.\n * Default value is `false`.\n * ```typescript\n * let isResizable = this.column.resizable;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.autosizeHeader = true;\n /**\n * @hidden\n */\n this.hiddenChange = new EventEmitter();\n /** @hidden */\n this.expandedChange = new EventEmitter();\n /** @hidden */\n this.collapsibleChange = new EventEmitter();\n /** @hidden */\n this.visibleWhenCollapsedChange = new EventEmitter();\n /** @hidden */\n this.columnChange = new EventEmitter();\n /**\n * Gets whether the hiding is disabled.\n * ```typescript\n * let isHidingDisabled = this.column.disableHiding;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.disableHiding = false;\n /**\n * Gets whether the pinning is disabled.\n * ```typescript\n * let isPinningDisabled = this.column.disablePinning;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.disablePinning = false;\n /**\n * @deprecated in version 13.1.0. Use `IgxGridComponent.moving` instead.\n *\n * Sets/gets whether the column is movable.\n * Default value is `false`.\n *\n * ```typescript\n * let isMovable = this.column.movable;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.movable = false;\n /**\n * Sets/gets the class selector of the column header.\n * ```typescript\n * let columnHeaderClass = this.column.headerClasses;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.headerClasses = '';\n /**\n * Sets conditional style properties on the column header.\n * Similar to `ngStyle` it accepts an object literal where the keys are\n * the style properties and the value is the expression to be evaluated.\n * ```typescript\n * styles = {\n * background: 'royalblue',\n * color: (column) => column.pinned ? 'red': 'inherit'\n * }\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.headerStyles = null;\n /**\n * Sets/gets the class selector of the column group header.\n * ```typescript\n * let columnHeaderClass = this.column.headerGroupClasses;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.headerGroupClasses = '';\n /**\n * Sets conditional style properties on the column header group wrapper.\n * Similar to `ngStyle` it accepts an object literal where the keys are\n * the style properties and the value is the expression to be evaluated.\n * ```typescript\n * styles = {\n * background: 'royalblue',\n * color: (column) => column.pinned ? 'red': 'inherit'\n * }\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.headerGroupStyles = null;\n /**\n * Sets conditional style properties on the column cells.\n * Similar to `ngStyle` it accepts an object literal where the keys are\n * the style properties and the value is the expression to be evaluated.\n * As with `cellClasses` it accepts a callback function.\n * ```typescript\n * styles = {\n * background: 'royalblue',\n * color: (rowData, columnKey, cellValue, rowIndex) => value.startsWith('Important') ? 'red': 'inherit'\n * }\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.cellStyles = null;\n /**\n * Sets/gets whether the column filtering should be case sensitive.\n * Default value is `true`.\n * ```typescript\n * let filteringIgnoreCase = this.column.filteringIgnoreCase;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.filteringIgnoreCase = true;\n /**\n * Sets/gets whether the column sorting should be case sensitive.\n * Default value is `true`.\n * ```typescript\n * let sortingIgnoreCase = this.column.sortingIgnoreCase;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.sortingIgnoreCase = true;\n /**\n * Sets/gets whether the column is `searchable`.\n * Default value is `true`.\n * ```typescript\n * let isSearchable = this.column.searchable';\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.searchable = true;\n /**\n * Sets/gets the data type of the column values.\n * Default value is `string`.\n * ```typescript\n * let columnDataType = this.column.dataType;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.dataType = GridColumnDataType.String;\n /**\n * @hidden\n */\n this.widthChange = new EventEmitter();\n /**\n * @hidden\n */\n this.pinnedChange = new EventEmitter();\n /**\n * @hidden\n * @internal\n */\n this.defaultTimeFormat = 'hh:mm:ss tt';\n /**\n * @hidden\n * @internal\n */\n this.defaultDateTimeFormat = 'dd/MM/yyyy HH:mm:ss tt';\n /**\n * Sets/gets the parent column.\n * ```typescript\n * let parentColumn = this.column.parent;\n * ```\n * ```typescript\n * this.column.parent = higherLevelColumn;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n this.parent = null;\n /**\n * @hidden\n */\n this.destroy$ = new Subject();\n /**\n * @hidden\n */\n this._applySelectableClass = false;\n this._vIndex = NaN;\n /**\n * @hidden\n */\n this._pinned = false;\n /**\n * @hidden\n */\n this._summaries = null;\n /**\n * @hidden\n */\n this._filters = null;\n /**\n * @hidden\n */\n this._sortStrategy = DefaultSortingStrategy.instance();\n /**\n * @hidden\n */\n this._hidden = false;\n /**\n * @hidden\n */\n this._disablePinning = false;\n /**\n * @hidden\n */\n this._defaultMinWidth = '';\n /**\n * @hidden\n */\n this._hasSummary = false;\n /**\n * @hidden\n */\n this._collapsible = false;\n /**\n * @hidden\n */\n this._expanded = true;\n /**\n * @hidden\n */\n this._selectable = true;\n this._calcWidth = null;\n this._columnPipeArgs = { digitsInfo: DEFAULT_DIGITS_INFO };\n this.validators = _validators;\n }\n /**\n * @hidden\n * @internal\n */\n resetCaches() {\n this._vIndex = NaN;\n if (this.grid) {\n this.cacheCalcWidth();\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n if (this.summaryTemplateDirective) {\n this._summaryTemplate = this.summaryTemplateDirective.template;\n }\n if (this.cellTemplate) {\n this._bodyTemplate = this.cellTemplate.template;\n }\n if (this.cellValidationErrorTemplate) {\n this._errorTemplate = this.cellValidationErrorTemplate.template;\n }\n if (this.headTemplate && this.headTemplate.length) {\n this._headerTemplate = this.headTemplate.toArray()[0].template;\n }\n if (this.editorTemplate) {\n this._inlineEditorTemplate = this.editorTemplate.template;\n }\n if (this.filterCellTemplateDirective) {\n this._filterCellTemplate = this.filterCellTemplateDirective.template;\n }\n if (!this._columnPipeArgs.format) {\n this._columnPipeArgs.format = this.dataType === GridColumnDataType.Time ?\n DEFAULT_TIME_FORMAT$1 : this.dataType === GridColumnDataType.DateTime ?\n DEFAULT_DATE_TIME_FORMAT$1 : DEFAULT_DATE_FORMAT;\n }\n if (!this.summaries) {\n switch (this.dataType) {\n case GridColumnDataType.Number:\n case GridColumnDataType.Currency:\n case GridColumnDataType.Percent:\n this.summaries = IgxNumberSummaryOperand;\n break;\n case GridColumnDataType.Date:\n case GridColumnDataType.DateTime:\n this.summaries = IgxDateSummaryOperand;\n break;\n case GridColumnDataType.Time:\n this.summaries = IgxTimeSummaryOperand;\n break;\n case GridColumnDataType.String:\n case GridColumnDataType.Boolean:\n default:\n this.summaries = IgxSummaryOperand;\n break;\n }\n }\n if (!this.filters) {\n switch (this.dataType) {\n case GridColumnDataType.Boolean:\n this.filters = IgxBooleanFilteringOperand.instance();\n break;\n case GridColumnDataType.Number:\n case GridColumnDataType.Currency:\n case GridColumnDataType.Percent:\n this.filters = IgxNumberFilteringOperand.instance();\n break;\n case GridColumnDataType.Date:\n this.filters = IgxDateFilteringOperand.instance();\n break;\n case GridColumnDataType.Time:\n this.filters = IgxTimeFilteringOperand.instance();\n break;\n case GridColumnDataType.DateTime:\n this.filters = IgxDateTimeFilteringOperand.instance();\n break;\n case GridColumnDataType.Image:\n this.filterable = false;\n break;\n case GridColumnDataType.String:\n default:\n this.filters = IgxStringFilteringOperand.instance();\n break;\n }\n }\n }\n /**\n * @hidden\n */\n getGridTemplate(isRow) {\n if (isRow) {\n const rowsCount = !this.grid.isPivot ? this.grid.multiRowLayoutRowSize : this.children.length - 1;\n return `repeat(${rowsCount},1fr)`;\n }\n else {\n return this.getColumnSizesString(this.children);\n }\n }\n getInitialChildColumnSizes(children) {\n const columnSizes = [];\n // find the smallest col spans\n children.forEach(col => {\n if (!col.colStart) {\n return;\n }\n const newWidthSet = col.widthSetByUser && columnSizes[col.colStart - 1] && !columnSizes[col.colStart - 1].widthSetByUser;\n const newSpanSmaller = columnSizes[col.colStart - 1] && columnSizes[col.colStart - 1].colSpan > col.gridColumnSpan;\n const bothWidthsSet = col.widthSetByUser && columnSizes[col.colStart - 1] && columnSizes[col.colStart - 1].widthSetByUser;\n const bothWidthsNotSet = !col.widthSetByUser && columnSizes[col.colStart - 1] && !columnSizes[col.colStart - 1].widthSetByUser;\n if (columnSizes[col.colStart - 1] === undefined) {\n // If nothing is defined yet take any column at first\n // We use colEnd to know where the column actually ends, because not always it starts where we have it set in columnSizes.\n columnSizes[col.colStart - 1] = {\n ref: col,\n width: col.width === 'fit-content' ? col.autoSize :\n col.widthSetByUser || this.grid.columnWidthSetByUser ? parseInt(col.calcWidth, 10) : null,\n colSpan: col.gridColumnSpan,\n colEnd: col.colStart + col.gridColumnSpan,\n widthSetByUser: col.widthSetByUser\n };\n }\n else if (newWidthSet || (newSpanSmaller && ((bothWidthsSet) || (bothWidthsNotSet)))) {\n // If a column is set already it should either not have width defined or have width with bigger span than the new one.\n /**\n * If replaced column has bigger span, we want to fill the remaining columns\n * that the replacing column does not fill with the old one.\n */\n if (bothWidthsSet && newSpanSmaller) {\n // Start from where the new column set would end and apply the old column to the rest depending on how much it spans.\n // We have not yet replaced it so we can use it directly from the columnSizes collection.\n // This is where colEnd is used because the colStart of the old column is not actually i + 1.\n for (let i = col.colStart - 1 + col.gridColumnSpan; i < columnSizes[col.colStart - 1].colEnd - 1; i++) {\n if (!columnSizes[i] || !columnSizes[i].widthSetByUser) {\n columnSizes[i] = columnSizes[col.colStart - 1];\n }\n else {\n break;\n }\n }\n }\n // Replace the old column with the new one.\n columnSizes[col.colStart - 1] = {\n ref: col,\n width: col.width === 'fit-content' ? col.autoSize :\n col.widthSetByUser || this.grid.columnWidthSetByUser ? parseInt(col.calcWidth, 10) : null,\n colSpan: col.gridColumnSpan,\n colEnd: col.colStart + col.gridColumnSpan,\n widthSetByUser: col.widthSetByUser\n };\n }\n else if (bothWidthsSet && columnSizes[col.colStart - 1].colSpan < col.gridColumnSpan) {\n // If the column already in the columnSizes has smaller span, we still need to fill any empty places with the current col.\n // Start from where the smaller column set would end and apply the bigger column to the rest depending on how much it spans.\n // Since here we do not have it in columnSizes we set it as a new column keeping the same colSpan.\n for (let i = col.colStart - 1 + columnSizes[col.colStart - 1].colSpan; i < col.colStart - 1 + col.gridColumnSpan; i++) {\n if (!columnSizes[i] || !columnSizes[i].widthSetByUser) {\n columnSizes[i] = {\n ref: col,\n width: col.width === 'fit-content' ? col.autoSize :\n col.widthSetByUser || this.grid.columnWidthSetByUser ? parseInt(col.calcWidth, 10) : null,\n colSpan: col.gridColumnSpan,\n colEnd: col.colStart + col.gridColumnSpan,\n widthSetByUser: col.widthSetByUser\n };\n }\n else {\n break;\n }\n }\n }\n });\n // Flatten columnSizes so there are not columns with colSpan > 1\n for (let i = 0; i < columnSizes.length; i++) {\n if (columnSizes[i] && columnSizes[i].colSpan > 1) {\n let j = 1;\n // Replace all empty places depending on how much the current column spans starting from next col.\n for (; j < columnSizes[i].colSpan && i + j + 1 < columnSizes[i].colEnd; j++) {\n if (columnSizes[i + j] &&\n ((!columnSizes[i].width && columnSizes[i + j].width) ||\n (!columnSizes[i].width && !columnSizes[i + j].width && columnSizes[i + j].colSpan <= columnSizes[i].colSpan) ||\n (!!columnSizes[i + j].width && columnSizes[i + j].colSpan <= columnSizes[i].colSpan))) {\n // If we reach an already defined column that has width and the current doesn't have or\n // if the reached column has bigger colSpan we stop.\n break;\n }\n else {\n const width = columnSizes[i].widthSetByUser ?\n columnSizes[i].width / columnSizes[i].colSpan :\n columnSizes[i].width;\n columnSizes[i + j] = {\n ref: columnSizes[i].ref,\n width,\n colSpan: 1,\n colEnd: columnSizes[i].colEnd,\n widthSetByUser: columnSizes[i].widthSetByUser\n };\n }\n }\n // Update the current column width so it is divided between all columns it spans and set it to 1.\n columnSizes[i].width = columnSizes[i].widthSetByUser ?\n columnSizes[i].width / columnSizes[i].colSpan :\n columnSizes[i].width;\n columnSizes[i].colSpan = 1;\n // Update the index based on how much we have replaced. Subtract 1 because we started from 1.\n i += j - 1;\n }\n }\n return columnSizes;\n }\n getFilledChildColumnSizes(children) {\n const columnSizes = this.getInitialChildColumnSizes(children);\n // fill the gaps if there are any\n const result = [];\n for (const size of columnSizes) {\n if (size && !!size.width) {\n result.push(size.width + 'px');\n }\n else {\n result.push(parseInt(this.grid.getPossibleColumnWidth(), 10) + 'px');\n }\n }\n return result;\n }\n getResizableColUnderEnd() {\n if (this.columnLayout || !this.columnLayoutChild || this.columnGroup) {\n return [{ target: this, spanUsed: 1 }];\n }\n const columnSized = this.getInitialChildColumnSizes(this.parent.children);\n const targets = [];\n const colEnd = this.colEnd ? this.colEnd : this.colStart + 1;\n for (let i = 0; i < columnSized.length; i++) {\n if (this.colStart <= i + 1 && i + 1 < colEnd) {\n targets.push({ target: columnSized[i].ref, spanUsed: 1 });\n }\n }\n const targetsSquashed = [];\n for (const target of targets) {\n if (targetsSquashed.length && targetsSquashed[targetsSquashed.length - 1].target.field === target.target.field) {\n targetsSquashed[targetsSquashed.length - 1].spanUsed++;\n }\n else {\n targetsSquashed.push(target);\n }\n }\n return targetsSquashed;\n }\n /**\n * Pins the column at the provided index in the pinned area.\n * Defaults to index `0` if not provided, or to the initial index in the pinned area.\n * Returns `true` if the column is successfully pinned. Returns `false` if the column cannot be pinned.\n * Column cannot be pinned if:\n * - Is already pinned\n * - index argument is out of range\n * - The pinned area exceeds 80% of the grid width\n * ```typescript\n * let success = this.column.pin();\n * ```\n *\n * @memberof IgxColumnComponent\n */\n pin(index) {\n // TODO: Probably should the return type of the old functions\n // should be moved as a event parameter.\n const grid = this.grid;\n if (this._pinned) {\n return false;\n }\n if (this.parent && !this.parent.pinned) {\n return this.topLevelParent.pin(index);\n }\n const hasIndex = index !== undefined;\n if (hasIndex && (index < 0 || index > grid.pinnedColumns.length)) {\n return false;\n }\n if (!this.parent && !this.pinnable) {\n return false;\n }\n const rootPinnedCols = grid._pinnedColumns.filter((c) => c.level === 0);\n index = hasIndex ? index : rootPinnedCols.length;\n const args = { column: this, insertAtIndex: index, isPinned: false, cancel: false };\n this.grid.columnPin.emit(args);\n if (args.cancel) {\n return;\n }\n this.grid.crudService.endEdit(false);\n this._pinned = true;\n this.pinnedChange.emit(this._pinned);\n // it is possible that index is the last position, so will need to find target column by [index-1]\n const targetColumn = args.insertAtIndex === grid._pinnedColumns.length ?\n grid._pinnedColumns[args.insertAtIndex - 1] : grid._pinnedColumns[args.insertAtIndex];\n if (grid._pinnedColumns.indexOf(this) === -1) {\n if (!grid.hasColumnGroups) {\n grid._pinnedColumns.splice(args.insertAtIndex, 0, this);\n }\n else {\n // insert based only on root collection\n rootPinnedCols.splice(args.insertAtIndex, 0, this);\n let allPinned = [];\n // re-create hierarchy\n rootPinnedCols.forEach(group => {\n allPinned.push(group);\n allPinned = allPinned.concat(group.allChildren);\n });\n grid._pinnedColumns = allPinned;\n }\n if (grid._unpinnedColumns.indexOf(this) !== -1) {\n const childrenCount = this.allChildren.length;\n grid._unpinnedColumns.splice(grid._unpinnedColumns.indexOf(this), 1 + childrenCount);\n }\n }\n if (hasIndex) {\n grid._moveColumns(this, targetColumn);\n }\n if (this.columnGroup) {\n this.allChildren.forEach(child => child.pin());\n grid.reinitPinStates();\n }\n grid.resetCaches();\n grid.notifyChanges();\n if (this.columnLayoutChild) {\n this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());\n }\n this.grid.filteringService.refreshExpressions();\n const eventArgs = { column: this, insertAtIndex: index, isPinned: true };\n this.grid.columnPinned.emit(eventArgs);\n return true;\n }\n /**\n * Unpins the column and place it at the provided index in the unpinned area.\n * Defaults to index `0` if not provided, or to the initial index in the unpinned area.\n * Returns `true` if the column is successfully unpinned. Returns `false` if the column cannot be unpinned.\n * Column cannot be unpinned if:\n * - Is already unpinned\n * - index argument is out of range\n * ```typescript\n * let success = this.column.unpin();\n * ```\n *\n * @memberof IgxColumnComponent\n */\n unpin(index) {\n const grid = this.grid;\n if (!this._pinned) {\n return false;\n }\n if (this.parent && this.parent.pinned) {\n return this.topLevelParent.unpin(index);\n }\n const hasIndex = index !== undefined;\n if (hasIndex && (index < 0 || index > grid._unpinnedColumns.length)) {\n return false;\n }\n // estimate the exact index at which column will be inserted\n // takes into account initial unpinned index of the column\n if (!hasIndex) {\n const indices = grid.unpinnedColumns.map(col => col.index);\n indices.push(this.index);\n indices.sort((a, b) => a - b);\n index = indices.indexOf(this.index);\n }\n const args = { column: this, insertAtIndex: index, isPinned: true, cancel: false };\n this.grid.columnPin.emit(args);\n if (args.cancel) {\n return;\n }\n this.grid.crudService.endEdit(false);\n this._pinned = false;\n this.pinnedChange.emit(this._pinned);\n // it is possible that index is the last position, so will need to find target column by [index-1]\n const targetColumn = args.insertAtIndex === grid._unpinnedColumns.length ?\n grid._unpinnedColumns[args.insertAtIndex - 1] : grid._unpinnedColumns[args.insertAtIndex];\n if (!hasIndex) {\n grid._unpinnedColumns.splice(index, 0, this);\n if (grid._pinnedColumns.indexOf(this) !== -1) {\n grid._pinnedColumns.splice(grid._pinnedColumns.indexOf(this), 1);\n }\n }\n if (hasIndex) {\n grid.moveColumn(this, targetColumn);\n }\n if (this.columnGroup) {\n this.allChildren.forEach(child => child.unpin());\n }\n grid.reinitPinStates();\n grid.resetCaches();\n grid.notifyChanges();\n if (this.columnLayoutChild) {\n this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());\n }\n this.grid.filteringService.refreshExpressions();\n this.grid.columnPinned.emit({ column: this, insertAtIndex: index, isPinned: false });\n return true;\n }\n /**\n * Moves a column to the specified visible index.\n * If passed index is invalid, or if column would receive a different visible index after moving, moving is not performed.\n * If passed index would move the column to a different column group. moving is not performed.\n *\n * @example\n * ```typescript\n * column.move(index);\n * ```\n * @memberof IgxColumnComponent\n */\n move(index) {\n let target;\n let columns = this.grid.columns.filter(c => c.visibleIndex > -1);\n // grid last visible index\n const li = columns.map(c => c.visibleIndex).reduce((a, b) => Math.max(a, b));\n const parent = this.parent;\n const isPreceding = this.visibleIndex < index;\n if (index === this.visibleIndex || index < 0 || index > li) {\n return;\n }\n if (parent) {\n columns = columns.filter(c => c.level >= this.level && c !== this && c.parent !== this &&\n c.topLevelParent === this.topLevelParent);\n }\n /* eslint-disable max-len */\n // If isPreceding, find a target such that when the current column is placed after it, current colummn will receive a visibleIndex === index. This takes into account visible children of the columns.\n // If !isPreceding, finds a column of the same level and visible index that equals the passed index agument (c.visibleIndex === index). No need to consider the children here.\n /* eslint-enable max-len */\n if (isPreceding) {\n columns = columns.filter(c => c.visibleIndex > this.visibleIndex);\n target = columns.find(c => c.level === this.level && c.visibleIndex + c.calcChildren() - this.calcChildren() === index);\n }\n else {\n columns = columns.filter(c => c.visibleIndex < this.visibleIndex);\n target = columns.find(c => c.level === this.level && c.visibleIndex === index);\n }\n if (!target || (target.pinned && this.disablePinning)) {\n return;\n }\n const pos = isPreceding ? DropPosition.AfterDropTarget : DropPosition.BeforeDropTarget;\n this.grid.moveColumn(this, target, pos);\n }\n /**\n * No children for the column, so will returns 1 or 0, if the column is hidden.\n *\n * @hidden\n */\n calcChildren() {\n const children = this.hidden ? 0 : 1;\n return children;\n }\n /**\n * Toggles column vibisility and emits the respective event.\n *\n * @hidden\n */\n toggleVisibility(value) {\n const newValue = value !== null && value !== void 0 ? value : !this.hidden;\n const eventArgs = { column: this, newValue, cancel: false };\n this.grid.columnVisibilityChanging.emit(eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.hidden = newValue;\n this.grid.columnVisibilityChanged.emit({ column: this, newValue });\n }\n /**\n * Returns a reference to the top level parent column.\n * ```typescript\n * let topLevelParent = this.column.topLevelParent;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get topLevelParent() {\n let parent = this.parent;\n while (parent && parent.parent) {\n parent = parent.parent;\n }\n return parent;\n }\n /**\n * Returns a reference to the header of the column.\n * ```typescript\n * let column = this.grid.columnList.filter(c => c.field === 'ID')[0];\n * let headerCell = column.headerCell;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get headerCell() {\n return this.grid.headerCellList.find((header) => header.column === this);\n }\n /**\n * Returns a reference to the filter cell of the column.\n * ```typescript\n * let column = this.grid.columnList.filter(c => c.field === 'ID')[0];\n * let filterell = column.filterell;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get filterCell() {\n return this.grid.filterCellList.find((filterCell) => filterCell.column === this);\n }\n /**\n * Returns a reference to the header group of the column.\n *\n * @memberof IgxColumnComponent\n */\n get headerGroup() {\n return this.grid.headerGroupsList.find(group => group.column === this);\n }\n /**\n * Autosize the column to the longest currently visible cell value, including the header cell.\n * ```typescript\n * @ViewChild('grid') grid: IgxGridComponent;\n * let column = this.grid.columnList.filter(c => c.field === 'ID')[0];\n * column.autosize();\n * ```\n *\n * @memberof IgxColumnComponent\n * @param byHeaderOnly Set if column should be autosized based only on the header content.\n */\n autosize(byHeaderOnly = false) {\n if (!this.columnGroup) {\n this.width = this.getAutoSize(byHeaderOnly);\n this.grid.reflow();\n }\n }\n /**\n * @hidden\n */\n getAutoSize(byHeader = false) {\n const size = !byHeader ? this.getLargestCellWidth() :\n (Object.values(this.getHeaderCellWidths()).reduce((a, b) => a + b) + 'px');\n const isPercentageWidth = this.width && typeof this.width === 'string' && this.width.indexOf('%') !== -1;\n let newWidth;\n if (isPercentageWidth) {\n const gridAvailableSize = this.grid.calcWidth;\n const percentageSize = parseFloat(size) / gridAvailableSize * 100;\n newWidth = percentageSize + '%';\n }\n else {\n newWidth = size;\n }\n const maxWidth = isPercentageWidth ? this.maxWidthPercent : this.maxWidthPx;\n const minWidth = isPercentageWidth ? this.minWidthPercent : this.minWidthPx;\n if (this.maxWidth && (parseFloat(newWidth) > maxWidth)) {\n newWidth = isPercentageWidth ? maxWidth + '%' : maxWidth + 'px';\n }\n else if (parseFloat(newWidth) < minWidth) {\n newWidth = isPercentageWidth ? minWidth + '%' : minWidth + 'px';\n }\n return newWidth;\n }\n /**\n * @hidden\n */\n getCalcWidth() {\n if (this._calcWidth && !isNaN(this.calcPixelWidth)) {\n return this._calcWidth;\n }\n this.cacheCalcWidth();\n return this._calcWidth;\n }\n /**\n * @hidden\n * Returns the width and padding of a header cell.\n */\n getHeaderCellWidths() {\n return this.grid.getHeaderCellWidth(this.headerCell.nativeElement);\n }\n /**\n * @hidden\n * Returns the size (in pixels) of the longest currently visible cell, including the header cell.\n * ```typescript\n * @ViewChild('grid') grid: IgxGridComponent;\n *\n * let column = this.grid.columnList.filter(c => c.field === 'ID')[0];\n * let size = column.getLargestCellWidth();\n * ```\n * @memberof IgxColumnComponent\n */\n getLargestCellWidth() {\n const range = this.grid.document.createRange();\n const largest = new Map();\n if (this._cells.length > 0) {\n const cellsContentWidths = [];\n this._cells.forEach((cell) => cellsContentWidths.push(cell.calculateSizeToFit(range)));\n const index = cellsContentWidths.indexOf(Math.max(...cellsContentWidths));\n const cellStyle = this.grid.document.defaultView.getComputedStyle(this._cells[index].nativeElement);\n const cellPadding = parseFloat(cellStyle.paddingLeft) + parseFloat(cellStyle.paddingRight) +\n parseFloat(cellStyle.borderLeftWidth) + parseFloat(cellStyle.borderRightWidth);\n largest.set(Math.max(...cellsContentWidths), cellPadding);\n }\n if (this.headerCell && this.autosizeHeader) {\n const headerCellWidths = this.getHeaderCellWidths();\n largest.set(headerCellWidths.width, headerCellWidths.padding);\n }\n const largestCell = Math.max(...Array.from(largest.keys()));\n const width = Math.ceil(largestCell + largest.get(largestCell));\n if (Number.isNaN(width)) {\n return this.width;\n }\n else {\n return width + 'px';\n }\n }\n /**\n * @hidden\n */\n getCellWidth() {\n const colWidth = this.width;\n const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n if (this.columnLayoutChild) {\n return '';\n }\n if (colWidth && !isPercentageWidth) {\n let cellWidth = colWidth;\n if (typeof cellWidth !== 'string' || cellWidth.endsWith('px') === false) {\n cellWidth += 'px';\n }\n return cellWidth;\n }\n else {\n return colWidth;\n }\n }\n /**\n * @hidden\n */\n populateVisibleIndexes() { }\n getColumnSizesString(children) {\n const res = this.getFilledChildColumnSizes(children);\n return res.join(' ');\n }\n /**\n * @hidden\n * @internal\n */\n cacheCalcWidth() {\n const colWidth = this.width;\n const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n const isAutoWidth = colWidth && typeof colWidth === 'string' && colWidth === 'fit-content';\n if (isPercentageWidth) {\n this._calcWidth = parseFloat(colWidth) / 100 * this.grid.calcWidth;\n }\n else if (!colWidth || isAutoWidth && !this.autoSize) {\n // no width\n this._calcWidth = this.defaultWidth || this.grid.getPossibleColumnWidth();\n }\n else {\n this._calcWidth = this.width;\n }\n this.calcPixelWidth = parseFloat(this._calcWidth);\n }\n /**\n * @hidden\n * @internal\n */\n setExpandCollapseState() {\n this.children.filter(col => (col.visibleWhenCollapsed !== undefined)).forEach(c => {\n if (!this.collapsible) {\n c.hidden = this.hidden;\n return;\n }\n c.hidden = this._expanded ? c.visibleWhenCollapsed : !c.visibleWhenCollapsed;\n });\n }\n /**\n * @hidden\n * @internal\n */\n checkCollapsibleState() {\n if (!this.children) {\n return false;\n }\n const cols = this.children.map(child => child.visibleWhenCollapsed);\n return (cols.some(c => c === true) && cols.some(c => c === false));\n }\n /**\n * @hidden\n */\n get pinnable() {\n return this.grid._init || !this.pinned;\n }\n /**\n * @hidden\n */\n get applySelectableClass() {\n return this._applySelectableClass;\n }\n /**\n * @hidden\n */\n set applySelectableClass(value) {\n if (this.selectable) {\n this._applySelectableClass = value;\n }\n }\n}\nIgxColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnComponent, deps: [{ token: IGX_GRID_BASE }, { token: NG_VALIDATORS, optional: true, self: true }, { token: i0.ChangeDetectorRef }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nIgxColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxColumnComponent, selector: \"igx-column\", inputs: { field: \"field\", header: \"header\", title: \"title\", sortable: \"sortable\", selectable: \"selectable\", groupable: \"groupable\", editable: \"editable\", filterable: \"filterable\", resizable: \"resizable\", autosizeHeader: \"autosizeHeader\", hasSummary: \"hasSummary\", hidden: \"hidden\", disableHiding: \"disableHiding\", disablePinning: \"disablePinning\", movable: \"movable\", width: \"width\", maxWidth: \"maxWidth\", headerClasses: \"headerClasses\", headerStyles: \"headerStyles\", headerGroupClasses: \"headerGroupClasses\", headerGroupStyles: \"headerGroupStyles\", cellClasses: \"cellClasses\", cellStyles: \"cellStyles\", formatter: \"formatter\", summaryFormatter: \"summaryFormatter\", filteringIgnoreCase: \"filteringIgnoreCase\", sortingIgnoreCase: \"sortingIgnoreCase\", searchable: \"searchable\", dataType: \"dataType\", collapsibleIndicatorTemplate: \"collapsibleIndicatorTemplate\", rowEnd: \"rowEnd\", colEnd: \"colEnd\", rowStart: \"rowStart\", colStart: \"colStart\", additionalTemplateContext: \"additionalTemplateContext\", minWidth: \"minWidth\", pinned: \"pinned\", summaries: \"summaries\", filters: \"filters\", sortStrategy: \"sortStrategy\", groupingComparer: \"groupingComparer\", summaryTemplate: \"summaryTemplate\", bodyTemplate: [\"cellTemplate\", \"bodyTemplate\"], headerTemplate: \"headerTemplate\", inlineEditorTemplate: [\"cellEditorTemplate\", \"inlineEditorTemplate\"], errorTemplate: \"errorTemplate\", filterCellTemplate: \"filterCellTemplate\", visibleWhenCollapsed: \"visibleWhenCollapsed\", pipeArgs: \"pipeArgs\" }, outputs: { hiddenChange: \"hiddenChange\", expandedChange: \"expandedChange\", collapsibleChange: \"collapsibleChange\", visibleWhenCollapsedChange: \"visibleWhenCollapsedChange\", columnChange: \"columnChange\", widthChange: \"widthChange\", pinnedChange: \"pinnedChange\" }, queries: [{ propertyName: \"filterCellTemplateDirective\", first: true, predicate: IgxFilterCellTemplateDirective, descendants: true, read: IgxFilterCellTemplateDirective }, { propertyName: \"summaryTemplateDirective\", first: true, predicate: IgxSummaryTemplateDirective, descendants: true, read: IgxSummaryTemplateDirective }, { propertyName: \"cellTemplate\", first: true, predicate: IgxCellTemplateDirective, descendants: true, read: IgxCellTemplateDirective }, { propertyName: \"cellValidationErrorTemplate\", first: true, predicate: IgxCellValidationErrorDirective, descendants: true, read: IgxCellValidationErrorDirective }, { propertyName: \"editorTemplate\", first: true, predicate: IgxCellEditorTemplateDirective, descendants: true, read: IgxCellEditorTemplateDirective }, { propertyName: \"collapseIndicatorTemplate\", first: true, predicate: IgxCollapsibleIndicatorTemplateDirective, descendants: true, read: IgxCollapsibleIndicatorTemplateDirective }, { propertyName: \"headTemplate\", predicate: IgxCellHeaderTemplateDirective, read: IgxCellHeaderTemplateDirective }], ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"header\", void 0);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"title\", void 0);\n__decorate([\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"sortable\", void 0);\n__decorate([\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"selectable\", null);\n__decorate([\n notifyChanges(true),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"groupable\", void 0);\n__decorate([\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"editable\", null);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"filterable\", void 0);\n__decorate([\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"resizable\", void 0);\n__decorate([\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"autosizeHeader\", void 0);\n__decorate([\n notifyChanges(true),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"hasSummary\", null);\n__decorate([\n notifyChanges(true),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"hidden\", null);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"disableHiding\", void 0);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"disablePinning\", void 0);\n__decorate([\n notifyChanges(true),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"width\", null);\n__decorate([\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"maxWidth\", void 0);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"headerClasses\", void 0);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"headerStyles\", void 0);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"headerGroupClasses\", void 0);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"headerGroupStyles\", void 0);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"cellClasses\", void 0);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"cellStyles\", void 0);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"formatter\", void 0);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"summaryFormatter\", void 0);\n__decorate([\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"filteringIgnoreCase\", void 0);\n__decorate([\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"sortingIgnoreCase\", void 0);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"searchable\", void 0);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"minWidth\", null);\n__decorate([\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"pinned\", null);\n__decorate([\n notifyChanges(true),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"summaries\", null);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"summaryTemplate\", null);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"bodyTemplate\", null);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"headerTemplate\", null);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"inlineEditorTemplate\", null);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"errorTemplate\", null);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"filterCellTemplate\", null);\n__decorate([\n notifyChanges(true)\n], IgxColumnComponent.prototype, \"visibleWhenCollapsed\", null);\n__decorate([\n notifyChanges(),\n WatchColumnChanges()\n], IgxColumnComponent.prototype, \"pipeArgs\", null);\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'igx-column',\n template: ``\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [NG_VALIDATORS]\n }] }, { type: i0.ChangeDetectorRef }, { type: PlatformUtil }];\n }, propDecorators: { field: [{\n type: Input\n }], header: [{\n type: Input\n }], title: [{\n type: Input\n }], sortable: [{\n type: Input\n }], selectable: [{\n type: Input\n }], groupable: [{\n type: Input\n }], editable: [{\n type: Input\n }], filterable: [{\n type: Input\n }], resizable: [{\n type: Input\n }], autosizeHeader: [{\n type: Input\n }], hasSummary: [{\n type: Input\n }], hidden: [{\n type: Input\n }], hiddenChange: [{\n type: Output\n }], expandedChange: [{\n type: Output\n }], collapsibleChange: [{\n type: Output\n }], visibleWhenCollapsedChange: [{\n type: Output\n }], columnChange: [{\n type: Output\n }], disableHiding: [{\n type: Input\n }], disablePinning: [{\n type: Input\n }], movable: [{\n type: Input\n }], width: [{\n type: Input\n }], maxWidth: [{\n type: Input\n }], headerClasses: [{\n type: Input\n }], headerStyles: [{\n type: Input\n }], headerGroupClasses: [{\n type: Input\n }], headerGroupStyles: [{\n type: Input\n }], cellClasses: [{\n type: Input\n }], cellStyles: [{\n type: Input\n }], formatter: [{\n type: Input\n }], summaryFormatter: [{\n type: Input\n }], filteringIgnoreCase: [{\n type: Input\n }], sortingIgnoreCase: [{\n type: Input\n }], searchable: [{\n type: Input\n }], dataType: [{\n type: Input\n }], collapsibleIndicatorTemplate: [{\n type: Input\n }], rowEnd: [{\n type: Input\n }], colEnd: [{\n type: Input\n }], rowStart: [{\n type: Input\n }], colStart: [{\n type: Input\n }], additionalTemplateContext: [{\n type: Input\n }], widthChange: [{\n type: Output\n }], pinnedChange: [{\n type: Output\n }], filterCellTemplateDirective: [{\n type: ContentChild,\n args: [IgxFilterCellTemplateDirective, { read: IgxFilterCellTemplateDirective }]\n }], summaryTemplateDirective: [{\n type: ContentChild,\n args: [IgxSummaryTemplateDirective, { read: IgxSummaryTemplateDirective }]\n }], cellTemplate: [{\n type: ContentChild,\n args: [IgxCellTemplateDirective, { read: IgxCellTemplateDirective }]\n }], cellValidationErrorTemplate: [{\n type: ContentChild,\n args: [IgxCellValidationErrorDirective, { read: IgxCellValidationErrorDirective }]\n }], headTemplate: [{\n type: ContentChildren,\n args: [IgxCellHeaderTemplateDirective, { read: IgxCellHeaderTemplateDirective, descendants: false }]\n }], editorTemplate: [{\n type: ContentChild,\n args: [IgxCellEditorTemplateDirective, { read: IgxCellEditorTemplateDirective }]\n }], collapseIndicatorTemplate: [{\n type: ContentChild,\n args: [IgxCollapsibleIndicatorTemplateDirective, { read: IgxCollapsibleIndicatorTemplateDirective, static: false }]\n }], minWidth: [{\n type: Input\n }], pinned: [{\n type: Input\n }], summaries: [{\n type: Input\n }], filters: [{\n type: Input\n }], sortStrategy: [{\n type: Input\n }], groupingComparer: [{\n type: Input\n }], summaryTemplate: [{\n type: Input\n }], bodyTemplate: [{\n type: Input,\n args: ['cellTemplate']\n }], headerTemplate: [{\n type: Input\n }], inlineEditorTemplate: [{\n type: Input,\n args: ['cellEditorTemplate']\n }], errorTemplate: [{\n type: Input,\n args: ['errorTemplate']\n }], filterCellTemplate: [{\n type: Input,\n args: ['filterCellTemplate']\n }], visibleWhenCollapsed: [{\n type: Input\n }], pipeArgs: [{\n type: Input\n }] } });\n\n/**\n * The `` is a container intended for row items in\n * a `` container.\n */\nclass IgxSelectGroupComponent extends IgxDropDownGroupComponent {\n}\nIgxSelectGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxSelectGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSelectGroupComponent, selector: \"igx-select-item-group\", usesInheritance: true, ngImport: i0, template: `\n \n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectGroupComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'igx-select-item-group',\n template: `\n \n \n `\n }]\n }] });\n\n/** @hidden */\nclass IgxSelectModule {\n}\nIgxSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectModule, declarations: [IgxSelectComponent,\n IgxSelectFooterDirective,\n IgxSelectGroupComponent,\n IgxSelectHeaderDirective,\n IgxSelectItemComponent,\n IgxSelectItemNavigationDirective,\n IgxSelectToggleIconDirective], imports: [CommonModule,\n FormsModule,\n IgxButtonModule,\n IgxDropDownModule,\n IgxIconModule,\n IgxInputGroupModule,\n IgxRippleModule,\n IgxToggleModule,\n ReactiveFormsModule], exports: [IgxSelectComponent,\n IgxSelectFooterDirective,\n IgxSelectGroupComponent,\n IgxSelectHeaderDirective,\n IgxSelectItemComponent,\n IgxSelectItemNavigationDirective,\n IgxSelectToggleIconDirective,\n IgxInputGroupModule] });\nIgxSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectModule, imports: [CommonModule,\n FormsModule,\n IgxButtonModule,\n IgxDropDownModule,\n IgxIconModule,\n IgxInputGroupModule,\n IgxRippleModule,\n IgxToggleModule,\n ReactiveFormsModule, IgxInputGroupModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSelectModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxSelectComponent,\n IgxSelectFooterDirective,\n IgxSelectGroupComponent,\n IgxSelectHeaderDirective,\n IgxSelectItemComponent,\n IgxSelectItemNavigationDirective,\n IgxSelectToggleIconDirective\n ],\n exports: [\n IgxSelectComponent,\n IgxSelectFooterDirective,\n IgxSelectGroupComponent,\n IgxSelectHeaderDirective,\n IgxSelectItemComponent,\n IgxSelectItemNavigationDirective,\n IgxSelectToggleIconDirective,\n IgxInputGroupModule\n ],\n imports: [\n CommonModule,\n FormsModule,\n IgxButtonModule,\n IgxDropDownModule,\n IgxIconModule,\n IgxInputGroupModule,\n IgxRippleModule,\n IgxToggleModule,\n ReactiveFormsModule\n ],\n providers: []\n }]\n }] });\n\nclass IgxColumnGroupComponent extends IgxColumnComponent {\n constructor() {\n super(...arguments);\n this.children = new QueryList();\n /**\n * Sets/gets whether the column group is `searchable`.\n * Default value is `true`.\n * ```typescript\n * let isSearchable = this.columnGroup.searchable;\n * ```\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n this.searchable = true;\n }\n /**\n * Set if the column group is collapsible.\n * Default value is `false`\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n set collapsible(value) {\n this._collapsible = value;\n this.collapsibleChange.emit(this._collapsible);\n if (this.children && !this.hidden) {\n if (this._collapsible) {\n this.setExpandCollapseState();\n }\n else {\n this.children.forEach(child => child.hidden = false);\n }\n }\n }\n get collapsible() {\n return this._collapsible && this.checkCollapsibleState();\n }\n /**\n * Set whether the group is expanded or collapsed initially.\n * Applied only if the collapsible property is set to `true`\n * Default value is `true`\n * ```html\n * const state = false\n * \n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n set expanded(value) {\n this._expanded = value;\n this.expandedChange.emit(this._expanded);\n if (!this.collapsible) {\n return;\n }\n if (!this.hidden && this.children) {\n this.setExpandCollapseState();\n }\n }\n get expanded() {\n return this._expanded;\n }\n /**\n * Gets the column group `summaries`.\n * ```typescript\n * let columnGroupSummaries = this.columnGroup.summaries;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n get summaries() {\n return this._summaries;\n }\n /**\n * Sets the column group `summaries`.\n * ```typescript\n * this.columnGroup.summaries = IgxNumberSummaryOperand;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n set summaries(classRef) { }\n /**\n * Gets the column group `filters`.\n * ```typescript\n * let columnGroupFilters = this.columnGroup.filters;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n get filters() {\n return this._filters;\n }\n /**\n * Sets the column group `filters`.\n * ```typescript\n * this.columnGroup.filters = IgxStringFilteringOperand;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n set filters(classRef) { }\n /**\n * Returns if the column group is selectable\n * ```typescript\n * let columnGroupSelectable = this.columnGroup.selectable;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n get selectable() {\n return this.children && this.children.some(child => child.selectable);\n }\n set selectable(value) { }\n /**\n * Returns a reference to the body template.\n * ```typescript\n * let bodyTemplate = this.columnGroup.bodyTemplate;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n get bodyTemplate() {\n return this._bodyTemplate;\n }\n /**\n * @hidden\n */\n set bodyTemplate(template) { }\n /**\n * Returns a reference to the inline editor template.\n * ```typescript\n * let inlineEditorTemplate = this.columnGroup.inlineEditorTemplate;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n get inlineEditorTemplate() {\n return this._inlineEditorTemplate;\n }\n /**\n * @hidden\n */\n set inlineEditorTemplate(template) { }\n /**\n * Will return empty array. Use this.children.toArray()[index].cells to get the cells for a column that is part of the column group.\n * ```typescript\n * let columnCells = this.columnGroup.cells;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n get cells() {\n return [];\n }\n /**\n * Gets whether the column group is hidden.\n * ```typescript\n * let isHidden = this.columnGroup.hidden;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n get hidden() {\n return this.allChildren.every(c => c.hidden);\n }\n /**\n * Sets the column group hidden property.\n * ```html\n * \n * ```\n *\n * Two-way data binding\n * ```html\n * \n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n set hidden(value) {\n this._hidden = value;\n this.hiddenChange.emit(this._hidden);\n if (this._hidden || !this.collapsible) {\n this.children.forEach(child => child.hidden = this._hidden);\n }\n else {\n this.children.forEach(c => {\n if (c.visibleWhenCollapsed === undefined) {\n c.hidden = false;\n return;\n }\n c.hidden = this.expanded ? c.visibleWhenCollapsed : !c.visibleWhenCollapsed;\n });\n }\n }\n /**\n * Returns if the column group is selected.\n * ```typescript\n * let isSelected = this.columnGroup.selected;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n get selected() {\n const selectableChildren = this.allChildren.filter(c => !c.columnGroup && c.selectable && !c.hidden);\n return selectableChildren.length > 0 && selectableChildren.every(c => c.selected);\n }\n /**\n * Select/deselect the column group.\n * ```typescript\n * this.columnGroup.selected = true;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n set selected(value) {\n if (this.selectable) {\n this.children.forEach(c => {\n c.selected = value;\n });\n }\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n /*\n @ContentChildren with descendants still returns the `parent`\n component in the query list.\n */\n if (this.headTemplate && this.headTemplate.length) {\n this._headerTemplate = this.headTemplate.toArray()[0].template;\n }\n if (this.collapseIndicatorTemplate) {\n this.collapsibleIndicatorTemplate = this.collapseIndicatorTemplate.template;\n }\n // currently only ivy fixes the issue, we have to slice only if the first child is group\n if (this.children.first === this) {\n this.children.reset(this.children.toArray().slice(1));\n }\n this.children.forEach(child => {\n child.parent = this;\n });\n if (this.collapsible) {\n this.setExpandCollapseState();\n }\n this.children.changes\n .pipe(takeUntil(this.destroy$))\n .subscribe((change) => {\n change.forEach(x => x.parent = this);\n if (this.collapsible) {\n this.setExpandCollapseState();\n }\n });\n }\n /**\n * Returns the children columns collection.\n * ```typescript\n * let columns = this.columnGroup.allChildren;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n get allChildren() {\n return flatten$1(this.children.toArray());\n }\n /**\n * Returns a boolean indicating if the column is a `ColumnGroup`.\n * ```typescript\n * let isColumnGroup = this.columnGroup.columnGroup\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n get columnGroup() {\n return true;\n }\n /**\n * Returns a boolean indicating if the column is a `ColumnLayout` for multi-row layout.\n * ```typescript\n * let columnGroup = this.column.columnGroup;\n * ```\n *\n * @memberof IgxColumnComponent\n */\n get columnLayout() {\n return false;\n }\n /**\n * Gets the width of the column group.\n * ```typescript\n * let columnGroupWidth = this.columnGroup.width;\n * ```\n *\n * @memberof IgxColumnGroupComponent\n */\n get width() {\n const width = `${this.children.reduce((acc, val) => {\n if (val.hidden) {\n return acc;\n }\n return acc + parseInt(val.calcWidth, 10);\n }, 0)}`;\n return width + 'px';\n }\n set width(val) { }\n /**\n * @hidden\n */\n get applySelectableClass() {\n return this._applySelectableClass;\n }\n /**\n * @hidden\n */\n set applySelectableClass(value) {\n if (this.selectable) {\n this._applySelectableClass = value;\n this.children.forEach(c => {\n c.applySelectableClass = value;\n });\n }\n }\n /**\n * @hidden\n * Calculates the number of visible columns, based on indexes of first and last visible columns.\n */\n calcChildren() {\n const visibleChildren = this.allChildren.filter(c => c.visibleIndex > -1);\n const fi = visibleChildren[0].visibleIndex;\n const li = visibleChildren[visibleChildren.length - 1].visibleIndex;\n return li - fi + 1;\n }\n}\nIgxColumnGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxColumnGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxColumnGroupComponent, selector: \"igx-column-group\", inputs: { collapsible: \"collapsible\", expanded: \"expanded\", summaries: \"summaries\", searchable: \"searchable\", filters: \"filters\", collapsibleIndicatorTemplate: \"collapsibleIndicatorTemplate\", hidden: \"hidden\" }, providers: [{ provide: IgxColumnComponent, useExisting: forwardRef(() => IgxColumnGroupComponent) }], queries: [{ propertyName: \"children\", predicate: IgxColumnComponent, read: IgxColumnComponent }], usesInheritance: true, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnGroupComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: IgxColumnComponent, useExisting: forwardRef(() => IgxColumnGroupComponent) }],\n selector: 'igx-column-group',\n template: ``\n }]\n }], propDecorators: { children: [{\n type: ContentChildren,\n args: [IgxColumnComponent, { read: IgxColumnComponent }]\n }], collapsible: [{\n type: Input\n }], expanded: [{\n type: Input\n }], summaries: [{\n type: Input\n }], searchable: [{\n type: Input\n }], filters: [{\n type: Input\n }], collapsibleIndicatorTemplate: [{\n type: Input\n }], hidden: [{\n type: Input\n }] } });\n\nclass IgxGridBodyDirective {\n}\nIgxGridBodyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridBodyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxGridBodyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridBodyDirective, selector: \"[igxGridBody]\", providers: [IgxForOfSyncService], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridBodyDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxGridBody]',\n providers: [IgxForOfSyncService]\n }]\n }] });\n/**\n * @hidden\n */\nclass RowEditPositionStrategy extends ConnectedPositioningStrategy {\n constructor() {\n super(...arguments);\n this.isTop = false;\n this.isTopInitialPosition = null;\n }\n position(contentElement, size, document, initialCall, target) {\n const container = this.settings.container; // grid.tbody\n const targetElement = target || this.settings.target; // current grid.row\n // Position of the overlay depends on the available space in the grid.\n // If the bottom space is not enough then the the row overlay will show at the top of the row.\n // Once shown, either top or bottom, then this position stays until the overlay is closed (isTopInitialPosition property),\n // which means that when scrolling then overlay may hide, while the row is still visible (UX requirement).\n this.isTop = this.isTopInitialPosition !== null ?\n this.isTopInitialPosition :\n container.getBoundingClientRect().bottom <\n targetElement.getBoundingClientRect().bottom + contentElement.getBoundingClientRect().height;\n // Set width of the row editing overlay to equal row width, otherwise it fits 100% of the grid.\n contentElement.style.width = targetElement.clientWidth + 'px';\n this.settings.verticalStartPoint = this.settings.verticalDirection = this.isTop ? VerticalAlignment.Top : VerticalAlignment.Bottom;\n this.settings.openAnimation = this.isTop ? scaleInVerBottom : scaleInVerTop;\n super.position(contentElement, { width: targetElement.clientWidth, height: targetElement.clientHeight }, document, initialCall, targetElement);\n }\n}\n\n// eslint-disable-next-line @angular-eslint/directive-selector\nclass IgxExcelTextDirective {\n}\nIgxExcelTextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelTextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxExcelTextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelTextDirective, selector: \"[excelText],excel-text\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelTextDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[excelText],excel-text' }]\n }] });\n// eslint-disable-next-line @angular-eslint/directive-selector\nclass IgxCSVTextDirective {\n}\nIgxCSVTextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCSVTextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxCSVTextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxCSVTextDirective, selector: \"[csvText],csv-text\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxCSVTextDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[csvText],csv-text' }]\n }] });\n/**\n * Provides a way to template the title portion of the toolbar in the grid.\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n * @example\n * ```html\n * My custom title\n * ```\n */\nclass IgxGridToolbarTitleComponent {\n constructor() {\n /**\n * Host `class.igx-grid-toolbar__title` binding.\n *\n * @hidden\n * @internal\n */\n this.cssClass = 'igx-grid-toolbar__title';\n }\n}\nIgxGridToolbarTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxGridToolbarTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridToolbarTitleComponent, selector: \"igx-grid-toolbar-title\", host: { properties: { \"class.igx-grid-toolbar__title\": \"this.cssClass\" } }, ngImport: i0, template: '', isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarTitleComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-grid-toolbar-title', template: '' }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-grid-toolbar__title']\n }] } });\n/**\n * Provides a way to template the action portion of the toolbar in the grid.\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n * @example\n * ```html\n * \n * \n * \n * ```\n */\nclass IgxGridToolbarActionsComponent {\n constructor() {\n /**\n * Host `class.igx-grid-toolbar__actions` binding.\n *\n * @hidden\n * @internal\n */\n this.cssClass = 'igx-grid-toolbar__actions';\n }\n}\nIgxGridToolbarActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxGridToolbarActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridToolbarActionsComponent, selector: \"igx-grid-toolbar-actions\", host: { properties: { \"class.igx-grid-toolbar__actions\": \"this.cssClass\" } }, ngImport: i0, template: '', isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarActionsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-grid-toolbar-actions', template: '' }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-grid-toolbar__actions']\n }] } });\nclass IgxGridToolbarDirective {\n constructor(template) {\n this.template = template;\n }\n static ngTemplateContextGuard(_dir, ctx) {\n return true;\n }\n ;\n}\nIgxGridToolbarDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxGridToolbarDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridToolbarDirective, selector: \"[igxGridToolbar]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxGridToolbar]' }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/** @hidden @internal */\nclass IgxToolbarToken {\n}\n\n/**\n * Provides a pre-configured button to open the advanced filtering dialog of the grid.\n *\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n * @example\n * ```html\n * \n * Custom text\n * ```\n */\nclass IgxGridToolbarAdvancedFilteringComponent {\n /**\n * Returns the grid containing this component.\n */\n get grid() {\n return this.toolbar.grid;\n }\n constructor(toolbar) {\n this.toolbar = toolbar;\n }\n}\nIgxGridToolbarAdvancedFilteringComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarAdvancedFilteringComponent, deps: [{ token: IgxToolbarToken }], target: i0.ɵɵFactoryTarget.Component });\nIgxGridToolbarAdvancedFilteringComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridToolbarAdvancedFilteringComponent, selector: \"igx-grid-toolbar-advanced-filtering\", inputs: { overlaySettings: \"overlaySettings\" }, ngImport: i0, template: \"\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarAdvancedFilteringComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-grid-toolbar-advanced-filtering', template: \"\\n\" }]\n }], ctorParameters: function () {\n return [{ type: IgxToolbarToken, decorators: [{\n type: Inject,\n args: [IgxToolbarToken]\n }] }];\n }, propDecorators: { overlaySettings: [{\n type: Input\n }] } });\n\n/**\n * Provides a context-aware container component for UI operations for the grid components.\n *\n * @igxModule IgxGridToolbarModule\n *\n */\nclass IgxGridToolbarComponent extends DisplayDensityBase {\n /**\n * Gets/sets the grid component for the toolbar component.\n *\n * @remarks\n * Usually you should not set this property in the context of the default grid/tree grid.\n * The only grids that demands this to be set are the hierarchical child grids. For additional\n * information check the toolbar topic.\n */\n get grid() {\n if (this._grid) {\n return this._grid;\n }\n return this.api.grid;\n }\n set grid(value) {\n this._grid = value;\n }\n /** Returns the native DOM element of the toolbar component */\n get nativeElement() {\n return this.element.nativeElement;\n }\n /**\n * @hidden\n * @internal\n */\n get cosyStyle() {\n return this.displayDensity === 'cosy';\n }\n /**\n * @hidden\n * @internal\n */\n get compactStyle() {\n return this.displayDensity === 'compact';\n }\n constructor(_displayDensityOptions, api, iconService, element) {\n super(_displayDensityOptions);\n this._displayDensityOptions = _displayDensityOptions;\n this.api = api;\n this.iconService = iconService;\n this.element = element;\n /**\n * When enabled, shows the indeterminate progress bar.\n *\n * @remarks\n * By default this will be toggled, when the default exporter component is present\n * and an exporting is in progress.\n */\n this.showProgress = false;\n /**\n * @hidden\n * @internal\n */\n this.defaultStyle = true;\n this.iconService.addSvgIconFromText(pinLeft.name, pinLeft.value, 'imx-icons');\n this.iconService.addSvgIconFromText(unpinLeft.name, unpinLeft.value, 'imx-icons');\n }\n /** @hidden @internal */\n ngOnDestroy() {\n var _a;\n (_a = this.sub) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n }\n}\nIgxGridToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarComponent, deps: [{ token: DisplayDensityToken, optional: true }, { token: IGX_GRID_SERVICE_BASE }, { token: IgxIconService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxGridToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridToolbarComponent, selector: \"igx-grid-toolbar\", inputs: { showProgress: \"showProgress\", grid: \"grid\" }, host: { properties: { \"class.igx-grid-toolbar\": \"this.defaultStyle\", \"class.igx-grid-toolbar--cosy\": \"this.cosyStyle\", \"class.igx-grid-toolbar--compact\": \"this.compactStyle\" } }, providers: [{ provide: IgxToolbarToken, useExisting: IgxGridToolbarComponent }], queries: [{ propertyName: \"hasActions\", first: true, predicate: IgxGridToolbarActionsComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: \"\\n\\n
    \\n \\n
    \\n\\n\\n \\n\\n\\n \\n\\n\\n\\n\\n
    \\n \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: IgxLinearProgressBarComponent, selector: \"igx-linear-bar\", inputs: [\"striped\", \"role\", \"id\", \"textAlign\", \"textVisibility\", \"textTop\", \"text\", \"type\"] }, { kind: \"component\", type: IgxGridToolbarActionsComponent, selector: \"igx-grid-toolbar-actions\" }, { kind: \"component\", type: IgxGridToolbarAdvancedFilteringComponent, selector: \"igx-grid-toolbar-advanced-filtering\", inputs: [\"overlaySettings\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-grid-toolbar', providers: [{ provide: IgxToolbarToken, useExisting: IgxGridToolbarComponent }], template: \"\\n\\n
    \\n \\n
    \\n\\n\\n \\n\\n\\n \\n\\n\\n\\n\\n
    \\n \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_SERVICE_BASE]\n }] }, { type: IgxIconService }, { type: i0.ElementRef }];\n }, propDecorators: { showProgress: [{\n type: Input\n }], grid: [{\n type: Input\n }], hasActions: [{\n type: ContentChild,\n args: [IgxGridToolbarActionsComponent]\n }], defaultStyle: [{\n type: HostBinding,\n args: ['class.igx-grid-toolbar']\n }], cosyStyle: [{\n type: HostBinding,\n args: ['class.igx-grid-toolbar--cosy']\n }], compactStyle: [{\n type: HostBinding,\n args: ['class.igx-grid-toolbar--compact']\n }] } });\n\n/** @hidden @internal */\nclass IgxRowEditTemplateDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxRowEditTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowEditTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxRowEditTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowEditTemplateDirective, selector: \"[igxRowEdit]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowEditTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxRowEdit]'\n }]\n }] });\n/** @hidden @internal */\nclass IgxRowEditTextDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxRowEditTextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowEditTextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxRowEditTextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowEditTextDirective, selector: \"[igxRowEditText]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowEditTextDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxRowEditText]'\n }]\n }] });\n/** @hidden @internal */\nclass IgxRowAddTextDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxRowAddTextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowAddTextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxRowAddTextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowAddTextDirective, selector: \"[igxRowAddText]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowAddTextDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxRowAddText]'\n }]\n }] });\n/** @hidden @internal */\nclass IgxRowEditActionsDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxRowEditActionsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowEditActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxRowEditActionsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowEditActionsDirective, selector: \"[igxRowEditActions]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowEditActionsDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxRowEditActions]'\n }]\n }] });\n// TODO: Refactor circular ref, deps and logic\n/** @hidden @internal */\nclass IgxRowEditTabStopDirective {\n constructor(grid, element) {\n this.grid = grid;\n this.element = element;\n }\n handleTab(event) {\n event.stopPropagation();\n if ((this.grid.rowEditTabs.last === this && !event.shiftKey) ||\n (this.grid.rowEditTabs.first === this && event.shiftKey)) {\n this.move(event);\n }\n }\n handleEscape(event) {\n this.grid.crudService.endEdit(false, event);\n this.grid.tbody.nativeElement.focus();\n }\n handleEnter(event) {\n event.stopPropagation();\n }\n /**\n * Moves focus to first/last editable cell in the editable row and put the cell in edit mode.\n * If cell is out of view first scrolls to the cell\n *\n * @param event keyboard event containing information about whether SHIFT key was pressed\n */\n move(event) {\n event.preventDefault();\n this.currentCellIndex = event.shiftKey ? this.grid.lastEditableColumnIndex : this.grid.firstEditableColumnIndex;\n this.grid.navigation.activeNode.row = this.grid.crudService.rowInEditMode.index;\n this.grid.navigation.activeNode.column = this.currentCellIndex;\n this.grid.navigateTo(this.grid.crudService.rowInEditMode.index, this.currentCellIndex, (obj) => {\n obj.target.activate(event);\n this.grid.cdr.detectChanges();\n });\n }\n}\nIgxRowEditTabStopDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowEditTabStopDirective, deps: [{ token: IGX_GRID_BASE }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxRowEditTabStopDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowEditTabStopDirective, selector: \"[igxRowEditTabStop]\", host: { listeners: { \"keydown.Tab\": \"handleTab($event)\", \"keydown.Shift.Tab\": \"handleTab($event)\", \"keydown.Escape\": \"handleEscape($event)\", \"keydown.Enter\": \"handleEnter($event)\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowEditTabStopDirective, decorators: [{\n type: Directive,\n args: [{\n selector: `[igxRowEditTabStop]`\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }, { type: i0.ElementRef }];\n }, propDecorators: { handleTab: [{\n type: HostListener,\n args: ['keydown.Tab', [`$event`]]\n }, {\n type: HostListener,\n args: ['keydown.Shift.Tab', [`$event`]]\n }], handleEscape: [{\n type: HostListener,\n args: ['keydown.Escape', [`$event`]]\n }], handleEnter: [{\n type: HostListener,\n args: ['keydown.Enter', ['$event']]\n }] } });\n\nclass IgxSummaryCellComponent {\n constructor(element) {\n this.element = element;\n this.firstCellIndentation = 0;\n this.hasSummary = false;\n }\n get visibleColumnIndex() {\n return this.column.visibleIndex;\n }\n get attrCellID() {\n return `${this.grid.id}_${this.rowIndex}_${this.visibleColumnIndex}`;\n }\n activate() {\n const currNode = this.grid.navigation.activeNode;\n if (currNode && this.rowIndex === currNode.row && this.visibleColumnIndex === currNode.column) {\n return;\n }\n this.grid.navigation.setActiveNode({ row: this.rowIndex, column: this.visibleColumnIndex }, 'summaryCell');\n this.grid.cdr.detectChanges();\n }\n get selectionNode() {\n return {\n row: this.rowIndex,\n column: this.column.columnLayoutChild ? this.column.parent.visibleIndex : this.visibleColumnIndex,\n isSummaryRow: true\n };\n }\n get width() {\n return this.column.getCellWidth();\n }\n get nativeElement() {\n return this.element.nativeElement;\n }\n get columnDatatype() {\n return this.column.dataType;\n }\n get itemHeight() {\n return this.column.grid.defaultSummaryHeight;\n }\n /**\n * @hidden\n */\n get grid() {\n return this.column.grid;\n }\n /**\n * @hidden @internal\n */\n get currencyCode() {\n return this.column.pipeArgs.currencyCode ?\n this.column.pipeArgs.currencyCode : getLocaleCurrencyCode(this.grid.locale);\n }\n /**\n * @hidden @internal\n */\n get currencySymbol() {\n return this.column.pipeArgs.display ?\n this.column.pipeArgs.display : getLocaleCurrencySymbol(this.grid.locale);\n }\n translateSummary(summary) {\n return this.grid.resourceStrings[`igx_grid_summary_${summary.key}`] || summary.label;\n }\n /**\n * @hidden @internal\n */\n formatSummaryResult(summary) {\n if (summary.summaryResult === undefined || summary.summaryResult === null || summary.summaryResult === '') {\n return '';\n }\n if (this.summaryFormatter) {\n return this.summaryFormatter(summary, this.column.summaries);\n }\n const args = this.column.pipeArgs;\n const locale = this.grid.locale;\n if (summary.key === 'count') {\n return formatNumber(summary.summaryResult, locale);\n }\n if (summary.defaultFormatting) {\n switch (this.column.dataType) {\n case GridColumnDataType.Number:\n return formatNumber(summary.summaryResult, locale, args.digitsInfo);\n case GridColumnDataType.Date:\n case GridColumnDataType.DateTime:\n case GridColumnDataType.Time:\n return formatDate$1(summary.summaryResult, args.format, locale, args.timezone);\n case GridColumnDataType.Currency:\n return formatCurrency$1(summary.summaryResult, locale, this.currencySymbol, this.currencyCode, args.digitsInfo);\n case GridColumnDataType.Percent:\n return formatPercent(summary.summaryResult, locale, args.digitsInfo);\n }\n }\n return summary.summaryResult;\n }\n}\nIgxSummaryCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSummaryCellComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxSummaryCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSummaryCellComponent, selector: \"igx-grid-summary-cell\", inputs: { summaryResults: \"summaryResults\", column: \"column\", firstCellIndentation: \"firstCellIndentation\", hasSummary: \"hasSummary\", density: \"density\", summaryFormatter: \"summaryFormatter\", summaryTemplate: \"summaryTemplate\", active: \"active\", rowIndex: \"rowIndex\" }, host: { listeners: { \"pointerdown\": \"activate()\" }, properties: { \"class.igx-grid-summary--active\": \"this.active\", \"attr.data-rowIndex\": \"this.rowIndex\", \"attr.data-visibleIndex\": \"this.visibleColumnIndex\", \"attr.id\": \"this.attrCellID\" } }, ngImport: i0, template: \"\\n \\n \\n\\n \\n \\n
    \\n\\n {{ translateSummary(summary) }}\\n \\n {{\\n formatSummaryResult(summary)\\n }}\\n \\n
    \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSummaryCellComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-summary-cell', template: \"\\n \\n \\n\\n \\n \\n
    \\n\\n {{ translateSummary(summary) }}\\n \\n {{\\n formatSummaryResult(summary)\\n }}\\n \\n
    \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { summaryResults: [{\n type: Input\n }], column: [{\n type: Input\n }], firstCellIndentation: [{\n type: Input\n }], hasSummary: [{\n type: Input\n }], density: [{\n type: Input\n }], summaryFormatter: [{\n type: Input\n }], summaryTemplate: [{\n type: Input\n }], active: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.igx-grid-summary--active']\n }], rowIndex: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.data-rowIndex']\n }], visibleColumnIndex: [{\n type: HostBinding,\n args: ['attr.data-visibleIndex']\n }], attrCellID: [{\n type: HostBinding,\n args: ['attr.id']\n }], activate: [{\n type: HostListener,\n args: ['pointerdown']\n }] } });\n\nclass BaseRow {\n /**\n * Returns the view index calculated per the grid page.\n */\n get viewIndex() {\n return this.index + this.grid.page * this.grid.perPage;\n }\n /**\n * Gets the row key.\n * A row in the grid is identified either by:\n * - primaryKey data value,\n * - the whole rowData, if the primaryKey is omitted.\n *\n * ```typescript\n * let rowKey = row.key;\n * ```\n */\n get key() {\n var _a;\n const data = (_a = this._data) !== null && _a !== void 0 ? _a : this.grid.dataView[this.index];\n const primaryKey = this.grid.primaryKey;\n return primaryKey ? data[primaryKey] : data;\n }\n /**\n * Gets if this represents add row UI\n *\n * ```typescript\n * let isAddRow = row.addRowUI;\n * ```\n */\n get addRowUI() {\n return !!this.grid.crudService.row &&\n this.grid.crudService.row.getClassName() === IgxAddRow.name &&\n this.grid.crudService.row.id === this.key;\n }\n /** Gets the validation status and errors, if any.\n * ```typescript\n * let validation = row.validation;\n * let errors = validation.errors;\n * ```\n */\n get validation() {\n const formGroup = this.grid.validation.getFormGroup(this.key);\n return { status: (formGroup === null || formGroup === void 0 ? void 0 : formGroup.status) || 'VALID', errors: formGroup === null || formGroup === void 0 ? void 0 : formGroup.errors };\n }\n /**\n * The data record that populates the row.\n *\n * ```typescript\n * let rowData = row.data;\n * ```\n */\n get data() {\n var _a, _b;\n if (this.inEditMode) {\n return mergeWith(this.grid.dataCloneStrategy.clone((_a = this._data) !== null && _a !== void 0 ? _a : this.grid.dataView[this.index]), this.grid.transactions.getAggregatedValue(this.key, false), (objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return objValue = srcValue;\n }\n });\n }\n return (_b = this._data) !== null && _b !== void 0 ? _b : this.grid.dataView[this.index];\n }\n /**\n * Returns if the row is currently in edit mode.\n */\n get inEditMode() {\n if (this.grid.rowEditable) {\n const editRowState = this.grid.crudService.row;\n return (editRowState && editRowState.id === this.key) || false;\n }\n else {\n return false;\n }\n }\n /**\n * Gets whether the row is pinned.\n * Default value is `false`.\n * ```typescript\n * const isPinned = row.pinned;\n * ```\n */\n get pinned() {\n return this.grid.isRecordPinned(this.data);\n }\n /**\n * Sets whether the row is pinned.\n * Default value is `false`.\n * ```typescript\n * row.pinned = !row.pinned;\n * ```\n */\n set pinned(val) {\n if (val) {\n this.pin();\n }\n else {\n this.unpin();\n }\n }\n /**\n * Gets the row expanded/collapsed state.\n *\n * ```typescript\n * const isExpanded = row.expanded;\n * ```\n */\n get expanded() {\n return this.grid.gridAPI.get_row_expansion_state(this.data);\n }\n /**\n * Expands/collapses the row.\n *\n * ```typescript\n * row.expanded = true;\n * ```\n */\n set expanded(val) {\n this.grid.gridAPI.set_row_expansion_state(this.key, val);\n }\n /**\n * Gets whether the row is selected.\n * Default value is `false`.\n * ```typescript\n * row.selected = true;\n * ```\n */\n get selected() {\n return this.grid.selectionService.isRowSelected(this.key);\n }\n /**\n * Sets whether the row is selected.\n * Default value is `false`.\n * ```typescript\n * row.selected = !row.selected;\n * ```\n */\n set selected(val) {\n if (val) {\n this.grid.selectionService.selectRowsWithNoEvent([this.key]);\n }\n else {\n this.grid.selectionService.deselectRowsWithNoEvent([this.key]);\n }\n this.grid.cdr.markForCheck();\n }\n /**\n * Returns if the row is in delete state.\n */\n get deleted() {\n return this.grid.gridAPI.row_deleted_transaction(this.key);\n }\n /**\n * Returns if the row has child rows. Always return false for IgxGridRow.\n */\n get hasChildren() {\n return false;\n }\n get disabled() {\n return this.grid.isGhostRecord(this.data);\n }\n /**\n * Gets the rendered cells in the row component.\n */\n get cells() {\n const res = [];\n this.grid.columns.forEach(col => {\n const cell = new IgxGridCell(this.grid, this.index, col.field);\n res.push(cell);\n });\n return res;\n }\n /**\n * Pins the specified row.\n * This method emits `onRowPinning` event.\n *\n * ```typescript\n * // pin the selected row from the grid\n * this.grid.selectedRows[0].pin();\n * ```\n */\n pin() {\n return this.grid.pinRow(this.key, this.index);\n }\n /**\n * Unpins the specified row.\n * This method emits `onRowPinning` event.\n *\n * ```typescript\n * // unpin the selected row from the grid\n * this.grid.selectedRows[0].unpin();\n * ```\n */\n unpin() {\n return this.grid.unpinRow(this.key);\n }\n /**\n * Updates the specified row object and the data source record with the passed value.\n *\n * ```typescript\n * // update the second selected row's value\n * let newValue = \"Apple\";\n * this.grid.selectedRows[1].update(newValue);\n * ```\n */\n update(value) {\n const crudService = this.grid.crudService;\n if (crudService.cellInEditMode && crudService.cell.id.rowID === this.key) {\n this.grid.transactions.endPending(false);\n }\n const row = new IgxEditRow(this.key, this.index, this.data, this.grid);\n this.grid.gridAPI.update_row(row, value);\n this.grid.notifyChanges();\n }\n /**\n * Removes the specified row from the grid's data source.\n * This method emits `onRowDeleted` event.\n *\n * ```typescript\n * // delete the third selected row from the grid\n * this.grid.selectedRows[2].delete();\n * ```\n */\n delete() {\n this.grid.deleteRowById(this.key);\n }\n}\nclass IgxGridRow extends BaseRow {\n /**\n * @hidden\n */\n constructor(grid, index, data) {\n super();\n this.grid = grid;\n this.index = index;\n this._data = data && data.addRow && data.recordRef ? data.recordRef : data;\n }\n /**\n * Returns the view index calculated per the grid page.\n */\n get viewIndex() {\n if (this.grid.paginator) {\n const precedingDetailRows = [];\n const precedingGroupRows = [];\n const firstRow = this.grid.dataView[0];\n const hasDetailRows = this.grid.expansionStates.size;\n const hasGroupedRows = this.grid.groupingExpressions.length;\n let precedingSummaryRows = 0;\n const firstRowInd = this.grid.groupingFlatResult.indexOf(firstRow);\n // from groupingFlatResult, resolve two other collections:\n // precedingGroupedRows -> use it to resolve summaryRow for each group in previous pages\n // precedingDetailRows -> ise it to resolve the detail row for each expanded grid row in previous pages\n if (hasDetailRows || hasGroupedRows) {\n this.grid.groupingFlatResult.forEach((r, ind) => {\n const rowID = this.grid.primaryKey ? r[this.grid.primaryKey] : r;\n if (hasGroupedRows && ind < firstRowInd && this.grid.isGroupByRecord(r)) {\n precedingGroupRows.push(r);\n }\n if (this.grid.expansionStates.get(rowID) && ind < firstRowInd && !this.grid.isGroupByRecord(r)) {\n precedingDetailRows.push(r);\n }\n });\n }\n if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n // if firstRow is a child of the last item in precedingGroupRows,\n // then summaryRow for this given groupedRecord is rendered after firstRow,\n // i.e. need to decrease firstRowInd to account for the above.\n precedingSummaryRows = precedingGroupRows.filter(gr => this.grid.isExpandedGroup(gr)).length;\n if (this.grid.summaryPosition === GridSummaryPosition.bottom && precedingGroupRows.length &&\n precedingGroupRows[precedingGroupRows.length - 1].records.indexOf(firstRow) > -1) {\n precedingSummaryRows += -1;\n }\n }\n return precedingDetailRows.length + precedingSummaryRows + firstRowInd + this.index;\n }\n else {\n return this.index;\n }\n }\n /**\n * Returns the parent row, if grid is grouped.\n */\n get parent() {\n let parent;\n if (!this.grid.groupingExpressions.length) {\n return undefined;\n }\n let i = this.index - 1;\n while (i >= 0 && !parent) {\n const rec = this.grid.dataView[i];\n if (this.grid.isGroupByRecord(rec)) {\n parent = new IgxGroupByRow(this.grid, i, rec);\n }\n i--;\n }\n return parent;\n }\n}\nclass IgxTreeGridRow extends BaseRow {\n /**\n * @hidden\n */\n constructor(grid, index, data, _treeRow) {\n super();\n this.grid = grid;\n this.index = index;\n this._treeRow = _treeRow;\n this._data = data && data.addRow && data.recordRef ? data.recordRef : data;\n }\n /**\n * Returns the view index calculated per the grid page.\n */\n get viewIndex() {\n if (this.grid.hasSummarizedColumns && this.grid.page > 0) {\n if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n const firstRowIndex = this.grid.processedExpandedFlatData.indexOf(this.grid.dataView[0].data);\n // firstRowIndex is based on data result after all pipes triggered, excluding summary pipe\n const precedingSummaryRows = this.grid.summaryPosition === GridSummaryPosition.bottom ?\n this.grid.rootRecords.indexOf(this.getRootParent(this.grid.dataView[0])) :\n this.grid.rootRecords.indexOf(this.getRootParent(this.grid.dataView[0])) + 1;\n // there is a summary row for each root record, so we calculate how many root records are rendered before the current row\n return firstRowIndex + precedingSummaryRows + this.index;\n }\n }\n return this.index + this.grid.page * this.grid.perPage;\n }\n /**\n * The data passed to the row component.\n *\n * ```typescript\n * let selectedRowData = this.grid.selectedRows[0].data;\n * ```\n */\n get data() {\n var _a;\n if (this.inEditMode) {\n return mergeWith(this.grid.dataCloneStrategy.clone((_a = this._data) !== null && _a !== void 0 ? _a : this.grid.dataView[this.index]), this.grid.transactions.getAggregatedValue(this.key, false), (objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return objValue = srcValue;\n }\n });\n }\n const rec = this.grid.dataView[this.index];\n return this._data ? this._data : this.grid.isTreeRow(rec) ? rec.data : rec;\n }\n /**\n * Returns the child rows.\n */\n get children() {\n const children = [];\n if (this.treeRow.expanded) {\n this.treeRow.children.forEach((rec, i) => {\n const row = new IgxTreeGridRow(this.grid, this.index + 1 + i, rec.data);\n children.push(row);\n });\n }\n return children;\n }\n /**\n * Returns the parent row.\n */\n get parent() {\n var _a;\n const row = this.grid.getRowByKey((_a = this.treeRow.parent) === null || _a === void 0 ? void 0 : _a.key);\n return row;\n }\n /**\n * Returns true if child rows exist. Always return false for IgxGridRow.\n */\n get hasChildren() {\n if (this.treeRow.children) {\n return this.treeRow.children.length > 0;\n }\n else {\n return false;\n }\n }\n /**\n * The `ITreeGridRecord` with metadata about the row in the context of the tree grid.\n *\n * ```typescript\n * const rowParent = this.treeGrid.getRowByKey(1).treeRow.parent;\n * ```\n */\n get treeRow() {\n var _a;\n return (_a = this._treeRow) !== null && _a !== void 0 ? _a : this.grid.records.get(this.key);\n }\n /**\n * Gets whether the row is pinned.\n *\n * ```typescript\n * let isPinned = row.pinned;\n * ```\n */\n get pinned() {\n return this.grid.isRecordPinned(this);\n }\n /**\n * Sets whether the row is pinned.\n * Default value is `false`.\n * ```typescript\n * row.pinned = !row.pinned;\n * ```\n */\n set pinned(val) {\n if (val) {\n this.pin();\n }\n else {\n this.unpin();\n }\n }\n /**\n * Gets whether the row is expanded.\n *\n * ```typescript\n * let esExpanded = row.expanded;\n * ```\n */\n get expanded() {\n return this.grid.gridAPI.get_row_expansion_state(this.treeRow);\n }\n /**\n * Expands/collapses the row.\n *\n * ```typescript\n * row.expanded = true;\n * ```\n */\n set expanded(val) {\n this.grid.gridAPI.set_row_expansion_state(this.key, val);\n }\n get disabled() {\n // TODO cell\n return this.grid.isGhostRecord(this.data) ? this.treeRow.isFilteredOutParent === undefined : false;\n }\n getRootParent(row) {\n while (row.parent) {\n row = row.parent;\n }\n return row;\n }\n}\nclass IgxHierarchicalGridRow extends BaseRow {\n /**\n * @hidden\n */\n constructor(grid, index, data) {\n super();\n this.grid = grid;\n this.index = index;\n this._data = data && data.addRow && data.recordRef ? data.recordRef : data;\n }\n /**\n * Returns true if row islands exist.\n */\n get hasChildren() {\n return !!this.grid.childLayoutKeys.length;\n }\n /**\n * Returns the view index calculated per the grid page.\n */\n get viewIndex() {\n const firstRowInd = this.grid.filteredSortedData.indexOf(this.grid.dataView[0]);\n const expandedRows = this.grid.filteredSortedData.filter((rec, ind) => {\n const rowID = this.grid.primaryKey ? rec[this.grid.primaryKey] : rec;\n return this.grid.expansionStates.get(rowID) && ind < firstRowInd;\n });\n return firstRowInd + expandedRows.length + this.index;\n }\n /**\n * Gets the rendered cells in the row component.\n */\n get cells() {\n const res = [];\n this.grid.columns.forEach(col => {\n const cell = new IgxGridCell(this.grid, this.index, col.field);\n res.push(cell);\n });\n return res;\n }\n}\nclass IgxGroupByRow {\n /**\n * The IGroupByRecord object, representing the group record, if the row is a GroupByRow.\n */\n get groupRow() {\n return this._groupRow ? this._groupRow : this.grid.dataView[this.index];\n }\n /**\n * Returns the child rows.\n */\n get children() {\n const children = [];\n this.groupRow.records.forEach((rec, i) => {\n const row = new IgxGridRow(this.grid, this.index + 1 + i, rec);\n children.push(row);\n });\n return children;\n }\n /**\n * Returns the view index calculated per the grid page.\n */\n get viewIndex() {\n if (this.grid.page) {\n const precedingDetailRows = [];\n const precedingGroupRows = [];\n const firstRow = this.grid.dataView[0];\n const hasDetailRows = this.grid.expansionStates.size;\n const hasGroupedRows = this.grid.groupingExpressions.length;\n let precedingSummaryRows = 0;\n const firstRowInd = this.grid.groupingFlatResult.indexOf(firstRow);\n // from groupingFlatResult, resolve two other collections:\n // precedingGroupedRows -> use it to resolve summaryRow for each group in previous pages\n // precedingDetailRows -> ise it to resolve the detail row for each expanded grid row in previous pages\n if (hasDetailRows || hasGroupedRows) {\n this.grid.groupingFlatResult.forEach((r, ind) => {\n const rowID = this.grid.primaryKey ? r[this.grid.primaryKey] : r;\n if (hasGroupedRows && ind < firstRowInd && this.grid.isGroupByRecord(r)) {\n precedingGroupRows.push(r);\n }\n if (this.grid.expansionStates.get(rowID) && ind < firstRowInd && !this.grid.isGroupByRecord(r)) {\n precedingDetailRows.push(r);\n }\n });\n }\n if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n // if firstRow is a child of the last item in precedingGroupRows,\n // then summaryRow for this given groupedRecord is rendered after firstRow,\n // i.e. need to decrease firstRowInd to account for the above.\n precedingSummaryRows = precedingGroupRows.filter(gr => this.grid.isExpandedGroup(gr)).length;\n if (this.grid.summaryPosition === GridSummaryPosition.bottom && precedingGroupRows.length &&\n precedingGroupRows[precedingGroupRows.length - 1].records.indexOf(firstRow) > -1) {\n precedingSummaryRows += -1;\n }\n }\n return precedingDetailRows.length + precedingSummaryRows + firstRowInd + this.index;\n }\n else {\n return this.index;\n }\n }\n /**\n * @hidden\n */\n constructor(grid, index, _groupRow) {\n this._groupRow = _groupRow;\n this.grid = grid;\n this.index = index;\n this.isGroupByRow = true;\n }\n /**\n * Gets whether the row is selected.\n * Default value is `false`.\n * ```typescript\n * row.selected = true;\n * ```\n */\n get selected() {\n return this.children.every(row => row.selected);\n }\n /**\n * Sets whether the row is selected.\n * Default value is `false`.\n * ```typescript\n * row.selected = !row.selected;\n * ```\n */\n set selected(val) {\n if (val) {\n this.children.forEach(row => {\n this.grid.selectionService.selectRowsWithNoEvent([row.key]);\n });\n }\n else {\n this.children.forEach(row => {\n this.grid.selectionService.deselectRowsWithNoEvent([row.key]);\n });\n }\n this.grid.cdr.markForCheck();\n }\n /**\n * Gets/sets whether the group row is expanded.\n * ```typescript\n * const groupRowExpanded = groupRow.expanded;\n * ```\n */\n get expanded() {\n return this.grid.isExpandedGroup(this.groupRow);\n }\n set expanded(value) {\n this.gridAPI.set_grouprow_expansion_state(this.groupRow, value);\n }\n isActive() {\n return this.grid.navigation.activeNode ? this.grid.navigation.activeNode.row === this.index : false;\n }\n /**\n * Toggles the group row expanded/collapsed state.\n * ```typescript\n * groupRow.toggle()\n * ```\n */\n toggle() {\n this.grid.toggleGroup(this.groupRow);\n }\n get gridAPI() {\n return this.grid.gridAPI;\n }\n}\nclass IgxSummaryRow {\n /**\n * The IGroupByRecord object, representing the group record, if the row is a GroupByRow.\n */\n get summaries() {\n return this._summaries ? this._summaries : this.grid.dataView[this.index].summaries;\n }\n /**\n * Returns the view index calculated per the grid page.\n */\n get viewIndex() {\n if (this.grid.hasSummarizedColumns && this.grid.page > 0) {\n if (this.gridType === GridInstanceType.Grid) {\n if (this.grid.page) {\n const precedingDetailRows = [];\n const precedingGroupRows = [];\n const firstRow = this.grid.dataView[0];\n const hasDetailRows = this.grid.expansionStates.size;\n const hasGroupedRows = this.grid.groupingExpressions.length;\n let precedingSummaryRows = 0;\n const firstRowInd = this.grid.groupingFlatResult.indexOf(firstRow);\n // from groupingFlatResult, resolve two other collections:\n // precedingGroupedRows -> use it to resolve summaryRow for each group in previous pages\n // precedingDetailRows -> ise it to resolve the detail row for each expanded grid row in previous pages\n if (hasDetailRows || hasGroupedRows) {\n this.grid.groupingFlatResult.forEach((r, ind) => {\n const rowID = this.grid.primaryKey ? r[this.grid.primaryKey] : r;\n if (hasGroupedRows && ind < firstRowInd && this.grid.isGroupByRecord(r)) {\n precedingGroupRows.push(r);\n }\n if (this.grid.expansionStates.get(rowID) && ind < firstRowInd &&\n !this.grid.isGroupByRecord(r)) {\n precedingDetailRows.push(r);\n }\n });\n }\n if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n // if firstRow is a child of the last item in precedingGroupRows,\n // then summaryRow for this given groupedRecord is rendered after firstRow,\n // i.e. need to decrease firstRowInd to account for the above.\n precedingSummaryRows = precedingGroupRows.filter(gr => this.grid.isExpandedGroup(gr)).length;\n if (this.grid.summaryPosition === GridSummaryPosition.bottom && precedingGroupRows.length &&\n precedingGroupRows[precedingGroupRows.length - 1].records.indexOf(firstRow) > -1) {\n precedingSummaryRows += -1;\n }\n }\n return precedingDetailRows.length + precedingSummaryRows + firstRowInd + this.index;\n }\n else {\n return this.index;\n }\n }\n else if (this.gridType === GridInstanceType.TreeGrid) {\n if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n const firstRowIndex = this.grid.processedExpandedFlatData.indexOf(this.grid.dataView[0].data);\n const precedingSummaryRows = this.grid.summaryPosition === GridSummaryPosition.bottom ?\n this.grid.rootRecords.indexOf(this.getRootParent(this.grid.dataView[0])) :\n this.grid.rootRecords.indexOf(this.getRootParent(this.grid.dataView[0])) + 1;\n return firstRowIndex + precedingSummaryRows + this.index;\n }\n }\n }\n return this.index + this.grid.page * this.grid.perPage;\n }\n /**\n * @hidden\n */\n constructor(grid, index, _summaries, type) {\n this._summaries = _summaries;\n this.grid = grid;\n this.index = index;\n this.isSummaryRow = true;\n this.gridType = type;\n }\n getRootParent(row) {\n while (row.parent) {\n row = row.parent;\n }\n return row;\n }\n}\n\n/**\n * @hidden\n * @internal\n */\nclass IgxGridCellStyleClassesPipe {\n transform(cssClasses, _, data, field, index, __) {\n if (!cssClasses) {\n return '';\n }\n const result = [];\n for (const cssClass of Object.keys(cssClasses)) {\n const callbackOrValue = cssClasses[cssClass];\n const apply = typeof callbackOrValue === 'function' ?\n callbackOrValue(data, field, resolveNestedPath(data, field), index) : callbackOrValue;\n if (apply) {\n result.push(cssClass);\n }\n }\n return result.join(' ');\n }\n}\nIgxGridCellStyleClassesPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCellStyleClassesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridCellStyleClassesPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCellStyleClassesPipe, name: \"igxCellStyleClasses\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCellStyleClassesPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'igxCellStyleClasses' }]\n }] });\n/**\n * @hidden\n * @internal\n */\nclass IgxGridCellStylesPipe {\n transform(styles, _, data, field, index, __) {\n const css = {};\n if (!styles) {\n return css;\n }\n for (const prop of Object.keys(styles)) {\n const res = styles[prop];\n css[prop] = typeof res === 'function' ? res(data, field, resolveNestedPath(data, field), index) : res;\n }\n return css;\n }\n}\nIgxGridCellStylesPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCellStylesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridCellStylesPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCellStylesPipe, name: \"igxCellStyles\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCellStylesPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'igxCellStyles'\n }]\n }] });\n/**\n * @hidden\n * @internal\n */\nclass IgxGridCellImageAltPipe {\n transform(value) {\n if (value) {\n const val = value.split('/');\n const imagename = val[val.length - 1].split('.');\n return imagename.length ? imagename[0] : '';\n }\n return value;\n }\n}\nIgxGridCellImageAltPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCellImageAltPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridCellImageAltPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCellImageAltPipe, name: \"igxCellImageAlt\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCellImageAltPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'igxCellImageAlt'\n }]\n }] });\n/**\n * @hidden\n * @internal\n */\nclass IgxGridRowClassesPipe {\n constructor(grid) {\n this.grid = grid;\n this.row = new IgxGridRow(this.grid, -1, {});\n }\n transform(cssClasses, row, editMode, selected, dirty, deleted, dragging, index, mrl, filteredOut, _rowData, _) {\n const result = new Set(['igx-grid__tr', index % 2 ? row.grid.evenRowCSS : row.grid.oddRowCSS]);\n const mapping = [\n [selected, 'igx-grid__tr--selected'],\n [editMode, 'igx-grid__tr--edit'],\n [dirty, 'igx-grid__tr--edited'],\n [deleted, 'igx-grid__tr--deleted'],\n [dragging, 'igx-grid__tr--drag'],\n [mrl, 'igx-grid__tr--mrl'],\n // Tree grid only\n [filteredOut, 'igx-grid__tr--filtered']\n ];\n for (const [state, _class] of mapping) {\n if (state) {\n result.add(_class);\n }\n }\n for (const cssClass of Object.keys(cssClasses !== null && cssClasses !== void 0 ? cssClasses : {})) {\n const callbackOrValue = cssClasses[cssClass];\n this.row.index = index;\n this.row._data = row.data;\n const apply = typeof callbackOrValue === 'function' ? callbackOrValue(this.row) : callbackOrValue;\n if (apply) {\n result.add(cssClass);\n }\n }\n return result;\n }\n}\nIgxGridRowClassesPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridRowClassesPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridRowClassesPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridRowClassesPipe, name: \"igxGridRowClasses\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridRowClassesPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'igxGridRowClasses' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n/**\n * @hidden\n * @internal\n */\nclass IgxGridRowStylesPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(styles, rowData, index, __) {\n const css = {};\n if (!styles) {\n return css;\n }\n for (const prop of Object.keys(styles)) {\n const cb = styles[prop];\n const data = this.grid.isTreeRow && this.grid.isTreeRow(rowData) ? rowData.data : rowData;\n const row = new IgxGridRow(this.grid, index, data);\n css[prop] = typeof cb === 'function' ? cb(row) : cb;\n }\n return css;\n }\n}\nIgxGridRowStylesPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridRowStylesPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridRowStylesPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridRowStylesPipe, name: \"igxGridRowStyles\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridRowStylesPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'igxGridRowStyles' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n/**\n * @hidden\n * @internal\n */\nclass IgxGridNotGroupedPipe {\n transform(value) {\n return value.filter(item => !item.columnGroup);\n }\n}\nIgxGridNotGroupedPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridNotGroupedPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridNotGroupedPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridNotGroupedPipe, name: \"igxNotGrouped\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridNotGroupedPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'igxNotGrouped'\n }]\n }] });\n/**\n * @hidden\n * @internal\n */\nclass IgxGridTopLevelColumns {\n transform(value) {\n return value.filter(item => item.level === 0);\n }\n}\nIgxGridTopLevelColumns.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridTopLevelColumns, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridTopLevelColumns.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridTopLevelColumns, name: \"igxTopLevel\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridTopLevelColumns, decorators: [{\n type: Pipe,\n args: [{\n name: 'igxTopLevel'\n }]\n }] });\n/**\n * @hidden\n * @internal\n */\nclass IgxGridFilterConditionPipe {\n transform(value) {\n return value.split(/(?=[A-Z])/).join(' ');\n }\n}\nIgxGridFilterConditionPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridFilterConditionPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridFilterConditionPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridFilterConditionPipe, name: \"filterCondition\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridFilterConditionPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'filterCondition',\n pure: true\n }]\n }] });\n/**\n * @hidden\n * @internal\n */\nclass IgxGridTransactionPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(collection, _id, _pipeTrigger) {\n if (this.grid.transactions.enabled) {\n const result = DataUtil.mergeTransactions(cloneArray(collection), this.grid.transactions.getAggregatedChanges(true), this.grid.primaryKey, this.grid.dataCloneStrategy);\n return result;\n }\n return collection;\n }\n}\nIgxGridTransactionPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridTransactionPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridTransactionPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridTransactionPipe, name: \"gridTransaction\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridTransactionPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'gridTransaction' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n/**\n * @hidden\n * @internal\n */\nclass IgxGridPaginatorOptionsPipe {\n transform(values) {\n return Array.from(new Set([...values])).sort((a, b) => a - b);\n }\n}\nIgxGridPaginatorOptionsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridPaginatorOptionsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridPaginatorOptionsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridPaginatorOptionsPipe, name: \"paginatorOptions\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridPaginatorOptionsPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'paginatorOptions' }]\n }] });\n/**\n * @hidden\n * @internal\n */\nclass IgxHasVisibleColumnsPipe {\n transform(values, hasVisibleColumns) {\n if (!(values && values.length)) {\n return values;\n }\n return hasVisibleColumns ? values : [];\n }\n}\nIgxHasVisibleColumnsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHasVisibleColumnsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxHasVisibleColumnsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHasVisibleColumnsPipe, name: \"visibleColumns\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHasVisibleColumnsPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'visibleColumns' }]\n }] });\n/** @hidden @internal */\nfunction buildDataView() {\n return function (_target, _propertyKey, descriptor) {\n const original = descriptor.value;\n descriptor.value = function (...args) {\n const result = original.apply(this, args);\n this.grid.buildDataView();\n return result;\n };\n return descriptor;\n };\n}\n/**\n * @hidden\n */\nclass IgxGridRowPinningPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(collection, id, isPinned = false, _pipeTrigger) {\n if (this.grid.hasPinnedRecords && isPinned) {\n const result = collection.filter(rec => !this.grid.isSummaryRow(rec) && this.grid.isRecordPinned(rec));\n result.sort((rec1, rec2) => this.grid.getInitialPinnedIndex(rec1) - this.grid.getInitialPinnedIndex(rec2));\n return result;\n }\n this.grid.unpinnedRecords = collection;\n if (!this.grid.hasPinnedRecords) {\n this.grid.pinnedRecords = [];\n return isPinned ? [] : collection;\n }\n return collection.map((rec) => !this.grid.isSummaryRow(rec) &&\n this.grid.isRecordPinned(rec) ? { recordRef: rec, ghostRecord: true } : rec);\n }\n}\nIgxGridRowPinningPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridRowPinningPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridRowPinningPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridRowPinningPipe, name: \"gridRowPinning\" });\n__decorate([\n buildDataView()\n], IgxGridRowPinningPipe.prototype, \"transform\", null);\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridRowPinningPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'gridRowPinning' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n }, propDecorators: { transform: [] } });\nclass IgxGridDataMapperPipe {\n transform(data, field, _, val, isNestedPath) {\n return isNestedPath ? resolveNestedPath(data, field) : val;\n }\n}\nIgxGridDataMapperPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridDataMapperPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridDataMapperPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridDataMapperPipe, name: \"dataMapper\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridDataMapperPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'dataMapper' }]\n }] });\nclass IgxStringReplacePipe {\n transform(value, search, replacement) {\n return value.replace(search, replacement);\n }\n}\nIgxStringReplacePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStringReplacePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxStringReplacePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStringReplacePipe, name: \"igxStringReplace\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStringReplacePipe, decorators: [{\n type: Pipe,\n args: [{ name: 'igxStringReplace' }]\n }] });\nclass IgxGridTransactionStatePipe {\n transform(row_id, field, rowEditable, transactions, _, __, ___) {\n var _a;\n if (rowEditable) {\n const rowCurrentState = transactions.getAggregatedValue(row_id, false);\n if (rowCurrentState) {\n const value = resolveNestedPath(rowCurrentState, field);\n return value !== undefined && value !== null;\n }\n }\n else {\n const transaction = transactions.getState(row_id);\n const value = resolveNestedPath((_a = transaction === null || transaction === void 0 ? void 0 : transaction.value) !== null && _a !== void 0 ? _a : {}, field);\n return transaction && transaction.value && (value || value === 0 || value === false);\n }\n }\n}\nIgxGridTransactionStatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridTransactionStatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridTransactionStatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridTransactionStatePipe, name: \"transactionState\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridTransactionStatePipe, decorators: [{\n type: Pipe,\n args: [{ name: 'transactionState' }]\n }] });\nclass IgxColumnFormatterPipe {\n transform(value, formatter, rowData, columnData) {\n return formatter(value, rowData, columnData);\n }\n}\nIgxColumnFormatterPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxColumnFormatterPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnFormatterPipe, name: \"columnFormatter\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnFormatterPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'columnFormatter' }]\n }] });\nclass IgxSummaryFormatterPipe {\n transform(summaryResult, summaryOperand, summaryFormatter) {\n return summaryFormatter(summaryResult, summaryOperand);\n }\n}\nIgxSummaryFormatterPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSummaryFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxSummaryFormatterPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSummaryFormatterPipe, name: \"summaryFormatter\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSummaryFormatterPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'summaryFormatter' }]\n }] });\nclass IgxGridAddRowPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(collection, isPinned = false, _pipeTrigger) {\n if (!this.grid.rowEditable || !this.grid.crudService.row || this.grid.crudService.row.getClassName() !== IgxAddRow.name ||\n !this.grid.crudService.addRowParent || isPinned !== this.grid.crudService.addRowParent.isPinned) {\n return collection;\n }\n const copy = collection.slice(0);\n const rec = this.grid.crudService.row.recordRef;\n copy.splice(this.grid.crudService.row.index, 0, rec);\n return copy;\n }\n}\nIgxGridAddRowPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridAddRowPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridAddRowPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridAddRowPipe, name: \"gridAddRow\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridAddRowPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'gridAddRow' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n\nclass IgxSummaryRowComponent {\n get dataRowIndex() {\n return this.index;\n }\n get minHeight() {\n return this.grid.summaryRowHeight - 1;\n }\n get summaryCells() {\n const res = new QueryList();\n if (!this._summaryCells) {\n return res;\n }\n const cList = this._summaryCells.filter(c => c.nativeElement.isConnected);\n res.reset(cList);\n return res;\n }\n set summaryCells(cells) { }\n constructor(grid, element, cdr) {\n this.grid = grid;\n this.element = element;\n this.cdr = cdr;\n this.firstCellIndentation = -1;\n }\n ngDoCheck() {\n this.cdr.markForCheck();\n }\n get nativeElement() {\n return this.element.nativeElement;\n }\n getColumnSummaries(columnName) {\n if (!this.summaries.get(columnName)) {\n return [];\n }\n return this.summaries.get(columnName);\n }\n /**\n * @hidden\n * @internal\n */\n isCellActive(visibleColumnIndex) {\n const node = this.grid.navigation.activeNode;\n return node ? node.row === this.index && node.column === visibleColumnIndex : false;\n }\n /**\n * @hidden\n */\n get pinnedColumns() {\n return this.grid.pinnedColumns;\n }\n /**\n * @hidden\n */\n get unpinnedColumns() {\n return this.grid.unpinnedColumns;\n }\n getContext(row) {\n return {\n $implicit: row\n };\n }\n}\nIgxSummaryRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSummaryRowComponent, deps: [{ token: IGX_GRID_BASE }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxSummaryRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSummaryRowComponent, selector: \"igx-grid-summary-row\", inputs: { summaries: \"summaries\", gridID: \"gridID\", index: \"index\", firstCellIndentation: \"firstCellIndentation\" }, host: { properties: { \"attr.data-rowIndex\": \"this.dataRowIndex\" } }, providers: [IgxForOfSyncService], viewQueries: [{ propertyName: \"virtDirRow\", first: true, predicate: [\"igxDirRef\"], descendants: true, read: IgxGridForOfDirective }, { propertyName: \"_summaryCells\", predicate: IgxSummaryCellComponent, descendants: true, read: IgxSummaryCellComponent }], ngImport: i0, template: \"\\n \\n \\n \\n 0 && grid.isPinningToStart\\\">\\n \\n \\n \\n \\n \\n \\n 0 && !grid.isPinningToStart\\\">\\n \\n \\n\\n\\n\\n \\n \\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: IgxGridForOfDirective, selector: \"[igxGridFor][igxGridForOf]\", inputs: [\"igxGridForOf\", \"igxGridForOfUniqueSizeCache\", \"igxGridForOfVariableSizes\"], outputs: [\"dataChanging\"] }, { kind: \"component\", type: IgxSummaryCellComponent, selector: \"igx-grid-summary-cell\", inputs: [\"summaryResults\", \"column\", \"firstCellIndentation\", \"hasSummary\", \"density\", \"summaryFormatter\", \"summaryTemplate\", \"active\", \"rowIndex\"] }, { kind: \"pipe\", type: IgxGridNotGroupedPipe, name: \"igxNotGrouped\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSummaryRowComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-summary-row', providers: [IgxForOfSyncService], template: \"\\n \\n \\n \\n 0 && grid.isPinningToStart\\\">\\n \\n \\n \\n \\n \\n \\n 0 && !grid.isPinningToStart\\\">\\n \\n \\n\\n\\n\\n \\n \\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }];\n }, propDecorators: { summaries: [{\n type: Input\n }], gridID: [{\n type: Input\n }], index: [{\n type: Input\n }], firstCellIndentation: [{\n type: Input\n }], dataRowIndex: [{\n type: HostBinding,\n args: ['attr.data-rowIndex']\n }], _summaryCells: [{\n type: ViewChildren,\n args: [IgxSummaryCellComponent, { read: IgxSummaryCellComponent }]\n }], virtDirRow: [{\n type: ViewChild,\n args: ['igxDirRef', { read: IgxGridForOfDirective }]\n }] } });\n\n/**\n * @hidden\n * @internal\n */\nclass IgxColumnResizerDirective {\n constructor(element, document, zone) {\n this.element = element;\n this.document = document;\n this.zone = zone;\n this.restrictHResizeMin = Number.MIN_SAFE_INTEGER;\n this.restrictHResizeMax = Number.MAX_SAFE_INTEGER;\n this.resizeEnd = new Subject();\n this.resizeStart = new Subject();\n // eslint-disable-next-line @angular-eslint/no-output-native\n this.resize = new Subject();\n this._destroy = new Subject();\n this.resizeStart.pipe(takeUntil(this._destroy), map((event) => event.clientX), switchMap((offset) => this.resize\n .pipe(takeUntil(this._destroy), takeUntil(this.resizeEnd), map((event) => event.clientX - offset))))\n .subscribe((pos) => {\n const left = this._left + pos;\n const min = this._left - this.restrictHResizeMin;\n const max = this._left + this.restrictHResizeMax;\n this.left = left < min ? min : left;\n if (left > max) {\n this.left = max;\n }\n });\n }\n ngOnInit() {\n this.zone.runOutsideAngular(() => {\n fromEvent(this.document.defaultView, 'mousemove')\n .pipe(takeUntil(this._destroy), throttle(() => interval(0, animationFrameScheduler)))\n .subscribe((res) => this.onMousemove(res));\n fromEvent(this.document.defaultView, 'mouseup')\n .pipe(takeUntil(this._destroy))\n .subscribe((res) => this.onMouseup(res));\n });\n }\n ngOnDestroy() {\n this._destroy.next(true);\n this._destroy.complete();\n }\n set left(val) {\n requestAnimationFrame(() => this.element.nativeElement.style.left = val + 'px');\n }\n set top(val) {\n if (this.restrictResizerTop != undefined) {\n requestAnimationFrame(() => this.element.nativeElement.style.top = this.restrictResizerTop + 'px');\n }\n else {\n requestAnimationFrame(() => this.element.nativeElement.style.top = val + 'px');\n }\n }\n onMouseup(event) {\n this.resizeEnd.next(event);\n this.resizeEnd.complete();\n }\n onMousedown(event) {\n event.preventDefault();\n const parent = this.element.nativeElement.parentElement.parentElement;\n this.left = this._left = event.clientX - parent.getBoundingClientRect().left;\n this.top = event.target.getBoundingClientRect().top - parent.getBoundingClientRect().top;\n this.resizeStart.next(event);\n }\n onMousemove(event) {\n event.preventDefault();\n this.resize.next(event);\n }\n}\nIgxColumnResizerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnResizerDirective, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nIgxColumnResizerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxColumnResizerDirective, selector: \"[igxResizer]\", inputs: { restrictHResizeMin: \"restrictHResizeMin\", restrictHResizeMax: \"restrictHResizeMax\", restrictResizerTop: \"restrictResizerTop\" }, outputs: { resizeEnd: \"resizeEnd\", resizeStart: \"resizeStart\", resize: \"resize\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnResizerDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxResizer]'\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i0.NgZone }];\n }, propDecorators: { restrictHResizeMin: [{\n type: Input\n }], restrictHResizeMax: [{\n type: Input\n }], restrictResizerTop: [{\n type: Input\n }], resizeEnd: [{\n type: Output\n }], resizeStart: [{\n type: Output\n }], resize: [{\n type: Output\n }] } });\n\n/**\n * @hidden\n * @internal\n */\nclass IgxColumnResizingService {\n constructor(zone) {\n this.zone = zone;\n /**\n * @hidden\n */\n this.resizeCursor = null;\n /**\n * @hidden\n */\n this.showResizer = false;\n }\n /**\n * @hidden\n */\n getColumnHeaderRenderedWidth() {\n return this.column.headerCell.nativeElement.getBoundingClientRect().width;\n }\n /**\n * @hidden\n */\n get resizerHeight() {\n let height = this.column.grid.getVisibleContentHeight();\n // Column height multiplier in case there are Column Layouts. The resizer height need to take into account rowStart.\n let columnHeightMultiplier = 1;\n if (this.column.columnLayoutChild) {\n columnHeightMultiplier = this.column.grid.multiRowLayoutRowSize - this.column.rowStart + 1;\n }\n if (this.column.level !== 0) {\n height -= this.column.topLevelParent.headerGroup.height - this.column.headerGroup.height * columnHeightMultiplier;\n }\n return height;\n }\n /**\n * Returns the minimal possible width to which the column can be resized.\n */\n get restrictResizeMin() {\n const actualWidth = this.getColumnHeaderRenderedWidth();\n const minWidth = this.column.minWidthPx < actualWidth ? this.column.minWidthPx : actualWidth;\n return actualWidth - minWidth;\n }\n /**\n * Returns the maximal possible width to which the column can be resized.\n */\n get restrictResizeMax() {\n const actualWidth = this.getColumnHeaderRenderedWidth();\n const maxWidth = this.column.maxWidthPx;\n if (this.column.maxWidth) {\n return maxWidth - actualWidth;\n }\n else {\n return Number.MAX_SAFE_INTEGER;\n }\n }\n /**\n * Autosizes the column to the longest currently visible cell value, including the header cell.\n * If the column has a predifined maxWidth and the autosized column width will become bigger than it,\n * then the column is sized to its maxWidth.\n */\n autosizeColumnOnDblClick() {\n const currentColWidth = this.getColumnHeaderRenderedWidth();\n this.column.width = this.column.getAutoSize();\n this.zone.run(() => { });\n this.column.grid.columnResized.emit({\n column: this.column,\n prevWidth: currentColWidth.toString(),\n newWidth: this.column.width\n });\n }\n /**\n * Resizes the column regaridng to the column minWidth and maxWidth.\n */\n resizeColumn(event) {\n this.showResizer = false;\n const diff = event.clientX - this.startResizePos;\n const colWidth = this.column.width;\n const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n let currentColWidth = parseFloat(colWidth);\n const actualWidth = this.getColumnHeaderRenderedWidth();\n currentColWidth = Number.isNaN(currentColWidth) ? parseFloat(actualWidth) : currentColWidth;\n if (this.column.grid.hasColumnLayouts) {\n this.resizeColumnLayoutFor(this.column, diff);\n }\n else if (isPercentageWidth) {\n this._handlePercentageResize(diff, this.column);\n }\n else {\n this._handlePixelResize(diff, this.column);\n }\n this.zone.run(() => { });\n if (currentColWidth !== parseFloat(this.column.width)) {\n this.column.grid.columnResized.emit({\n column: this.column,\n prevWidth: isPercentageWidth ? currentColWidth + '%' : currentColWidth + 'px',\n newWidth: this.column.width\n });\n }\n this.isColumnResizing = false;\n }\n _handlePixelResize(diff, column) {\n const currentColWidth = parseFloat(column.width);\n const colMinWidth = column.minWidthPx;\n const colMaxWidth = column.maxWidthPx;\n if (currentColWidth + diff < colMinWidth) {\n column.width = colMinWidth + 'px';\n }\n else if (colMaxWidth && (currentColWidth + diff > colMaxWidth)) {\n column.width = colMaxWidth + 'px';\n }\n else {\n column.width = (currentColWidth + diff) + 'px';\n }\n }\n _handlePercentageResize(diff, column) {\n const currentPercentWidth = parseFloat(column.width);\n const gridAvailableSize = column.grid.calcWidth;\n const diffPercentage = (diff / gridAvailableSize) * 100;\n const colMinWidth = column.minWidthPercent;\n const colMaxWidth = column.maxWidthPercent;\n if (currentPercentWidth + diffPercentage < colMinWidth) {\n column.width = colMinWidth + '%';\n }\n else if (colMaxWidth && (currentPercentWidth + diffPercentage > colMaxWidth)) {\n column.width = colMaxWidth + '%';\n }\n else {\n column.width = (currentPercentWidth + diffPercentage) + '%';\n }\n }\n getColMinWidth(column) {\n let currentColWidth = parseFloat(column.width);\n const actualWidth = column.headerCell.nativeElement.getBoundingClientRect().width;\n currentColWidth = Number.isNaN(currentColWidth) || (currentColWidth < actualWidth) ? actualWidth : currentColWidth;\n const actualMinWidth = parseFloat(column.minWidth);\n return actualMinWidth < currentColWidth ? actualMinWidth : currentColWidth;\n }\n resizeColumnLayoutFor(column, diff) {\n const relativeColumns = column.getResizableColUnderEnd();\n const combinedSpan = relativeColumns.reduce((acc, col) => acc + col.spanUsed, 0);\n // Resize first those who might reach min/max width\n let columnsToResize = [...relativeColumns];\n let updatedDiff = diff;\n let updatedCombinedSpan = combinedSpan;\n let setMinMaxCols = false;\n do {\n // Cycle them until there are not ones that reach min/max size, because the diff accumulates after each cycle.\n // This is because we can have at first 2 cols reaching min width and then after\n // recalculating the diff there might be 1 more that reaches min width.\n setMinMaxCols = false;\n let newCombinedSpan = updatedCombinedSpan;\n const newColsToResize = [];\n columnsToResize.forEach((col) => {\n const currentResizeWidth = parseFloat(col.target.calcWidth);\n const resizeScaled = (diff / updatedCombinedSpan) * col.target.gridColumnSpan;\n const colWidth = col.target.width;\n const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n const minWidth = col.target.minWidthPx;\n const maxWidth = col.target.maxWidthPx;\n if (currentResizeWidth + resizeScaled < minWidth) {\n col.target.width = isPercentageWidth ? col.target.minWidthPercent + '%' : minWidth + 'px';\n updatedDiff += (currentResizeWidth - minWidth);\n newCombinedSpan -= col.spanUsed;\n setMinMaxCols = true;\n }\n else if (maxWidth && (currentResizeWidth + resizeScaled > maxWidth)) {\n col.target.width = isPercentageWidth ? col.target.maxWidthPercent + '%' : col.target.maxWidthPx + 'px';\n updatedDiff -= (maxWidth - currentResizeWidth);\n newCombinedSpan -= col.spanUsed;\n setMinMaxCols = true;\n }\n else {\n // Save new ones that can be resized\n newColsToResize.push(col);\n }\n });\n updatedCombinedSpan = newCombinedSpan;\n columnsToResize = newColsToResize;\n } while (setMinMaxCols);\n // Those left that don't reach min/max size resize them normally.\n columnsToResize.forEach((col) => {\n const resizeScaled = (updatedDiff / updatedCombinedSpan) * col.target.gridColumnSpan;\n const colWidth = col.target.width;\n const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n if (isPercentageWidth) {\n this._handlePercentageResize(resizeScaled, col.target);\n }\n else {\n this._handlePixelResize(resizeScaled, col.target);\n }\n });\n }\n}\nIgxColumnResizingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnResizingService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nIgxColumnResizingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnResizingService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnResizingService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });\n\nclass IgxGridColumnResizerComponent {\n constructor(colResizingService) {\n this.colResizingService = colResizingService;\n }\n}\nIgxGridColumnResizerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridColumnResizerComponent, deps: [{ token: IgxColumnResizingService }], target: i0.ɵɵFactoryTarget.Component });\nIgxGridColumnResizerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridColumnResizerComponent, selector: \"igx-grid-column-resizer\", inputs: { restrictResizerTop: \"restrictResizerTop\" }, viewQueries: [{ propertyName: \"resizer\", first: true, predicate: IgxColumnResizerDirective, descendants: true, static: true }], ngImport: i0, template: \"
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: IgxColumnResizerDirective, selector: \"[igxResizer]\", inputs: [\"restrictHResizeMin\", \"restrictHResizeMax\", \"restrictResizerTop\"], outputs: [\"resizeEnd\", \"resizeStart\", \"resize\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridColumnResizerComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-column-resizer', template: \"
    \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: IgxColumnResizingService }]; }, propDecorators: { restrictResizerTop: [{\n type: Input\n }], resizer: [{\n type: ViewChild,\n args: [IgxColumnResizerDirective, { static: true }]\n }] } });\n\n/**\n * @hidden\n * @internal\n */\nclass IgxColumnMovingDragDirective extends IgxDragDirective {\n get draggable() {\n return this.column && (this.column.grid.moving || (this.column.groupable && !this.column.columnGroup));\n }\n get icon() {\n return this.cms.icon;\n }\n constructor(element, viewContainer, zone, renderer, cdr, cms, _platformUtil) {\n super(cdr, element, viewContainer, zone, renderer, _platformUtil);\n this.cms = cms;\n this._ghostClass = 'igx-grid__drag-ghost-image';\n this.ghostImgIconClass = 'igx-grid__drag-ghost-image-icon';\n this.ghostImgIconGroupClass = 'igx-grid__drag-ghost-image-icon-group';\n this.columnSelectedClass = 'igx-grid-th--selected';\n }\n ngOnDestroy() {\n this._unsubscribe();\n super.ngOnDestroy();\n }\n onEscape(event) {\n this.cms.cancelDrop = true;\n this.onPointerUp(event);\n }\n onPointerDown(event) {\n if (!this.draggable || event.target.getAttribute('draggable') === 'false') {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this._removeOnDestroy = false;\n this.cms.column = this.column;\n this.ghostClass = this._ghostClass;\n super.onPointerDown(event);\n this.column.grid.cdr.detectChanges();\n const args = {\n source: this.column\n };\n this.column.grid.columnMovingStart.emit(args);\n this.subscription$ = fromEvent(this.column.grid.document.defaultView, 'keydown').subscribe((ev) => {\n if (ev.key === this.platformUtil.KEYMAP.ESCAPE) {\n this.onEscape(ev);\n }\n });\n }\n onPointerMove(event) {\n event.preventDefault();\n super.onPointerMove(event);\n if (this._dragStarted && this.ghostElement && !this.cms.column) {\n this.cms.column = this.column;\n this.column.grid.cdr.detectChanges();\n }\n if (this.cms.column) {\n const args = {\n source: this.column,\n cancel: false\n };\n this.column.grid.columnMoving.emit(args);\n if (args.cancel) {\n this.onEscape(event);\n }\n }\n }\n onPointerUp(event) {\n // Run it explicitly inside the zone because sometimes onPointerUp executes after the code below.\n this.zone.run(() => {\n super.onPointerUp(event);\n this.cms.column = null;\n this.column.grid.cdr.detectChanges();\n });\n this._unsubscribe();\n }\n createGhost(pageX, pageY) {\n super.createGhost(pageX, pageY);\n this.ghostElement.style.height = null;\n this.ghostElement.style.minWidth = null;\n this.ghostElement.style.flexBasis = null;\n this.ghostElement.style.position = null;\n this.renderer.removeClass(this.ghostElement, this.columnSelectedClass);\n const icon = document.createElement('i');\n const text = document.createTextNode('block');\n icon.appendChild(text);\n icon.classList.add('material-icons');\n this.cms.icon = icon;\n if (!this.column.columnGroup) {\n this.renderer.addClass(icon, this.ghostImgIconClass);\n this.ghostElement.insertBefore(icon, this.ghostElement.firstElementChild);\n this.ghostLeft = this._ghostStartX = pageX - ((this.ghostElement.getBoundingClientRect().width / 3) * 2);\n this.ghostTop = this._ghostStartY = pageY - ((this.ghostElement.getBoundingClientRect().height / 3) * 2);\n }\n else {\n this.ghostElement.insertBefore(icon, this.ghostElement.childNodes[0]);\n this.renderer.addClass(icon, this.ghostImgIconGroupClass);\n this.ghostElement.children[0].style.paddingLeft = '0px';\n this.ghostLeft = this._ghostStartX = pageX - ((this.ghostElement.getBoundingClientRect().width / 3) * 2);\n this.ghostTop = this._ghostStartY = pageY - ((this.ghostElement.getBoundingClientRect().height / 3) * 2);\n }\n }\n _unsubscribe() {\n if (this.subscription$) {\n this.subscription$.unsubscribe();\n this.subscription$ = null;\n }\n }\n}\nIgxColumnMovingDragDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnMovingDragDirective, deps: [{ token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: IgxColumnMovingService }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive });\nIgxColumnMovingDragDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxColumnMovingDragDirective, selector: \"[igxColumnMovingDrag]\", inputs: { column: [\"igxColumnMovingDrag\", \"column\"] }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnMovingDragDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxColumnMovingDrag]' }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: IgxColumnMovingService }, { type: PlatformUtil }]; }, propDecorators: { column: [{\n type: Input,\n args: ['igxColumnMovingDrag']\n }] } });\n\n/**\n * An internal component representing a base group-by drop area.\n *\n * @hidden @internal\n */\nclass IgxGroupByAreaDirective {\n get cosyStyle() {\n return this.density === 'cosy';\n }\n get compactStyle() {\n return this.density === 'compact';\n }\n /**\n * The group-by expressions provided by the parent grid.\n */\n get expressions() {\n return this._expressions;\n }\n set expressions(value) {\n this._expressions = value;\n this.chipExpressions = this._expressions;\n this.expressionsChanged();\n this.expressionsChange.emit(this._expressions);\n }\n /**\n * The default message for the default drop area template.\n * Obviously, if another template is provided, this is ignored.\n */\n get dropAreaMessage() {\n var _a;\n return (_a = this._dropAreaMessage) !== null && _a !== void 0 ? _a : this.grid.resourceStrings.igx_grid_groupByArea_message;\n }\n set dropAreaMessage(value) {\n this._dropAreaMessage = value;\n }\n /** The native DOM element. Used in sizing calculations. */\n get nativeElement() {\n return this.ref.nativeElement;\n }\n constructor(ref, platform) {\n this.ref = ref;\n this.platform = platform;\n this.density = DisplayDensity.comfortable;\n this.defaultClass = true;\n this.expressionsChange = new EventEmitter();\n this._expressions = [];\n }\n get dropAreaVisible() {\n return (this.grid.columnInDrag && this.grid.columnInDrag.groupable) ||\n !this.expressions.length;\n }\n handleKeyDown(id, event) {\n if (this.platform.isActivationKey(event)) {\n this.updateGroupSorting(id);\n }\n }\n handleClick(id) {\n if (!this.grid.getColumnByName(id).groupable) {\n return;\n }\n this.updateGroupSorting(id);\n }\n onDragDrop(event) {\n var _a;\n const drag = event.detail.owner;\n if (drag instanceof IgxColumnMovingDragDirective) {\n const column = drag.column;\n if (!this.grid.columns.find(c => c === column)) {\n return;\n }\n const isGrouped = this.expressions.findIndex((item) => item.fieldName === column.field) !== -1;\n if (column.groupable && !isGrouped && !column.columnGroup && !!column.field) {\n const groupingExpression = {\n fieldName: column.field,\n dir: ((_a = this.grid.sortingExpressions.find(expr => expr.fieldName === column.field)) === null || _a === void 0 ? void 0 : _a.dir) || SortingDirection.Asc,\n ignoreCase: column.sortingIgnoreCase,\n strategy: column.sortStrategy,\n groupingComparer: column.groupingComparer\n };\n this.groupBy(groupingExpression);\n }\n }\n }\n getReorderedExpressions(chipsArray) {\n const newExpressions = [];\n chipsArray.forEach(chip => {\n var _a;\n const expr = this.expressions.find(item => item.fieldName === chip.id);\n // disallow changing order if there are columns with groupable: false\n if (!((_a = this.grid.getColumnByName(expr.fieldName)) === null || _a === void 0 ? void 0 : _a.groupable)) {\n return;\n }\n newExpressions.push(expr);\n });\n return newExpressions;\n }\n updateGroupSorting(id) {\n const expr = this.expressions.find(e => e.fieldName === id);\n expr.dir = 3 - expr.dir;\n const expressionsChangeEvent = this.grid.groupingExpressionsChange || this.expressionsChange;\n expressionsChangeEvent.emit(this.expressions);\n this.grid.pipeTrigger++;\n this.grid.notifyChanges();\n }\n expressionsChanged() {\n }\n}\nIgxGroupByAreaDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGroupByAreaDirective, deps: [{ token: i0.ElementRef }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive });\nIgxGroupByAreaDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGroupByAreaDirective, inputs: { dropAreaTemplate: \"dropAreaTemplate\", density: \"density\", grid: \"grid\", expressions: \"expressions\", dropAreaMessage: \"dropAreaMessage\" }, outputs: { expressionsChange: \"expressionsChange\" }, host: { properties: { \"class.igx-grid-grouparea\": \"this.defaultClass\", \"class.igx-grid-grouparea--cosy\": \"this.cosyStyle\", \"class.igx-grid-grouparea--compact\": \"this.compactStyle\" } }, viewQueries: [{ propertyName: \"chips\", predicate: IgxChipComponent, descendants: true }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGroupByAreaDirective, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: PlatformUtil }]; }, propDecorators: { dropAreaTemplate: [{\n type: Input\n }], density: [{\n type: Input\n }], defaultClass: [{\n type: HostBinding,\n args: ['class.igx-grid-grouparea']\n }], cosyStyle: [{\n type: HostBinding,\n args: ['class.igx-grid-grouparea--cosy']\n }], compactStyle: [{\n type: HostBinding,\n args: ['class.igx-grid-grouparea--compact']\n }], grid: [{\n type: Input\n }], expressions: [{\n type: Input\n }], dropAreaMessage: [{\n type: Input\n }], expressionsChange: [{\n type: Output\n }], chips: [{\n type: ViewChildren,\n args: [IgxChipComponent]\n }] } });\n/**\n * A pipe to circumvent the use of getters/methods just to get some additional\n * information from the grouping expression and pass it to the chip representing\n * that expression.\n *\n * @hidden @internal\n */\nclass IgxGroupByMetaPipe {\n transform(key, grid) {\n const column = grid.getColumnByName(key);\n return { groupable: !!(column === null || column === void 0 ? void 0 : column.groupable), title: (column === null || column === void 0 ? void 0 : column.header) || key };\n }\n}\nIgxGroupByMetaPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGroupByMetaPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGroupByMetaPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGroupByMetaPipe, name: \"igxGroupByMeta\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGroupByMetaPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'igxGroupByMeta' }]\n }] });\n\n/**\n * @hidden\n */\nclass IgxGroupByRowTemplateDirective {\n static ngTemplateContextGuard(_dir, ctx) {\n return true;\n }\n ;\n constructor(template) {\n this.template = template;\n }\n}\nIgxGroupByRowTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGroupByRowTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxGroupByRowTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGroupByRowTemplateDirective, selector: \"[igxGroupByRow]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGroupByRowTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxGroupByRow]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * @hidden\n */\nclass IgxGridDetailTemplateDirective {\n static ngTemplateContextGuard(_dir, ctx) {\n return true;\n }\n ;\n}\nIgxGridDetailTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridDetailTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxGridDetailTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridDetailTemplateDirective, selector: \"[igxGridDetail]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridDetailTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxGridDetail]'\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxRowExpandedIndicatorDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxRowExpandedIndicatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowExpandedIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxRowExpandedIndicatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowExpandedIndicatorDirective, selector: \"[igxRowExpandedIndicator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowExpandedIndicatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxRowExpandedIndicator]'\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxRowCollapsedIndicatorDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxRowCollapsedIndicatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowCollapsedIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxRowCollapsedIndicatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowCollapsedIndicatorDirective, selector: \"[igxRowCollapsedIndicator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowCollapsedIndicatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxRowCollapsedIndicator]'\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxHeaderExpandIndicatorDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxHeaderExpandIndicatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHeaderExpandIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxHeaderExpandIndicatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxHeaderExpandIndicatorDirective, selector: \"[igxHeaderExpandedIndicator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHeaderExpandIndicatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxHeaderExpandedIndicator]'\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxHeaderCollapseIndicatorDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxHeaderCollapseIndicatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHeaderCollapseIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxHeaderCollapseIndicatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxHeaderCollapseIndicatorDirective, selector: \"[igxHeaderCollapsedIndicator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHeaderCollapseIndicatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxHeaderCollapsedIndicator]'\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxExcelStyleHeaderIconDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxExcelStyleHeaderIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxExcelStyleHeaderIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxExcelStyleHeaderIconDirective, selector: \"[igxExcelStyleHeaderIcon]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxExcelStyleHeaderIconDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxExcelStyleHeaderIcon]'\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxSortHeaderIconDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxSortHeaderIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSortHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxSortHeaderIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSortHeaderIconDirective, selector: \"[igxSortHeaderIcon]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSortHeaderIconDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxSortHeaderIcon]'\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxSortAscendingHeaderIconDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxSortAscendingHeaderIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSortAscendingHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxSortAscendingHeaderIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSortAscendingHeaderIconDirective, selector: \"[igxSortAscendingHeaderIcon]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSortAscendingHeaderIconDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxSortAscendingHeaderIcon]'\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxSortDescendingHeaderIconDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxSortDescendingHeaderIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSortDescendingHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxSortDescendingHeaderIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSortDescendingHeaderIconDirective, selector: \"[igxSortDescendingHeaderIcon]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSortDescendingHeaderIconDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxSortDescendingHeaderIcon]'\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxGroupAreaDropDirective extends IgxDropDirective {\n constructor(groupArea, elementRef, renderer, zone) {\n super(elementRef, renderer, zone);\n this.groupArea = groupArea;\n this.elementRef = elementRef;\n this.hovered = false;\n }\n onDragEnter(event) {\n const drag = event.detail.owner;\n const column = drag.column;\n if (!this.columnBelongsToGrid(column)) {\n return;\n }\n const isGrouped = this.groupArea.expressions\n ? this.groupArea.expressions.findIndex((item) => item.fieldName === column.field) !== -1\n : false;\n if (column.groupable && !isGrouped && !column.columnGroup && !!column.field) {\n drag.icon.innerText = 'group_work';\n this.hovered = true;\n }\n else {\n drag.icon.innerText = 'block';\n this.hovered = false;\n }\n }\n onDragLeave(event) {\n const drag = event.detail.owner;\n const column = drag.column;\n if (!this.columnBelongsToGrid(column)) {\n return;\n }\n event.detail.owner.icon.innerText = 'block';\n this.hovered = false;\n }\n closestParentByAttr(elem, attr) {\n return elem.hasAttribute(attr) ?\n elem :\n this.closestParentByAttr(elem.parentElement, attr);\n }\n columnBelongsToGrid(column) {\n const elem = this.elementRef.nativeElement;\n const closestGridID = this.closestParentByAttr(elem, 'igxGroupAreaDrop').getAttribute('gridId');\n if (!column) {\n return false;\n }\n else {\n const grid = column.grid;\n if (!grid || grid.id !== closestGridID) {\n return false;\n }\n return true;\n }\n }\n}\nIgxGroupAreaDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGroupAreaDropDirective, deps: [{ token: IgxGroupByAreaDirective }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nIgxGroupAreaDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGroupAreaDropDirective, selector: \"[igxGroupAreaDrop]\", host: { properties: { \"class.igx-drop-area--hover\": \"this.hovered\" } }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGroupAreaDropDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxGroupAreaDrop]'\n }]\n }], ctorParameters: function () { return [{ type: IgxGroupByAreaDirective }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { hovered: [{\n type: HostBinding,\n args: ['class.igx-drop-area--hover']\n }] } });\n\nclass IgxQueryBuilderHeaderComponent {\n constructor() {\n this._resourceStrings = CurrentResourceStrings.QueryBuilderResStrings;\n /**\n * An @Input property to show/hide the legend.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.showLegend = true;\n }\n /**\n * Sets the resource strings.\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /**\n * Returns the resource strings.\n */\n get resourceStrings() {\n return this._resourceStrings;\n }\n}\nIgxQueryBuilderHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxQueryBuilderHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxQueryBuilderHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxQueryBuilderHeaderComponent, selector: \"igx-query-builder-header\", inputs: { title: \"title\", showLegend: \"showLegend\", resourceStrings: \"resourceStrings\" }, ngImport: i0, template: \"
    \\n
    \\n {{ title }}\\n \\n
    \\n
    \\n
    \\n {{this.resourceStrings.igx_query_builder_and_label}}\\n
    \\n
    \\n {{this.resourceStrings.igx_query_builder_or_label}}\\n
    \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxQueryBuilderHeaderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-query-builder-header', template: \"
    \\n
    \\n {{ title }}\\n \\n
    \\n
    \\n
    \\n {{this.resourceStrings.igx_query_builder_and_label}}\\n
    \\n
    \\n {{this.resourceStrings.igx_query_builder_or_label}}\\n
    \\n
    \\n
    \\n\" }]\n }], propDecorators: { title: [{\n type: Input\n }], showLegend: [{\n type: Input\n }], resourceStrings: [{\n type: Input\n }] } });\n\nconst DEFAULT_PIPE_DATE_FORMAT = 'mediumDate';\nconst DEFAULT_PIPE_TIME_FORMAT = 'mediumTime';\nconst DEFAULT_PIPE_DATE_TIME_FORMAT = 'medium';\nconst DEFAULT_PIPE_DIGITS_INFO = '1.0-3';\nconst DEFAULT_DATE_TIME_FORMAT = 'dd/MM/yyyy HH:mm:ss tt';\nconst DEFAULT_TIME_FORMAT = 'hh:mm:ss tt';\nclass IgxFieldFormatterPipe {\n transform(value, formatter, rowData, fieldData) {\n return formatter(value, rowData, fieldData);\n }\n}\nIgxFieldFormatterPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFieldFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxFieldFormatterPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFieldFormatterPipe, name: \"fieldFormatter\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFieldFormatterPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'fieldFormatter' }]\n }] });\n/**\n * @hidden @internal\n */\nclass ExpressionItem {\n constructor(parent) {\n this.parent = parent;\n }\n}\n/**\n * @hidden @internal\n */\nclass ExpressionGroupItem extends ExpressionItem {\n constructor(operator, parent) {\n super(parent);\n this.operator = operator;\n this.children = [];\n }\n}\n/**\n * @hidden @internal\n */\nclass ExpressionOperandItem extends ExpressionItem {\n constructor(expression, parent) {\n super(parent);\n this.expression = expression;\n }\n}\n/**\n * A component used for operating with complex filters by creating or editing conditions\n * and grouping them using AND/OR logic.\n * It is used internally in the Advanced Filtering of the Grid.\n *\n * @example\n * ```html\n * \n * \n * ```\n */\nclass IgxQueryBuilderComponent extends DisplayDensityBase {\n /**\n * @hidden @internal\n */\n set editingInputsContainer(value) {\n if ((value && !this._editingInputsContainer) ||\n (value && this._editingInputsContainer && this._editingInputsContainer.nativeElement !== value.nativeElement)) {\n requestAnimationFrame(() => {\n this.scrollElementIntoView(value.nativeElement);\n });\n }\n this._editingInputsContainer = value;\n }\n /**\n * @hidden @internal\n */\n get editingInputsContainer() {\n return this._editingInputsContainer;\n }\n /**\n * @hidden @internal\n */\n set addModeContainer(value) {\n if ((value && !this._addModeContainer) ||\n (value && this._addModeContainer && this._addModeContainer.nativeElement !== value.nativeElement)) {\n requestAnimationFrame(() => {\n this.scrollElementIntoView(value.nativeElement);\n });\n }\n this._addModeContainer = value;\n }\n /**\n * @hidden @internal\n */\n get addModeContainer() {\n return this._addModeContainer;\n }\n /**\n * @hidden @internal\n */\n set currentGroupButtonsContainer(value) {\n if ((value && !this._currentGroupButtonsContainer) ||\n (value && this._currentGroupButtonsContainer && this._currentGroupButtonsContainer.nativeElement !== value.nativeElement)) {\n requestAnimationFrame(() => {\n this.scrollElementIntoView(value.nativeElement);\n });\n }\n this._currentGroupButtonsContainer = value;\n }\n /**\n * @hidden @internal\n */\n get currentGroupButtonsContainer() {\n return this._currentGroupButtonsContainer;\n }\n constructor(cdr, iconService, platform, _localeId, _displayDensityOptions) {\n super(_displayDensityOptions);\n this.cdr = cdr;\n this.iconService = iconService;\n this.platform = platform;\n this._localeId = _localeId;\n this._displayDensityOptions = _displayDensityOptions;\n /**\n * @hidden @internal\n */\n this.cssClass = 'igx-query-builder';\n /**\n * @hidden @internal\n */\n this.display = 'block';\n /**\n * @hidden @internal\n */\n this.selectedExpressions = [];\n /**\n * @hidden @internal\n */\n this.selectedGroups = [];\n /**\n * @hidden @internal\n */\n this.lastActiveNode = {};\n /**\n * @hidden @internal\n */\n this.fieldSelectOverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: false\n };\n /**\n * @hidden @internal\n */\n this.conditionSelectOverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: false\n };\n this.destroy$ = new Subject();\n this._dblClickDelay = 200;\n this._preventChipClick = false;\n this._resourceStrings = CurrentResourceStrings.QueryBuilderResStrings;\n this._positionSettings = {\n horizontalStartPoint: HorizontalAlignment.Right,\n verticalStartPoint: VerticalAlignment.Top\n };\n /**\n * Event fired as the expression tree is changed.\n *\n * ```html\n * \n * ```\n */\n this.expressionTreeChange = new EventEmitter();\n /**\n * @hidden @internal\n */\n this.overlaySettings = {\n closeOnOutsideClick: false,\n modal: false,\n positionStrategy: new ConnectedPositioningStrategy(this._positionSettings),\n scrollStrategy: new CloseScrollStrategy()\n };\n this.locale = this.locale || this._localeId;\n }\n /**\n * @hidden @internal\n */\n ngAfterViewInit() {\n this.overlaySettings.outlet = this.overlayOutlet;\n this.fieldSelectOverlaySettings.outlet = this.overlayOutlet;\n this.conditionSelectOverlaySettings.outlet = this.overlayOutlet;\n }\n /**\n * @hidden @internal\n */\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n /**\n * @hidden @internal\n */\n set selectedField(value) {\n const oldValue = this._selectedField;\n if (this._selectedField !== value) {\n this._selectedField = value;\n if (oldValue && this._selectedField && this._selectedField.dataType !== oldValue.dataType) {\n this.selectedCondition = null;\n this.searchValue = null;\n this.cdr.detectChanges();\n }\n }\n }\n /**\n * @hidden @internal\n */\n get selectedField() {\n return this._selectedField;\n }\n /**\n * Returns the fields.\n */\n get fields() {\n return this._fields;\n }\n /**\n * An @Input property that sets the fields.\n */\n set fields(fields) {\n this._fields = fields;\n if (this._fields) {\n this.registerSVGIcons();\n this._fields.forEach(field => {\n this.setFilters(field);\n this.setFormat(field);\n });\n }\n }\n /**\n * Returns the expression tree.\n */\n get expressionTree() {\n return this._expressionTree;\n }\n /**\n * An @Input property that sets the expression tree.\n */\n set expressionTree(expressionTree) {\n this._expressionTree = expressionTree;\n this.init();\n }\n /**\n * Gets the `locale` of the query builder.\n * If not set, defaults to application's locale.\n */\n get locale() {\n return this._locale;\n }\n /**\n * Sets the `locale` of the query builder.\n * Expects a valid BCP 47 language tag.\n */\n set locale(value) {\n this._locale = value;\n // if value is invalid, set it back to _localeId\n try {\n getLocaleFirstDayOfWeek(this._locale);\n }\n catch (e) {\n this._locale = this._localeId;\n }\n }\n /**\n * Sets the resource strings.\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /**\n * Returns the resource strings.\n */\n get resourceStrings() {\n return this._resourceStrings;\n }\n /**\n * @hidden @internal\n */\n setPickerOutlet(outlet) {\n this.pickerOutlet = outlet;\n }\n /**\n * @hidden @internal\n */\n get isContextMenuVisible() {\n return !this.contextMenuToggle.collapsed;\n }\n /**\n * @hidden @internal\n */\n get hasEditedExpression() {\n return this.editedExpression !== undefined && this.editedExpression !== null;\n }\n /**\n * @hidden @internal\n */\n addCondition(parent, afterExpression) {\n this.cancelOperandAdd();\n const operandItem = new ExpressionOperandItem({\n fieldName: null,\n condition: null,\n ignoreCase: true,\n searchVal: null\n }, parent);\n if (afterExpression) {\n const index = parent.children.indexOf(afterExpression);\n parent.children.splice(index + 1, 0, operandItem);\n }\n else {\n parent.children.push(operandItem);\n }\n this.enterExpressionEdit(operandItem);\n }\n /**\n * @hidden @internal\n */\n addAndGroup(parent, afterExpression) {\n this.addGroup(FilteringLogic.And, parent, afterExpression);\n }\n /**\n * @hidden @internal\n */\n addOrGroup(parent, afterExpression) {\n this.addGroup(FilteringLogic.Or, parent, afterExpression);\n }\n /**\n * @hidden @internal\n */\n endGroup(groupItem) {\n this.currentGroup = groupItem.parent;\n }\n /**\n * @hidden @internal\n */\n commitOperandEdit() {\n if (this.editedExpression) {\n this.editedExpression.expression.fieldName = this.selectedField.field;\n this.editedExpression.expression.condition = this.selectedField.filters.condition(this.selectedCondition);\n this.editedExpression.expression.searchVal = DataUtil.parseValue(this.selectedField.dataType, this.searchValue);\n this.editedExpression.fieldLabel = this.selectedField.label\n ? this.selectedField.label\n : this.selectedField.header\n ? this.selectedField.header\n : this.selectedField.field;\n this.editedExpression.inEditMode = false;\n this.editedExpression = null;\n }\n this._expressionTree = this.createExpressionTreeFromGroupItem(this.rootGroup);\n this.expressionTreeChange.emit();\n }\n /**\n * @hidden @internal\n */\n cancelOperandAdd() {\n if (this.addModeExpression) {\n this.addModeExpression.inAddMode = false;\n this.addModeExpression = null;\n }\n }\n /**\n * @hidden @internal\n */\n cancelOperandEdit() {\n if (this.editedExpression) {\n this.editedExpression.inEditMode = false;\n if (!this.editedExpression.expression.fieldName) {\n this.deleteItem(this.editedExpression);\n }\n this.editedExpression = null;\n }\n }\n /**\n * @hidden @internal\n */\n operandCanBeCommitted() {\n return this.selectedField && this.selectedCondition &&\n (!!this.searchValue || this.selectedField.filters.condition(this.selectedCondition).isUnary);\n }\n /**\n * @hidden @internal\n */\n exitOperandEdit() {\n if (!this.editedExpression) {\n return;\n }\n if (this.operandCanBeCommitted()) {\n this.commitOperandEdit();\n }\n else {\n this.cancelOperandEdit();\n }\n }\n /**\n * @hidden @internal\n */\n isExpressionGroup(expression) {\n return expression instanceof ExpressionGroupItem;\n }\n /**\n * @hidden @internal\n */\n onChipRemove(expressionItem) {\n this.deleteItem(expressionItem);\n }\n /**\n * @hidden @internal\n */\n onChipClick(expressionItem) {\n this._clickTimer = setTimeout(() => {\n if (!this._preventChipClick) {\n this.onToggleExpression(expressionItem);\n }\n this._preventChipClick = false;\n }, this._dblClickDelay);\n }\n /**\n * @hidden @internal\n */\n onChipDblClick(expressionItem) {\n clearTimeout(this._clickTimer);\n this._preventChipClick = true;\n this.enterExpressionEdit(expressionItem);\n }\n /**\n * @hidden @internal\n */\n enterExpressionEdit(expressionItem) {\n var _a, _b;\n this.clearSelection();\n this.exitOperandEdit();\n this.cancelOperandAdd();\n if (this.editedExpression) {\n this.editedExpression.inEditMode = false;\n }\n expressionItem.hovered = false;\n this.selectedField = expressionItem.expression.fieldName ?\n this.fields.find(field => field.field === expressionItem.expression.fieldName) : null;\n this.selectedCondition = expressionItem.expression.condition ?\n expressionItem.expression.condition.name : null;\n this.searchValue = expressionItem.expression.searchVal;\n expressionItem.inEditMode = true;\n this.editedExpression = expressionItem;\n this.cdr.detectChanges();\n this.fieldSelectOverlaySettings.target = this.fieldSelect.element;\n this.fieldSelectOverlaySettings.excludeFromOutsideClick = [this.fieldSelect.element];\n this.fieldSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n this.conditionSelectOverlaySettings.target = this.conditionSelect.element;\n this.conditionSelectOverlaySettings.excludeFromOutsideClick = [this.conditionSelect.element];\n this.conditionSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n if (!this.selectedField) {\n this.fieldSelect.input.nativeElement.focus();\n }\n else if (this.selectedField.filters.condition(this.selectedCondition).isUnary) {\n this.conditionSelect.input.nativeElement.focus();\n }\n else {\n const input = ((_a = this.searchValueInput) === null || _a === void 0 ? void 0 : _a.nativeElement) || ((_b = this.picker) === null || _b === void 0 ? void 0 : _b.getEditElement());\n input.focus();\n }\n }\n /**\n * @hidden @internal\n */\n clearSelection() {\n for (const group of this.selectedGroups) {\n group.selected = false;\n }\n this.selectedGroups = [];\n for (const expr of this.selectedExpressions) {\n expr.selected = false;\n }\n this.selectedExpressions = [];\n this.toggleContextMenu();\n }\n /**\n * @hidden @internal\n */\n enterExpressionAdd(expressionItem) {\n this.clearSelection();\n this.exitOperandEdit();\n if (this.addModeExpression) {\n this.addModeExpression.inAddMode = false;\n }\n expressionItem.inAddMode = true;\n this.addModeExpression = expressionItem;\n if (expressionItem.selected) {\n this.toggleExpression(expressionItem);\n }\n }\n /**\n * @hidden @internal\n */\n contextMenuClosed() {\n this.contextualGroup = null;\n }\n /**\n * @hidden @internal\n */\n onKeyDown(eventArgs) {\n eventArgs.stopPropagation();\n const key = eventArgs.key;\n if (!this.contextMenuToggle.collapsed && (key === this.platform.KEYMAP.ESCAPE)) {\n this.clearSelection();\n }\n }\n /**\n * @hidden @internal\n */\n createAndGroup() {\n this.createGroup(FilteringLogic.And);\n }\n /**\n * @hidden @internal\n */\n createOrGroup() {\n this.createGroup(FilteringLogic.Or);\n }\n /**\n * @hidden @internal\n */\n deleteFilters() {\n for (const expr of this.selectedExpressions) {\n this.deleteItem(expr);\n }\n this.clearSelection();\n }\n /**\n * @hidden @internal\n */\n onGroupClick(groupItem) {\n this.toggleGroup(groupItem);\n }\n /**\n * @hidden @internal\n */\n ungroup() {\n const selectedGroup = this.contextualGroup;\n const parent = selectedGroup.parent;\n if (parent) {\n const index = parent.children.indexOf(selectedGroup);\n parent.children.splice(index, 1, ...selectedGroup.children);\n for (const expr of selectedGroup.children) {\n expr.parent = parent;\n }\n }\n this.clearSelection();\n this.commitOperandEdit();\n }\n /**\n * @hidden @internal\n */\n deleteGroup() {\n const selectedGroup = this.contextualGroup;\n const parent = selectedGroup.parent;\n if (parent) {\n const index = parent.children.indexOf(selectedGroup);\n parent.children.splice(index, 1);\n }\n else {\n this.rootGroup = null;\n }\n this.clearSelection();\n this.commitOperandEdit();\n }\n /**\n * @hidden @internal\n */\n selectFilteringLogic(event) {\n this.contextualGroup.operator = event.index;\n this.commitOperandEdit();\n }\n /**\n * @hidden @internal\n */\n getConditionFriendlyName(name) {\n return this.resourceStrings[`igx_query_builder_filter_${name}`] || name;\n }\n /**\n * @hidden @internal\n */\n isDate(value) {\n return value instanceof Date;\n }\n /**\n * @hidden @internal\n */\n onExpressionsScrolled() {\n if (!this.contextMenuToggle.collapsed) {\n this.calculateContextMenuTarget();\n this.contextMenuToggle.reposition();\n }\n }\n /**\n * @hidden @internal\n */\n invokeClick(eventArgs) {\n if (this.platform.isActivationKey(eventArgs)) {\n eventArgs.preventDefault();\n eventArgs.currentTarget.click();\n }\n }\n /**\n * @hidden @internal\n */\n openPicker(args) {\n if (this.platform.isActivationKey(args)) {\n args.preventDefault();\n this.picker.open();\n }\n }\n /**\n * @hidden @internal\n */\n onOutletPointerDown(event) {\n // This prevents closing the select's dropdown when clicking the scroll\n event.preventDefault();\n }\n /**\n * @hidden @internal\n */\n getConditionList() {\n return this.selectedField ? this.selectedField.filters.conditionList() : [];\n }\n /**\n * @hidden @internal\n */\n getFormatter(field) {\n return this.fields.find(el => el.field === field).formatter;\n }\n /**\n * @hidden @internal\n */\n getFormat(field) {\n return this.fields.find(el => el.field === field).pipeArgs.format;\n }\n /**\n * @hidden @internal\n */\n setAddButtonFocus() {\n if (this.addRootAndGroupButton) {\n this.addRootAndGroupButton.nativeElement.focus();\n }\n else if (this.addConditionButton) {\n this.addConditionButton.nativeElement.focus();\n }\n }\n /**\n * @hidden @internal\n */\n context(expression, afterExpression) {\n return {\n $implicit: expression,\n afterExpression\n };\n }\n /**\n * @hidden @internal\n */\n onChipSelectionEnd() {\n const contextualGroup = this.findSingleSelectedGroup();\n if (contextualGroup || this.selectedExpressions.length > 1) {\n this.contextualGroup = contextualGroup;\n this.calculateContextMenuTarget();\n if (this.contextMenuToggle.collapsed) {\n this.contextMenuToggle.open(this.overlaySettings);\n }\n else {\n this.contextMenuToggle.reposition();\n }\n }\n }\n setFormat(field) {\n if (!field.pipeArgs) {\n field.pipeArgs = { digitsInfo: DEFAULT_PIPE_DIGITS_INFO };\n }\n if (!field.pipeArgs.format) {\n field.pipeArgs.format = field.dataType === DataType.Time ?\n DEFAULT_PIPE_TIME_FORMAT : field.dataType === DataType.DateTime ?\n DEFAULT_PIPE_DATE_TIME_FORMAT : DEFAULT_PIPE_DATE_FORMAT;\n }\n if (!field.defaultDateTimeFormat) {\n field.defaultDateTimeFormat = DEFAULT_DATE_TIME_FORMAT;\n }\n if (!field.defaultTimeFormat) {\n field.defaultTimeFormat = DEFAULT_TIME_FORMAT;\n }\n }\n setFilters(field) {\n if (!field.filters) {\n switch (field.dataType) {\n case DataType.Boolean:\n field.filters = IgxBooleanFilteringOperand.instance();\n break;\n case DataType.Number:\n case DataType.Currency:\n case DataType.Percent:\n field.filters = IgxNumberFilteringOperand.instance();\n break;\n case DataType.Date:\n field.filters = IgxDateFilteringOperand.instance();\n break;\n case DataType.Time:\n field.filters = IgxTimeFilteringOperand.instance();\n break;\n case DataType.DateTime:\n field.filters = IgxDateTimeFilteringOperand.instance();\n break;\n case DataType.String:\n default:\n field.filters = IgxStringFilteringOperand.instance();\n break;\n }\n }\n }\n onToggleExpression(expressionItem) {\n this.exitOperandEdit();\n this.toggleExpression(expressionItem);\n this.toggleContextMenu();\n }\n toggleExpression(expressionItem) {\n expressionItem.selected = !expressionItem.selected;\n if (expressionItem.selected) {\n this.selectedExpressions.push(expressionItem);\n }\n else {\n const index = this.selectedExpressions.indexOf(expressionItem);\n this.selectedExpressions.splice(index, 1);\n this.deselectParentRecursive(expressionItem);\n }\n }\n addGroup(operator, parent, afterExpression) {\n this.cancelOperandAdd();\n const groupItem = new ExpressionGroupItem(operator, parent);\n if (parent) {\n if (afterExpression) {\n const index = parent.children.indexOf(afterExpression);\n parent.children.splice(index + 1, 0, groupItem);\n }\n else {\n parent.children.push(groupItem);\n }\n }\n else {\n this.rootGroup = groupItem;\n }\n this.addCondition(groupItem);\n this.currentGroup = groupItem;\n }\n createExpressionGroupItem(expressionTree, parent) {\n let groupItem;\n if (expressionTree) {\n groupItem = new ExpressionGroupItem(expressionTree.operator, parent);\n for (const expr of expressionTree.filteringOperands) {\n if (expr instanceof FilteringExpressionsTree) {\n groupItem.children.push(this.createExpressionGroupItem(expr, groupItem));\n }\n else {\n const filteringExpr = expr;\n const exprCopy = {\n fieldName: filteringExpr.fieldName,\n condition: filteringExpr.condition,\n searchVal: filteringExpr.searchVal,\n ignoreCase: filteringExpr.ignoreCase\n };\n const operandItem = new ExpressionOperandItem(exprCopy, groupItem);\n const field = this.fields.find(el => el.field === filteringExpr.fieldName);\n operandItem.fieldLabel = field.label || field.header || field.field;\n groupItem.children.push(operandItem);\n }\n }\n }\n return groupItem;\n }\n /**\n * @hidden @internal\n */\n createExpressionTreeFromGroupItem(groupItem) {\n if (!groupItem) {\n return null;\n }\n const expressionTree = new FilteringExpressionsTree(groupItem.operator);\n for (const item of groupItem.children) {\n if (item instanceof ExpressionGroupItem) {\n const subTree = this.createExpressionTreeFromGroupItem(item);\n expressionTree.filteringOperands.push(subTree);\n }\n else {\n expressionTree.filteringOperands.push(item.expression);\n }\n }\n return expressionTree;\n }\n toggleContextMenu() {\n const contextualGroup = this.findSingleSelectedGroup();\n if (contextualGroup || this.selectedExpressions.length > 1) {\n this.contextualGroup = contextualGroup;\n if (contextualGroup) {\n this.filteringLogics = [\n {\n label: this.resourceStrings.igx_query_builder_filter_operator_and,\n selected: contextualGroup.operator === FilteringLogic.And\n },\n {\n label: this.resourceStrings.igx_query_builder_filter_operator_or,\n selected: contextualGroup.operator === FilteringLogic.Or\n }\n ];\n }\n }\n else if (this.contextMenuToggle) {\n this.contextMenuToggle.close();\n }\n }\n findSingleSelectedGroup() {\n for (const group of this.selectedGroups) {\n const containsAllSelectedExpressions = this.selectedExpressions.every(op => this.isInsideGroup(op, group));\n if (containsAllSelectedExpressions) {\n return group;\n }\n }\n return null;\n }\n isInsideGroup(item, group) {\n if (!item) {\n return false;\n }\n if (item.parent === group) {\n return true;\n }\n return this.isInsideGroup(item.parent, group);\n }\n deleteItem(expressionItem) {\n if (!expressionItem.parent) {\n this.rootGroup = null;\n this.currentGroup = null;\n this._expressionTree = null;\n return;\n }\n if (expressionItem === this.currentGroup) {\n this.currentGroup = this.currentGroup.parent;\n }\n const children = expressionItem.parent.children;\n const index = children.indexOf(expressionItem);\n children.splice(index, 1);\n this._expressionTree = this.createExpressionTreeFromGroupItem(this.rootGroup);\n if (!children.length) {\n this.deleteItem(expressionItem.parent);\n }\n this.expressionTreeChange.emit();\n }\n createGroup(operator) {\n const chips = this.chips.toArray();\n const minIndex = this.selectedExpressions.reduce((i, e) => Math.min(i, chips.findIndex(c => c.data === e)), Number.MAX_VALUE);\n const firstExpression = chips[minIndex].data;\n const parent = firstExpression.parent;\n const groupItem = new ExpressionGroupItem(operator, parent);\n const index = parent.children.indexOf(firstExpression);\n parent.children.splice(index, 0, groupItem);\n for (const expr of this.selectedExpressions) {\n groupItem.children.push(expr);\n this.deleteItem(expr);\n expr.parent = groupItem;\n }\n this.clearSelection();\n }\n toggleGroup(groupItem) {\n this.exitOperandEdit();\n if (groupItem.children && groupItem.children.length) {\n this.toggleGroupRecursive(groupItem, !groupItem.selected);\n if (!groupItem.selected) {\n this.deselectParentRecursive(groupItem);\n }\n this.toggleContextMenu();\n }\n }\n toggleGroupRecursive(groupItem, selected) {\n if (groupItem.selected !== selected) {\n groupItem.selected = selected;\n if (groupItem.selected) {\n this.selectedGroups.push(groupItem);\n }\n else {\n const index = this.selectedGroups.indexOf(groupItem);\n this.selectedGroups.splice(index, 1);\n }\n }\n for (const expr of groupItem.children) {\n if (expr instanceof ExpressionGroupItem) {\n this.toggleGroupRecursive(expr, selected);\n }\n else {\n const operandExpression = expr;\n if (operandExpression.selected !== selected) {\n this.toggleExpression(operandExpression);\n }\n }\n }\n }\n deselectParentRecursive(expressionItem) {\n const parent = expressionItem.parent;\n if (parent) {\n if (parent.selected) {\n parent.selected = false;\n const index = this.selectedGroups.indexOf(parent);\n this.selectedGroups.splice(index, 1);\n }\n this.deselectParentRecursive(parent);\n }\n }\n calculateContextMenuTarget() {\n const containerRect = this.expressionsContainer.nativeElement.getBoundingClientRect();\n const chips = this.chips.filter(c => this.selectedExpressions.indexOf(c.data) !== -1);\n let minTop = chips.reduce((t, c) => Math.min(t, c.nativeElement.getBoundingClientRect().top), Number.MAX_VALUE);\n minTop = Math.max(containerRect.top, minTop);\n minTop = Math.min(containerRect.bottom, minTop);\n let maxRight = chips.reduce((r, c) => Math.max(r, c.nativeElement.getBoundingClientRect().right), 0);\n maxRight = Math.max(maxRight, containerRect.left);\n maxRight = Math.min(maxRight, containerRect.right);\n this.overlaySettings.target = new Point(maxRight, minTop);\n }\n scrollElementIntoView(target) {\n const container = this.expressionsContainer.nativeElement;\n const targetOffset = target.offsetTop - container.offsetTop;\n const delta = 10;\n if (container.scrollTop + delta > targetOffset) {\n container.scrollTop = targetOffset - delta;\n }\n else if (container.scrollTop + container.clientHeight < targetOffset + target.offsetHeight + delta) {\n container.scrollTop = targetOffset + target.offsetHeight + delta - container.clientHeight;\n }\n }\n init() {\n this.clearSelection();\n this.cancelOperandAdd();\n this.cancelOperandEdit();\n this.rootGroup = this.createExpressionGroupItem(this.expressionTree);\n this.currentGroup = this.rootGroup;\n }\n registerSVGIcons() {\n const editorIcons = editor;\n editorIcons.forEach(icon => this.iconService.addSvgIconFromText(icon.name, icon.value, 'imx-icons'));\n }\n}\nIgxQueryBuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxQueryBuilderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: IgxIconService }, { token: PlatformUtil }, { token: LOCALE_ID }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxQueryBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxQueryBuilderComponent, selector: \"igx-query-builder\", inputs: { fields: \"fields\", expressionTree: \"expressionTree\", locale: \"locale\", resourceStrings: \"resourceStrings\" }, outputs: { expressionTreeChange: \"expressionTreeChange\" }, host: { properties: { \"class.igx-query-builder\": \"this.cssClass\", \"style.display\": \"this.display\" } }, queries: [{ propertyName: \"headerContent\", first: true, predicate: IgxQueryBuilderHeaderComponent, descendants: true }], viewQueries: [{ propertyName: \"fieldSelect\", first: true, predicate: [\"fieldSelect\"], descendants: true, read: IgxSelectComponent }, { propertyName: \"conditionSelect\", first: true, predicate: [\"conditionSelect\"], descendants: true, read: IgxSelectComponent }, { propertyName: \"searchValueInput\", first: true, predicate: [\"searchValueInput\"], descendants: true, read: ElementRef }, { propertyName: \"picker\", first: true, predicate: [\"picker\"], descendants: true }, { propertyName: \"addRootAndGroupButton\", first: true, predicate: [\"addRootAndGroupButton\"], descendants: true, read: ElementRef }, { propertyName: \"addConditionButton\", first: true, predicate: [\"addConditionButton\"], descendants: true, read: ElementRef }, { propertyName: \"editingInputsContainer\", first: true, predicate: [\"editingInputsContainer\"], descendants: true, read: ElementRef }, { propertyName: \"addModeContainer\", first: true, predicate: [\"addModeContainer\"], descendants: true, read: ElementRef }, { propertyName: \"currentGroupButtonsContainer\", first: true, predicate: [\"currentGroupButtonsContainer\"], descendants: true, read: ElementRef }, { propertyName: \"contextMenuToggle\", first: true, predicate: IgxToggleDirective, descendants: true }, { propertyName: \"expressionsContainer\", first: true, predicate: [\"expressionsContainer\"], descendants: true }, { propertyName: \"overlayOutlet\", first: true, predicate: [\"overlayOutlet\"], descendants: true, read: IgxOverlayOutletDirective, static: true }, { propertyName: \"chips\", predicate: IgxChipComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: \"\\n\\n\\n\\n\\n\\n \\n \\n add\\n {{ this.resourceStrings.igx_query_builder_and_group }}\\n \\n\\n \\n add\\n {{ this.resourceStrings.igx_query_builder_or_group }}\\n \\n\\n
    \\n
    \\n {{ this.resourceStrings.igx_query_builder_initial_text }}\\n
    \\n
    \\n
    \\n\\n \\n \\n add\\n {{\\n this.resourceStrings.igx_query_builder_add_condition\\n }}\\n \\n\\n \\n add\\n {{ this.resourceStrings.igx_query_builder_and_group }}\\n \\n\\n \\n add\\n {{ this.resourceStrings.igx_query_builder_or_group }}\\n \\n
    \\n\\n \\n \\n \\n {{\\n expressionItem.fieldLabel ||\\n expressionItem.expression.fieldName\\n }}\\n \\n \\n \\n \\n \\n {{\\n getConditionFriendlyName(\\n expressionItem.expression.condition.name\\n )\\n }}\\n \\n \\n {{\\n isDate(expressionItem.expression.searchVal)\\n ? getFormatter(expressionItem.expression.fieldName)\\n ? (expressionItem.expression.searchVal\\n | fieldFormatter\\n : getFormatter(\\n expressionItem.expression.fieldName\\n )\\n : undefined)\\n : (expressionItem.expression.searchVal\\n | date\\n : getFormat(\\n expressionItem.expression.fieldName\\n )\\n : undefined\\n : this.locale)\\n : expressionItem.expression.searchVal\\n }}\\n \\n \\n \\n \\n edit\\n \\n \\n add\\n \\n \\n \\n\\n \\n \\n \\n {{ field.label || field.header || field.field }}\\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n
    \\n \\n \\n {{\\n getConditionFriendlyName(condition)\\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 check\\n \\n \\n close\\n \\n
    \\n \\n\\n \\n \\n \\n \\n close\\n \\n \\n
    \\n\\n \\n
    \\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n {{\\n this.resourceStrings.igx_query_builder_end_group\\n }}\\n \\n
    \\n \\n \\n
    \\n\\n \\n \\n \\n\\n \\n \\n close\\n \\n\\n \\n \\n \\n\\n \\n \\n {{\\n this.resourceStrings.igx_query_builder_ungroup\\n }}\\n \\n \\n delete\\n {{ this.resourceStrings.igx_query_builder_delete }}\\n \\n \\n \\n \\n {{ this.resourceStrings.igx_query_builder_create_and_group }}\\n \\n \\n {{ this.resourceStrings.igx_query_builder_create_or_group }}\\n \\n \\n {{ this.resourceStrings.igx_query_builder_delete_filters }}\\n \\n \\n \\n\\n\\n\", dependencies: [{ kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgClass; }), selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgForOf; }), selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgIf; }), selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgTemplateOutlet; }), selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i5.DefaultValueAccessor; }), selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i0.forwardRef(function () { return i5.NgControlStatus; }), selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i0.forwardRef(function () { return i5.NgModel; }), selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxButtonDirective; }), selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxButtonGroupComponent; }), selector: \"igx-buttongroup\", inputs: [\"id\", \"itemContentCssClass\", \"multiSelection\", \"values\", \"disabled\", \"alignment\"], outputs: [\"selected\", \"deselected\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxDatePickerComponent; }), selector: \"igx-date-picker\", inputs: [\"hideOutsideDays\", \"displayMonthsCount\", \"showWeekNumbers\", \"formatter\", \"headerOrientation\", \"todayButtonLabel\", \"cancelButtonLabel\", \"spinLoop\", \"spinDelta\", \"outlet\", \"id\", \"formatViews\", \"disabledDates\", \"specialDates\", \"calendarFormat\", \"value\", \"minValue\", \"maxValue\", \"resourceStrings\", \"readOnly\"], outputs: [\"valueChange\", \"validationFailed\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxPickerToggleComponent; }), selector: \"igx-picker-toggle\", outputs: [\"clicked\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxPickerClearComponent; }), selector: \"igx-picker-clear\" }, { kind: \"component\", type: i0.forwardRef(function () { return IgxInputGroupComponent; }), selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxInputDirective; }), selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxPrefixDirective; }), selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxSuffixDirective; }), selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }, { kind: \"component\", type: i0.forwardRef(function () { return IgxIconComponent; }), selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxDateTimeEditorDirective; }), selector: \"[igxDateTimeEditor]\", inputs: [\"locale\", \"minValue\", \"maxValue\", \"spinLoop\", \"displayFormat\", \"igxDateTimeEditor\", \"value\", \"spinDelta\"], outputs: [\"valueChange\", \"validationFailed\"], exportAs: [\"igxDateTimeEditor\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxTimePickerComponent; }), selector: \"igx-time-picker\", inputs: [\"id\", \"displayFormat\", \"inputFormat\", \"mode\", \"minValue\", \"maxValue\", \"spinLoop\", \"formatter\", \"headerOrientation\", \"readOnly\", \"value\", \"resourceStrings\", \"okButtonLabel\", \"cancelButtonLabel\", \"itemsDelta\"], outputs: [\"selected\", \"valueChange\", \"validationFailed\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxChipComponent; }), selector: \"igx-chip\", inputs: [\"id\", \"tabIndex\", \"data\", \"draggable\", \"animateOnRelease\", \"hideBaseOnDrag\", \"removable\", \"removeIcon\", \"selectable\", \"selectIcon\", \"disabled\", \"selected\", \"color\", \"resourceStrings\"], outputs: [\"selectedChange\", \"moveStart\", \"moveEnd\", \"remove\", \"chipClick\", \"selectedChanging\", \"selectedChanged\", \"keyDown\", \"dragEnter\", \"dragLeave\", \"dragOver\", \"dragDrop\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxSelectComponent; }), selector: \"igx-select\", inputs: [\"placeholder\", \"disabled\", \"overlaySettings\", \"value\", \"type\"], outputs: [\"opening\", \"opened\", \"closing\", \"closed\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxSelectItemComponent; }), selector: \"igx-select-item\", inputs: [\"text\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxToggleDirective; }), selector: \"[igxToggle]\", inputs: [\"id\"], outputs: [\"opened\", \"opening\", \"closed\", \"closing\", \"appended\"], exportAs: [\"toggle\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxOverlayOutletDirective; }), selector: \"[igxOverlayOutlet]\", exportAs: [\"overlay-outlet\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxQueryBuilderHeaderComponent; }), selector: \"igx-query-builder-header\", inputs: [\"title\", \"showLegend\", \"resourceStrings\"] }, { kind: \"pipe\", type: i0.forwardRef(function () { return i1$1.DatePipe; }), name: \"date\" }, { kind: \"pipe\", type: i0.forwardRef(function () { return IgxFieldFormatterPipe; }), name: \"fieldFormatter\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxQueryBuilderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-query-builder', template: \"\\n\\n\\n\\n\\n\\n \\n \\n add\\n {{ this.resourceStrings.igx_query_builder_and_group }}\\n \\n\\n \\n add\\n {{ this.resourceStrings.igx_query_builder_or_group }}\\n \\n\\n
    \\n
    \\n {{ this.resourceStrings.igx_query_builder_initial_text }}\\n
    \\n
    \\n
    \\n\\n \\n \\n add\\n {{\\n this.resourceStrings.igx_query_builder_add_condition\\n }}\\n \\n\\n \\n add\\n {{ this.resourceStrings.igx_query_builder_and_group }}\\n \\n\\n \\n add\\n {{ this.resourceStrings.igx_query_builder_or_group }}\\n \\n \\n\\n \\n \\n \\n {{\\n expressionItem.fieldLabel ||\\n expressionItem.expression.fieldName\\n }}\\n \\n \\n \\n \\n \\n {{\\n getConditionFriendlyName(\\n expressionItem.expression.condition.name\\n )\\n }}\\n \\n \\n {{\\n isDate(expressionItem.expression.searchVal)\\n ? getFormatter(expressionItem.expression.fieldName)\\n ? (expressionItem.expression.searchVal\\n | fieldFormatter\\n : getFormatter(\\n expressionItem.expression.fieldName\\n )\\n : undefined)\\n : (expressionItem.expression.searchVal\\n | date\\n : getFormat(\\n expressionItem.expression.fieldName\\n )\\n : undefined\\n : this.locale)\\n : expressionItem.expression.searchVal\\n }}\\n \\n \\n \\n \\n edit\\n \\n \\n add\\n \\n \\n \\n\\n \\n \\n \\n {{ field.label || field.header || field.field }}\\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n
    \\n \\n \\n {{\\n getConditionFriendlyName(condition)\\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 check\\n \\n \\n close\\n \\n
    \\n \\n\\n \\n \\n \\n \\n close\\n \\n \\n
    \\n\\n \\n
    \\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n {{\\n this.resourceStrings.igx_query_builder_end_group\\n }}\\n \\n
    \\n \\n \\n
    \\n\\n \\n \\n \\n\\n \\n \\n close\\n \\n\\n \\n \\n \\n\\n \\n \\n {{\\n this.resourceStrings.igx_query_builder_ungroup\\n }}\\n \\n \\n delete\\n {{ this.resourceStrings.igx_query_builder_delete }}\\n \\n \\n \\n \\n {{ this.resourceStrings.igx_query_builder_create_and_group }}\\n \\n \\n {{ this.resourceStrings.igx_query_builder_create_or_group }}\\n \\n \\n {{ this.resourceStrings.igx_query_builder_delete_filters }}\\n \\n \\n \\n\\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: IgxIconService }, { type: PlatformUtil }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }];\n }, propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-query-builder']\n }], fieldSelect: [{\n type: ViewChild,\n args: ['fieldSelect', { read: IgxSelectComponent }]\n }], conditionSelect: [{\n type: ViewChild,\n args: ['conditionSelect', { read: IgxSelectComponent }]\n }], searchValueInput: [{\n type: ViewChild,\n args: ['searchValueInput', { read: ElementRef }]\n }], picker: [{\n type: ViewChild,\n args: ['picker']\n }], addRootAndGroupButton: [{\n type: ViewChild,\n args: ['addRootAndGroupButton', { read: ElementRef }]\n }], addConditionButton: [{\n type: ViewChild,\n args: ['addConditionButton', { read: ElementRef }]\n }], headerContent: [{\n type: ContentChild,\n args: [IgxQueryBuilderHeaderComponent]\n }], editingInputsContainer: [{\n type: ViewChild,\n args: ['editingInputsContainer', { read: ElementRef }]\n }], addModeContainer: [{\n type: ViewChild,\n args: ['addModeContainer', { read: ElementRef }]\n }], currentGroupButtonsContainer: [{\n type: ViewChild,\n args: ['currentGroupButtonsContainer', { read: ElementRef }]\n }], contextMenuToggle: [{\n type: ViewChild,\n args: [IgxToggleDirective]\n }], chips: [{\n type: ViewChildren,\n args: [IgxChipComponent]\n }], display: [{\n type: HostBinding,\n args: ['style.display']\n }], expressionsContainer: [{\n type: ViewChild,\n args: ['expressionsContainer']\n }], overlayOutlet: [{\n type: ViewChild,\n args: ['overlayOutlet', { read: IgxOverlayOutletDirective, static: true }]\n }], fields: [{\n type: Input\n }], expressionTree: [{\n type: Input\n }], locale: [{\n type: Input\n }], resourceStrings: [{\n type: Input\n }], expressionTreeChange: [{\n type: Output\n }] } });\n/**\n * @hidden\n */\nclass IgxQueryBuilderModule {\n}\nIgxQueryBuilderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxQueryBuilderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxQueryBuilderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxQueryBuilderModule, declarations: [IgxQueryBuilderComponent, IgxQueryBuilderHeaderComponent, IgxFieldFormatterPipe], imports: [CommonModule,\n FormsModule,\n IgxButtonModule,\n IgxButtonGroupModule,\n IgxDatePickerModule,\n IgxDateTimeEditorModule,\n IgxInputGroupModule,\n IgxTimePickerModule,\n IgxChipsModule,\n IgxDragDropModule,\n IgxIconModule,\n IgxSelectModule,\n IgxToggleModule], exports: [IgxQueryBuilderComponent, IgxQueryBuilderHeaderComponent] });\nIgxQueryBuilderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxQueryBuilderModule, imports: [CommonModule,\n FormsModule,\n IgxButtonModule,\n IgxButtonGroupModule,\n IgxDatePickerModule,\n IgxDateTimeEditorModule,\n IgxInputGroupModule,\n IgxTimePickerModule,\n IgxChipsModule,\n IgxDragDropModule,\n IgxIconModule,\n IgxSelectModule,\n IgxToggleModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxQueryBuilderModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxQueryBuilderComponent, IgxQueryBuilderHeaderComponent, IgxFieldFormatterPipe],\n exports: [IgxQueryBuilderComponent, IgxQueryBuilderHeaderComponent],\n imports: [\n CommonModule,\n FormsModule,\n IgxButtonModule,\n IgxButtonGroupModule,\n IgxDatePickerModule,\n IgxDateTimeEditorModule,\n IgxInputGroupModule,\n IgxTimePickerModule,\n IgxChipsModule,\n IgxDragDropModule,\n IgxIconModule,\n IgxSelectModule,\n IgxToggleModule\n ]\n }]\n }] });\n\n/**\n * A component used for presenting advanced filtering UI for a Grid.\n * It is used internally in the Grid, but could also be hosted in a container outside of it.\n *\n * Example:\n * ```html\n * \n * \n * ```\n */\nclass IgxAdvancedFilteringDialogComponent {\n constructor(cdr, platform) {\n this.cdr = cdr;\n this.platform = platform;\n /**\n * @hidden @internal\n */\n this.display = 'block';\n /**\n * @hidden @internal\n */\n this.inline = true;\n /**\n * @hidden @internal\n */\n this.lastActiveNode = {};\n this.destroy$ = new Subject();\n }\n /**\n * @hidden @internal\n */\n ngAfterViewInit() {\n this.queryBuilder.setPickerOutlet(this.grid.outlet);\n }\n /**\n * @hidden @internal\n */\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n /**\n * @hidden @internal\n */\n get displayDensity() {\n return this.grid.displayDensity;\n }\n /**\n * An @Input property that sets the grid.\n */\n set grid(grid) {\n this._grid = grid;\n if (this._grid) {\n this._grid.filteringService.registerSVGIcons();\n }\n this.assignResourceStrings();\n }\n /**\n * Returns the grid.\n */\n get grid() {\n return this._grid;\n }\n /**\n * @hidden @internal\n */\n get filterableFields() {\n return this.grid.columns.filter((column) => !column.columnGroup && column.filterable);\n }\n /**\n * @hidden @internal\n */\n dragStart(dragArgs) {\n if (!this._overlayComponentId) {\n dragArgs.cancel = true;\n return;\n }\n }\n /**\n * @hidden @internal\n */\n onDragMove(e) {\n const deltaX = e.nextPageX - e.pageX;\n const deltaY = e.nextPageY - e.pageY;\n e.cancel = true;\n this._overlayService.setOffset(this._overlayComponentId, deltaX, deltaY);\n }\n /**\n * @hidden @internal\n */\n onKeyDown(eventArgs) {\n eventArgs.stopPropagation();\n const key = eventArgs.key;\n if (this.queryBuilder.isContextMenuVisible && (key === this.platform.KEYMAP.ESCAPE)) {\n this.queryBuilder.clearSelection();\n }\n else if (key === this.platform.KEYMAP.ESCAPE) {\n this.closeDialog();\n }\n }\n /**\n * @hidden @internal\n */\n initialize(grid, overlayService, overlayComponentId) {\n this.inline = false;\n this.grid = grid;\n this._overlayService = overlayService;\n this._overlayComponentId = overlayComponentId;\n }\n /**\n * @hidden @internal\n */\n onClearButtonClick(event) {\n this.grid.crudService.endEdit(false, event);\n this.queryBuilder.expressionTree = this.grid.advancedFilteringExpressionsTree = null;\n }\n /**\n * @hidden @internal\n */\n closeDialog() {\n if (this._overlayComponentId) {\n this._overlayService.hide(this._overlayComponentId);\n }\n this.grid.navigation.activeNode = this.lastActiveNode;\n if (this.grid.navigation.activeNode && this.grid.navigation.activeNode.row === -1) {\n this.grid.theadRow.nativeElement.focus();\n }\n }\n /**\n * @hidden @internal\n */\n applyChanges(event) {\n this.grid.crudService.endEdit(false, event);\n this.queryBuilder.exitOperandEdit();\n this.grid.advancedFilteringExpressionsTree = this.queryBuilder.expressionTree;\n }\n /**\n * @hidden @internal\n */\n cancelChanges() {\n this.closeDialog();\n }\n /**\n * @hidden @internal\n */\n onApplyButtonClick(event) {\n this.applyChanges(event);\n this.closeDialog();\n }\n assignResourceStrings() {\n // If grid has custom resource strings set for the advanced filtering,\n // they are passed to the query builder resource strings.\n const gridRS = this.grid.resourceStrings;\n if (gridRS !== GridResourceStringsEN) {\n const queryBuilderRS = CurrentResourceStrings.QueryBuilderResStrings;\n Object.keys(gridRS).forEach((prop) => {\n const reg = /^igx_grid_(advanced_)?filter_(row_)?/;\n if (!reg.test(prop)) {\n return;\n }\n const affix = prop.replace(reg, '');\n const filterProp = `igx_query_builder_filter_${affix}`;\n const generalProp = `igx_query_builder_${affix}`;\n if (queryBuilderRS[filterProp] !== undefined) {\n queryBuilderRS[filterProp] = gridRS[prop];\n }\n else if (queryBuilderRS[generalProp] !== undefined) {\n queryBuilderRS[generalProp] = gridRS[prop];\n }\n });\n }\n }\n}\nIgxAdvancedFilteringDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAdvancedFilteringDialogComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nIgxAdvancedFilteringDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxAdvancedFilteringDialogComponent, selector: \"igx-advanced-filtering-dialog\", inputs: { grid: \"grid\" }, host: { properties: { \"style.display\": \"this.display\" } }, viewQueries: [{ propertyName: \"queryBuilder\", first: true, predicate: [\"queryBuilder\"], descendants: true, read: IgxQueryBuilderComponent }], ngImport: i0, template: \"
    \\n \\n \\n \\n \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"directive\", type: IgxDragDirective, selector: \"[igxDrag]\", inputs: [\"igxDrag\", \"dragTolerance\", \"dragDirection\", \"dragChannel\", \"ghost\", \"ghostClass\", \"ghostTemplate\", \"ghostHost\", \"scrollContainer\", \"ghostOffsetX\", \"ghostOffsetY\"], outputs: [\"dragStart\", \"dragMove\", \"dragEnd\", \"dragClick\", \"ghostCreate\", \"ghostDestroy\", \"transitioned\"], exportAs: [\"drag\"] }, { kind: \"directive\", type: IgxDragHandleDirective, selector: \"[igxDragHandle]\" }, { kind: \"component\", type: IgxQueryBuilderComponent, selector: \"igx-query-builder\", inputs: [\"fields\", \"expressionTree\", \"locale\", \"resourceStrings\"], outputs: [\"expressionTreeChange\"] }, { kind: \"component\", type: IgxQueryBuilderHeaderComponent, selector: \"igx-query-builder-header\", inputs: [\"title\", \"showLegend\", \"resourceStrings\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxAdvancedFilteringDialogComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-advanced-filtering-dialog', template: \"
    \\n \\n \\n \\n \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: PlatformUtil }]; }, propDecorators: { queryBuilder: [{\n type: ViewChild,\n args: ['queryBuilder', { read: IgxQueryBuilderComponent }]\n }], display: [{\n type: HostBinding,\n args: ['style.display']\n }], grid: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n * @internal\n */\nclass IgxRowSelectorDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxRowSelectorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowSelectorDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxRowSelectorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowSelectorDirective, selector: \"[igxRowSelector]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowSelectorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxRowSelector]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * @hidden\n * @internal\n */\nclass IgxGroupByRowSelectorDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxGroupByRowSelectorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGroupByRowSelectorDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxGroupByRowSelectorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGroupByRowSelectorDirective, selector: \"[igxGroupByRowSelector]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGroupByRowSelectorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxGroupByRowSelector]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * @hidden\n * @internal\n */\nclass IgxHeadSelectorDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxHeadSelectorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHeadSelectorDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxHeadSelectorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxHeadSelectorDirective, selector: \"[igxHeadSelector]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHeadSelectorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxHeadSelector]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nconst ghostBackgroundClass = 'igx-grid__tr--ghost';\nconst gridCellClass = 'igx-grid__td';\nconst rowSelectedClass = 'igx-grid__tr--selected';\nconst cellSelectedClass = 'igx-grid__td--selected';\nconst cellActiveClass = 'igx-grid__td--active';\n/**\n * @hidden\n */\nclass IgxRowDragDirective extends IgxDragDirective {\n constructor() {\n super(...arguments);\n this._rowDragStarted = false;\n this.transitionEndEvent = () => {\n if (this.ghostElement) {\n this.ghostElement.removeEventListener('transitionend', this.transitionEndEvent, false);\n }\n this.endDragging();\n };\n }\n set data(value) {\n this._data = value;\n }\n get data() {\n return this._data.grid.createRow(this._data.index, this._data.data);\n }\n get row() {\n return this._data;\n }\n onPointerDown(event) {\n event.preventDefault();\n this._rowDragStarted = false;\n this._removeOnDestroy = false;\n super.onPointerDown(event);\n }\n onPointerMove(event) {\n super.onPointerMove(event);\n if (this._dragStarted && !this._rowDragStarted) {\n this._rowDragStarted = true;\n const args = {\n dragDirective: this,\n dragData: this.data,\n dragElement: this.row.nativeElement,\n cancel: false,\n owner: this.row.grid\n };\n this.row.grid.rowDragStart.emit(args);\n if (args.cancel) {\n this.ghostElement.parentNode.removeChild(this.ghostElement);\n this.ghostElement = null;\n this._dragStarted = false;\n this._clicked = false;\n return;\n }\n this.row.grid.dragRowID = this.row.key;\n this.row.grid.rowDragging = true;\n this.row.grid.cdr.detectChanges();\n this.subscription$ = fromEvent(this.row.grid.document.defaultView, 'keydown').subscribe((ev) => {\n if (ev.key === this.platformUtil.KEYMAP.ESCAPE) {\n this._lastDropArea = false;\n this.onPointerUp(event);\n }\n });\n }\n }\n onPointerUp(event) {\n if (!this._clicked) {\n return;\n }\n const args = {\n dragDirective: this,\n dragData: this.data,\n dragElement: this.row.nativeElement,\n animation: false,\n owner: this.row.grid\n };\n this.zone.run(() => {\n this.row.grid.rowDragEnd.emit(args);\n });\n const dropArea = this._lastDropArea;\n super.onPointerUp(event);\n if (!dropArea && this.ghostElement) {\n this.ghostElement.addEventListener('transitionend', this.transitionEndEvent, false);\n }\n else {\n this.endDragging();\n }\n }\n createGhost(pageX, pageY) {\n this.row.grid.gridAPI.crudService.endEdit(false);\n this.row.grid.cdr.detectChanges();\n this.ghostContext = {\n $implicit: this.row.data,\n data: this.row.data,\n grid: this.row.grid\n };\n super.createGhost(pageX, pageY, this.row.nativeElement);\n // check if there is an expander icon and create the ghost at the corresponding position\n if (this.isHierarchicalGrid) {\n const row = this.row;\n if (row.expander) {\n const expanderWidth = row.expander.nativeElement.getBoundingClientRect().width;\n this._ghostHostX += expanderWidth;\n }\n }\n const ghost = this.ghostElement;\n const gridRect = this.row.grid.nativeElement.getBoundingClientRect();\n const rowRect = this.row.nativeElement.getBoundingClientRect();\n ghost.style.overflow = 'hidden';\n ghost.style.width = gridRect.width + 'px';\n ghost.style.height = rowRect.height + 'px';\n this.renderer.addClass(ghost, ghostBackgroundClass);\n this.renderer.removeClass(ghost, rowSelectedClass);\n const ghostCells = ghost.getElementsByClassName(gridCellClass);\n for (const cell of ghostCells) {\n this.renderer.removeClass(cell, cellSelectedClass);\n this.renderer.removeClass(cell, cellActiveClass);\n }\n }\n _unsubscribe() {\n if (this.subscription$ && !this.subscription$.closed) {\n this.subscription$.unsubscribe();\n }\n }\n endDragging() {\n this.onTransitionEnd(null);\n this.row.grid.dragRowID = null;\n this.row.grid.rowDragging = false;\n this.row.grid.cdr.detectChanges();\n this._unsubscribe();\n }\n get isHierarchicalGrid() {\n return this.row.grid.nativeElement.tagName.toLowerCase() === 'igx-hierarchical-grid';\n }\n}\nIgxRowDragDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowDragDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nIgxRowDragDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowDragDirective, selector: \"[igxRowDrag]\", inputs: { data: [\"igxRowDrag\", \"data\"] }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowDragDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxRowDrag]'\n }]\n }], propDecorators: { data: [{\n type: Input,\n args: ['igxRowDrag']\n }] } });\n/**\n * @hidden\n */\nclass IgxDragIndicatorIconDirective {\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxDragIndicatorIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDragIndicatorIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxDragIndicatorIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDragIndicatorIconDirective, selector: \"[igxDragIndicatorIcon]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDragIndicatorIconDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxDragIndicatorIcon]'\n }]\n }] });\n/**\n * @hidden\n */\nclass IgxRowDragGhostDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n static ngTemplateContextGuard(_directive, context) {\n return true;\n }\n ;\n}\nIgxRowDragGhostDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowDragGhostDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxRowDragGhostDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowDragGhostDirective, selector: \"[igxRowDragGhost]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowDragGhostDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxRowDragGhost]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\nclass IgxRowDragModule {\n}\nIgxRowDragModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowDragModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxRowDragModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowDragModule, declarations: [IgxRowDragDirective, IgxDragIndicatorIconDirective, IgxRowDragGhostDirective], exports: [IgxRowDragDirective, IgxDragIndicatorIconDirective, IgxRowDragGhostDirective] });\nIgxRowDragModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowDragModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowDragModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxRowDragDirective, IgxDragIndicatorIconDirective, IgxRowDragGhostDirective],\n exports: [IgxRowDragDirective, IgxDragIndicatorIconDirective, IgxRowDragGhostDirective],\n }]\n }] });\n\nclass IgxNotificationsDirective extends IgxToggleDirective {\n constructor() {\n super(...arguments);\n /**\n * Sets/gets the `aria-live` attribute.\n * If not set, `aria-live` will have value `\"polite\"`.\n */\n this.ariaLive = 'polite';\n /**\n * Sets/gets whether the element will be hidden after the `displayTime` is over.\n * Default value is `true`.\n */\n this.autoHide = true;\n /**\n * Sets/gets the duration of time span (in milliseconds) which the element will be visible\n * after it is being shown.\n * Default value is `4000`.\n */\n this.displayTime = 4000;\n /**\n * @hidden\n * @internal\n */\n this.textMessage = '';\n }\n /**\n * Enables/Disables the visibility of the element.\n * If not set, the `isVisible` attribute will have value `false`.\n */\n get isVisible() {\n return !this.collapsed;\n }\n set isVisible(value) {\n if (value !== this.isVisible) {\n if (value) {\n requestAnimationFrame(() => {\n this.open();\n });\n }\n else {\n this.close();\n }\n }\n }\n /**\n * @hidden\n */\n open() {\n clearInterval(this.timeoutId);\n const overlaySettings = {\n positionStrategy: this.strategy,\n closeOnEscape: false,\n closeOnOutsideClick: false,\n modal: false,\n outlet: this.outlet\n };\n super.open(overlaySettings);\n if (this.autoHide) {\n this.timeoutId = window.setTimeout(() => {\n this.close();\n }, this.displayTime);\n }\n }\n /**\n * Hides the element.\n */\n close() {\n clearTimeout(this.timeoutId);\n super.close();\n }\n}\nIgxNotificationsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNotificationsDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nIgxNotificationsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxNotificationsDirective, inputs: { ariaLive: \"ariaLive\", autoHide: \"autoHide\", displayTime: \"displayTime\", outlet: \"outlet\", isVisible: \"isVisible\" }, host: { properties: { \"attr.aria-live\": \"this.ariaLive\" } }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNotificationsDirective, decorators: [{\n type: Directive\n }], propDecorators: { ariaLive: [{\n type: HostBinding,\n args: ['attr.aria-live']\n }, {\n type: Input\n }], autoHide: [{\n type: Input\n }], displayTime: [{\n type: Input\n }], outlet: [{\n type: Input\n }], isVisible: [{\n type: Input\n }] } });\n\nlet NEXT_ID$a = 0;\n/**\n * **Ignite UI for Angular Snackbar** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/snackbar.html)\n *\n * The Ignite UI Snack Bar provides feedback about an operation with a single-line message, which can\n * include a link to an action such as Undo.\n *\n * Example:\n * ```html\n * \n *
    \n * \n * Message sent\n * \n *
    \n * ```\n */\nclass IgxSnackbarComponent extends IgxNotificationsDirective {\n constructor() {\n super(...arguments);\n /**\n * Sets/gets the `id` of the snackbar.\n * If not set, the `id` of the first snackbar component will be `\"igx-snackbar-0\"`;\n * ```html\n * \n * ```\n * ```typescript\n * let snackbarId = this.snackbar.id;\n * ```\n *\n * @memberof IgxSnackbarComponent\n */\n this.id = `igx-snackbar-${NEXT_ID$a++}`;\n /**\n * The default css class applied to the component.\n *\n * @hidden\n * @internal\n */\n this.cssClass = 'igx-snackbar';\n /**\n * An event that will be emitted when the action button is clicked.\n * Provides reference to the `IgxSnackbarComponent` as an argument.\n * ```html\n * \n * ```\n */\n this.clicked = new EventEmitter();\n /**\n * An event that will be emitted when the snackbar animation starts.\n * Provides reference to the `ToggleViewEventArgs` interface as an argument.\n * ```html\n * \n * ```\n */\n this.animationStarted = new EventEmitter();\n /**\n * An event that will be emitted when the snackbar animation ends.\n * Provides reference to the `ToggleViewEventArgs` interface as an argument.\n * ```html\n * \n * ```\n */\n this.animationDone = new EventEmitter();\n this._positionSettings = {\n horizontalDirection: HorizontalAlignment.Center,\n verticalDirection: VerticalAlignment.Bottom,\n openAnimation: useAnimation(fadeIn, { params: { duration: '.35s', easing: 'cubic-bezier(0.0, 0.0, 0.2, 1)',\n fromPosition: 'translateY(100%)', toPosition: 'translateY(0)' } }),\n closeAnimation: useAnimation(fadeOut, { params: { duration: '.2s', easing: 'cubic-bezier(0.4, 0.0, 1, 1)',\n fromPosition: 'translateY(0)', toPosition: 'translateY(100%)' } }),\n };\n }\n /**\n * Get the position and animation settings used by the snackbar.\n * ```typescript\n * @ViewChild('snackbar', { static: true }) public snackbar: IgxSnackbarComponent;\n * let currentPosition: PositionSettings = this.snackbar.positionSettings\n * ```\n */\n get positionSettings() {\n return this._positionSettings;\n }\n /**\n * Set the position and animation settings used by the snackbar.\n * ```html\n * \n * ```\n * ```typescript\n * import { slideInTop, slideOutBottom } from 'igniteui-angular';\n * ...\n * @ViewChild('snackbar', { static: true }) public snackbar: IgxSnackbarComponent;\n * public newPositionSettings: PositionSettings = {\n * openAnimation: useAnimation(slideInTop, { params: { duration: '1000ms', fromPosition: 'translateY(100%)'}}),\n * closeAnimation: useAnimation(slideOutBottom, { params: { duration: '1000ms', fromPosition: 'translateY(0)'}}),\n * horizontalDirection: HorizontalAlignment.Left,\n * verticalDirection: VerticalAlignment.Middle,\n * horizontalStartPoint: HorizontalAlignment.Left,\n * verticalStartPoint: VerticalAlignment.Middle,\n * minSize: { height: 100, width: 100 }\n * };\n * this.snackbar.positionSettings = this.newPositionSettings;\n * ```\n */\n set positionSettings(settings) {\n this._positionSettings = settings;\n }\n /**\n * Shows the snackbar and hides it after the `displayTime` is over if `autoHide` is set to `true`.\n * ```typescript\n * this.snackbar.open();\n * ```\n */\n open(message) {\n if (message !== undefined) {\n this.textMessage = message;\n }\n this.strategy = this.outlet ? new ContainerPositionStrategy(this.positionSettings)\n : new GlobalPositionStrategy(this.positionSettings);\n super.open();\n }\n /**\n * Opens or closes the snackbar, depending on its current state.\n *\n * ```typescript\n * this.snackbar.toggle();\n * ```\n */\n toggle() {\n if (this.collapsed || this.isClosing) {\n this.open();\n }\n else {\n this.close();\n }\n }\n /**\n * @hidden\n */\n triggerAction() {\n this.clicked.emit(this);\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.opened.pipe(takeUntil(this.destroy$)).subscribe(() => {\n const openedEventArgs = { owner: this, id: this._overlayId };\n this.animationStarted.emit(openedEventArgs);\n });\n this.closed.pipe(takeUntil(this.destroy$)).subscribe(() => {\n const closedEventArgs = { owner: this, id: this._overlayId };\n this.animationDone.emit(closedEventArgs);\n });\n }\n}\nIgxSnackbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSnackbarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxSnackbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSnackbarComponent, selector: \"igx-snackbar\", inputs: { id: \"id\", actionText: \"actionText\", positionSettings: \"positionSettings\" }, outputs: { clicked: \"clicked\", animationStarted: \"animationStarted\", animationDone: \"animationDone\" }, host: { properties: { \"attr.id\": \"this.id\", \"class.igx-snackbar\": \"this.cssClass\" } }, usesInheritance: true, ngImport: i0, template: \"
    \\n {{ textMessage }}\\n \\n
    \\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSnackbarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-snackbar', template: \"
    \\n {{ textMessage }}\\n \\n
    \\n\\n\" }]\n }], propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-snackbar']\n }], actionText: [{\n type: Input\n }], clicked: [{\n type: Output\n }], animationStarted: [{\n type: Output\n }], animationDone: [{\n type: Output\n }], positionSettings: [{\n type: Input\n }] } });\n/**\n * @hidden\n */\nclass IgxSnackbarModule {\n}\nIgxSnackbarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSnackbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxSnackbarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSnackbarModule, declarations: [IgxSnackbarComponent], imports: [CommonModule], exports: [IgxSnackbarComponent] });\nIgxSnackbarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSnackbarModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSnackbarModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxSnackbarComponent],\n exports: [IgxSnackbarComponent],\n imports: [CommonModule]\n }]\n }] });\n\nclass IgxPaginatorTemplateDirective {\n constructor() {\n /**\n * @internal\n * @hidden\n */\n this.cssClass = 'igx-paginator-content';\n }\n}\nIgxPaginatorTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPaginatorTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxPaginatorTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxPaginatorTemplateDirective, selector: \"[igxPaginatorContent],igx-paginator-content\", host: { properties: { \"class.igx-paginator-content\": \"this.cssClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPaginatorTemplateDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxPaginatorContent],igx-paginator-content' }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-paginator-content']\n }] } });\nclass IgxPaginatorComponent extends DisplayDensityBase {\n /**\n * Sets the class of the IgxPaginatorComponent based\n * on the provided displayDensity.\n */\n get classCosy() {\n return this.displayDensity === DisplayDensity.cosy;\n }\n get classCompact() {\n return this.displayDensity === DisplayDensity.compact;\n }\n get classComfortable() {\n return this.displayDensity === DisplayDensity.comfortable;\n }\n /**\n * An @Input property, sets current page of the `IgxPaginatorComponent`.\n * The default is 0.\n * ```typescript\n * let page = this.paginator.page;\n * ```\n *\n * @memberof IgxPaginatorComponent\n */\n get page() {\n return this._page;\n }\n set page(value) {\n if (this._page === value || value < 0 || value > this.totalPages) {\n return;\n }\n const cancelEventArgs = { current: this._page, next: value, cancel: false };\n const eventArgs = { previous: this._page, current: value };\n this.paging.emit(cancelEventArgs);\n if (cancelEventArgs.cancel) {\n return;\n }\n this._page = value;\n this.pageChange.emit(this._page);\n this.pagingDone.emit(eventArgs);\n }\n /**\n * An @Input property, sets number of visible items per page in the `IgxPaginatorComponent`.\n * The default is 15.\n * ```typescript\n * let itemsPerPage = this.paginator.perPage;\n * ```\n *\n * @memberof IgxPaginatorComponent\n */\n get perPage() {\n return this._perPage;\n }\n set perPage(value) {\n if (value < 0 || this.perPage === value) {\n return;\n }\n this._perPage = Number(value);\n this.perPageChange.emit(this._perPage);\n this._selectOptions = this.sortUniqueOptions(this.defaultSelectValues, this._perPage);\n this.totalPages = Math.ceil(this.totalRecords / this._perPage);\n if (this.totalPages !== 0 && this.page >= this.totalPages) {\n this.page = this.totalPages - 1;\n }\n }\n /**\n * An @Input property that sets the total records.\n * ```typescript\n * let totalRecords = this.paginator.totalRecords;\n * ```\n *\n * @memberof IgxPaginatorComponent\n */\n get totalRecords() {\n return this._totalRecords;\n }\n set totalRecords(value) {\n this._totalRecords = value;\n this.totalPages = Math.ceil(this.totalRecords / this.perPage);\n if (this.page > this.totalPages) {\n this.page = 0;\n }\n this.cdr.detectChanges();\n }\n /**\n * An @Input property that sets custom options in the select of the paginator\n * ```typescript\n * let options = this.paginator.selectOptions;\n * ```\n *\n * @memberof IgxPaginatorComponent\n */\n get selectOptions() {\n return this._selectOptions;\n }\n set selectOptions(value) {\n this._selectOptions = this.sortUniqueOptions(value, this._perPage);\n this.defaultSelectValues = [...value];\n }\n /**\n * An @Input property that sets custom OverlaySettings.\n * ```html\n * \n * ```\n */\n get overlaySettings() {\n return this._overlaySettings;\n }\n set overlaySettings(value) {\n this._overlaySettings = Object.assign({}, this._overlaySettings, value);\n }\n /**\n * An accessor that sets the resource strings.\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /**\n * An accessor that returns the resource strings.\n */\n get resourceStrings() {\n return this._resourceStrings;\n }\n constructor(_displayDensityOptions, elementRef, cdr) {\n super(_displayDensityOptions);\n this._displayDensityOptions = _displayDensityOptions;\n this.elementRef = elementRef;\n this.cdr = cdr;\n /**\n * Emitted when `perPage` property value of the paginator is changed.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * public onPerPageChange(perPage: number) {\n * this.perPage = perPage;\n * }\n * ```\n */\n this.perPageChange = new EventEmitter();\n /**\n * Emitted after the current page is changed.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * public onPageChange(page: number) {\n * this.currentPage = page;\n * }\n * ```\n */\n this.pageChange = new EventEmitter();\n /**\n * Emitted before paging is performed.\n *\n * @remarks\n * Returns an object consisting of the current and next pages.\n * @example\n * ```html\n * \n * ```\n */\n this.paging = new EventEmitter();\n /**\n * Emitted after paging is performed.\n *\n * @remarks\n * Returns an object consisting of the previous and current pages.\n * @example\n * ```html\n * \n * ```\n */\n this.pagingDone = new EventEmitter();\n this._page = 0;\n this._selectOptions = [5, 10, 15, 25, 50, 100, 500];\n this._perPage = 15;\n this._resourceStrings = CurrentResourceStrings.PaginatorResStrings;\n this._overlaySettings = {};\n this.defaultSelectValues = [5, 10, 15, 25, 50, 100, 500];\n }\n /**\n * Returns if the current page is the last page.\n * ```typescript\n * const lastPage = this.paginator.isLastPage;\n * ```\n */\n get isLastPage() {\n return this.page + 1 >= this.totalPages;\n }\n /**\n * Returns if the current page is the first page.\n * ```typescript\n * const lastPage = this.paginator.isFirstPage;\n * ```\n */\n get isFirstPage() {\n return this.page === 0;\n }\n /**\n * Returns if the first pager buttons should be disabled\n */\n get isFirstPageDisabled() {\n return this.isFirstPage;\n }\n /**\n * Returns if the last pager buttons should be disabled\n */\n get isLastPageDisabled() {\n return this.isLastPage;\n }\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n /**\n * Sets DisplayDensity for the \\n \\n\\n\\n
    \\n \\n {{ column.header || column.field }}\\n \\n
    \\n\\n
    \\n \\n \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgForOf; }), selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgIf; }), selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i5.DefaultValueAccessor; }), selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i0.forwardRef(function () { return i5.NgControlStatus; }), selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i0.forwardRef(function () { return i5.NgModel; }), selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxButtonDirective; }), selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxInputGroupComponent; }), selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxInputDirective; }), selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return IgxRippleDirective; }), selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxCheckboxComponent; }), selector: \"igx-checkbox\", inputs: [\"id\", \"labelId\", \"value\", \"name\", \"tabindex\", \"labelPosition\", \"disableRipple\", \"required\", \"aria-labelledby\", \"aria-label\", \"indeterminate\", \"checked\", \"disabled\", \"invalid\", \"readonly\", \"disableTransitions\"], outputs: [\"change\"] }, { kind: \"pipe\", type: i0.forwardRef(function () { return IgxColumnActionEnabledPipe; }), name: \"columnActionEnabled\" }, { kind: \"pipe\", type: i0.forwardRef(function () { return IgxFilterActionColumnsPipe; }), name: \"filterActionColumns\" }, { kind: \"pipe\", type: i0.forwardRef(function () { return IgxSortActionColumnsPipe; }), name: \"sortActionColumns\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnActionsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-column-actions', template: \"
    \\n

    {{ title }}

    \\n\\n \\n \\n \\n
    \\n\\n
    \\n \\n {{ column.header || column.field }}\\n \\n
    \\n\\n
    \\n \\n \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: i0.IterableDiffers }]; }, propDecorators: { grid: [{\n type: Input\n }], indentation: [{\n type: Input\n }], cssClass: [{\n type: HostBinding,\n args: ['class']\n }], columnsAreaMaxHeight: [{\n type: Input\n }], hideFilter: [{\n type: Input\n }], columnItems: [{\n type: ViewChildren,\n args: [IgxCheckboxComponent]\n }], title: [{\n type: Input\n }], columnToggled: [{\n type: Output\n }], filterColumnsPrompt: [{\n type: Input\n }], filterCriteria: [{\n type: Input\n }], columnDisplayOrder: [{\n type: Input\n }], uncheckAllText: [{\n type: Input\n }], checkAllText: [{\n type: Input\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }] } });\nclass IgxColumnActionEnabledPipe {\n constructor(columnActions) {\n this.columnActions = columnActions;\n }\n transform(collection, actionFilter, _pipeTrigger) {\n if (!collection) {\n return collection;\n }\n let copy = collection.slice(0);\n if (copy.length && copy[0].grid.hasColumnLayouts) {\n copy = copy.filter(c => c.columnLayout);\n }\n if (actionFilter) {\n copy = copy.filter(actionFilter);\n }\n // Preserve the actionable collection for use in the component\n this.columnActions.actionableColumns = copy;\n return copy;\n }\n}\nIgxColumnActionEnabledPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnActionEnabledPipe, deps: [{ token: IgxColumnActionsComponent }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxColumnActionEnabledPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnActionEnabledPipe, name: \"columnActionEnabled\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnActionEnabledPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'columnActionEnabled' }]\n }], ctorParameters: function () {\n return [{ type: IgxColumnActionsComponent, decorators: [{\n type: Inject,\n args: [IgxColumnActionsComponent]\n }] }];\n } });\nclass IgxFilterActionColumnsPipe {\n constructor(columnActions) {\n this.columnActions = columnActions;\n }\n transform(collection, filterCriteria, _pipeTrigger) {\n if (!collection) {\n return collection;\n }\n let copy = collection.slice(0);\n if (filterCriteria && filterCriteria.length > 0) {\n const filterFunc = (c) => {\n var _a, _b;\n const filterText = c.header || c.field;\n if (!filterText) {\n return false;\n }\n return filterText.toLocaleLowerCase().indexOf(filterCriteria.toLocaleLowerCase()) >= 0 ||\n ((_b = (_a = c.children) === null || _a === void 0 ? void 0 : _a.some(filterFunc)) !== null && _b !== void 0 ? _b : false);\n };\n copy = collection.filter(filterFunc);\n }\n // Preserve the filtered collection for use in the component\n this.columnActions.filteredColumns = copy;\n return copy;\n }\n}\nIgxFilterActionColumnsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterActionColumnsPipe, deps: [{ token: IgxColumnActionsComponent }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxFilterActionColumnsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterActionColumnsPipe, name: \"filterActionColumns\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxFilterActionColumnsPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'filterActionColumns' }]\n }], ctorParameters: function () {\n return [{ type: IgxColumnActionsComponent, decorators: [{\n type: Inject,\n args: [IgxColumnActionsComponent]\n }] }];\n } });\nclass IgxSortActionColumnsPipe {\n transform(collection, displayOrder, _pipeTrigger) {\n if (displayOrder === ColumnDisplayOrder.Alphabetical) {\n return collection.sort((a, b) => (a.header || a.field).localeCompare(b.header || b.field));\n }\n return collection;\n }\n}\nIgxSortActionColumnsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSortActionColumnsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxSortActionColumnsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSortActionColumnsPipe, name: \"sortActionColumns\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSortActionColumnsPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'sortActionColumns' }]\n }] });\n\nclass IgxColumnHidingDirective extends IgxColumnActionsBaseDirective {\n constructor(columnActions) {\n super();\n this.columnActions = columnActions;\n /**\n * @hidden @internal\n */\n this.actionEnabledColumnsFilter = c => !c.disableHiding;\n columnActions.actionsDirective = this;\n }\n /**\n * @hidden @internal\n */\n get checkAllLabel() {\n var _a, _b;\n return (_b = (_a = this.columnActions.grid) === null || _a === void 0 ? void 0 : _a.resourceStrings.igx_grid_hiding_check_all_label) !== null && _b !== void 0 ? _b : 'Show All';\n }\n /**\n * @hidden @internal\n */\n get uncheckAllLabel() {\n var _a, _b;\n return (_b = (_a = this.columnActions.grid) === null || _a === void 0 ? void 0 : _a.resourceStrings.igx_grid_hiding_uncheck_all_label) !== null && _b !== void 0 ? _b : 'Hide All';\n }\n /**\n * @hidden @internal\n */\n checkAll() {\n this.columnActions.filteredColumns.forEach(c => c.toggleVisibility(false));\n }\n /**\n * @hidden @internal\n */\n uncheckAll() {\n this.columnActions.filteredColumns.forEach(c => c.toggleVisibility(true));\n }\n /**\n * @hidden @internal\n */\n columnChecked(column) {\n return !column.hidden;\n }\n /**\n * @hidden @internal\n */\n toggleColumn(column) {\n column.toggleVisibility();\n }\n get allChecked() {\n return this.columnActions.filteredColumns.every(col => !this.columnChecked(col));\n }\n get allUnchecked() {\n return this.columnActions.filteredColumns.every(col => this.columnChecked(col));\n }\n}\nIgxColumnHidingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnHidingDirective, deps: [{ token: IgxColumnActionsComponent }], target: i0.ɵɵFactoryTarget.Directive });\nIgxColumnHidingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxColumnHidingDirective, selector: \"[igxColumnHiding]\", usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnHidingDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxColumnHiding]' }]\n }], ctorParameters: function () {\n return [{ type: IgxColumnActionsComponent, decorators: [{\n type: Inject,\n args: [IgxColumnActionsComponent]\n }] }];\n } });\n\nclass IgxColumnPinningDirective extends IgxColumnActionsBaseDirective {\n constructor(columnActions) {\n super();\n this.columnActions = columnActions;\n /**\n * @hidden @internal\n */\n this.actionEnabledColumnsFilter = (c) => !c.disablePinning && !c.level;\n columnActions.actionsDirective = this;\n }\n /**\n * @hidden @internal\n */\n get checkAllLabel() {\n var _a, _b;\n return (_b = (_a = this.columnActions.grid) === null || _a === void 0 ? void 0 : _a.resourceStrings.igx_grid_pinning_check_all_label) !== null && _b !== void 0 ? _b : 'Pin All';\n }\n /**\n * @hidden @internal\n */\n get uncheckAllLabel() {\n var _a, _b;\n return (_b = (_a = this.columnActions.grid) === null || _a === void 0 ? void 0 : _a.resourceStrings.igx_grid_pinning_uncheck_all_label) !== null && _b !== void 0 ? _b : 'Unpin All';\n }\n /**\n * @hidden @internal\n */\n checkAll() {\n this.columnActions.filteredColumns.forEach(c => c.pinned = true);\n }\n /**\n * @hidden @internal\n */\n uncheckAll() {\n this.columnActions.filteredColumns.forEach(c => c.pinned = false);\n }\n /**\n * @hidden @internal\n */\n columnChecked(column) {\n return column.pinned;\n }\n /**\n * @hidden @internal\n */\n toggleColumn(column) {\n column.pinned = !column.pinned;\n }\n get allUnchecked() {\n return !this.columnActions.filteredColumns.some(col => !this.columnChecked(col));\n }\n get allChecked() {\n return !this.columnActions.filteredColumns.some(col => this.columnChecked(col));\n }\n}\nIgxColumnPinningDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnPinningDirective, deps: [{ token: IgxColumnActionsComponent }], target: i0.ɵɵFactoryTarget.Directive });\nIgxColumnPinningDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxColumnPinningDirective, selector: \"[igxColumnPinning]\", usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnPinningDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[igxColumnPinning]' }]\n }], ctorParameters: function () {\n return [{ type: IgxColumnActionsComponent, decorators: [{\n type: Inject,\n args: [IgxColumnActionsComponent]\n }] }];\n } });\n\nclass IgxColumnActionsModule {\n}\nIgxColumnActionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnActionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxColumnActionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnActionsModule, declarations: [IgxColumnHidingDirective,\n IgxColumnPinningDirective,\n IgxColumnActionsComponent,\n IgxColumnActionEnabledPipe,\n IgxFilterActionColumnsPipe,\n IgxSortActionColumnsPipe], imports: [IgxGridSharedModules,\n IgxGridPipesModule], exports: [IgxColumnHidingDirective,\n IgxColumnPinningDirective,\n IgxColumnActionsComponent,\n IgxColumnActionEnabledPipe,\n IgxFilterActionColumnsPipe,\n IgxSortActionColumnsPipe] });\nIgxColumnActionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnActionsModule, imports: [IgxGridSharedModules,\n IgxGridPipesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxColumnActionsModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxColumnHidingDirective,\n IgxColumnPinningDirective,\n IgxColumnActionsComponent,\n IgxColumnActionEnabledPipe,\n IgxFilterActionColumnsPipe,\n IgxSortActionColumnsPipe\n ],\n imports: [\n IgxGridSharedModules,\n IgxGridPipesModule\n ],\n exports: [\n IgxColumnHidingDirective,\n IgxColumnPinningDirective,\n IgxColumnActionsComponent,\n IgxColumnActionEnabledPipe,\n IgxFilterActionColumnsPipe,\n IgxSortActionColumnsPipe\n ]\n }]\n }] });\n\n/**\n * Base class for the pinning/hiding column and exporter actions.\n *\n * @hidden @internal\n */\nclass BaseToolbarDirective {\n /**\n * Sets overlay settings\n */\n set overlaySettings(overlaySettings) {\n this._overlaySettings = overlaySettings;\n }\n /**\n * Returns overlay settings\n */\n get overlaySettings() {\n return this._overlaySettings;\n }\n /**\n * Returns the grid containing this component.\n */\n get grid() {\n return this.toolbar.grid;\n }\n constructor(toolbar) {\n this.toolbar = toolbar;\n /**\n * Emits an event before the toggle container is opened.\n */\n this.opening = new EventEmitter();\n /**\n * Emits an event after the toggle container is opened.\n */\n this.opened = new EventEmitter();\n /**\n * Emits an event before the toggle container is closed.\n */\n this.closing = new EventEmitter();\n /**\n * Emits an event after the toggle container is closed.\n */\n this.closed = new EventEmitter();\n /**\n * Emits when after a column's checked state is changed\n */\n this.columnToggle = new EventEmitter();\n this.$destroy = new Subject();\n this._overlaySettings = {\n positionStrategy: new ConnectedPositioningStrategy({\n horizontalDirection: HorizontalAlignment.Left,\n horizontalStartPoint: HorizontalAlignment.Right,\n verticalDirection: VerticalAlignment.Bottom,\n verticalStartPoint: VerticalAlignment.Bottom\n }),\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnEscape: true,\n closeOnOutsideClick: true\n };\n }\n ngOnDestroy() {\n this.$destroy.next();\n this.$destroy.complete();\n }\n /** @hidden @internal */\n toggle(anchorElement, toggleRef, actions) {\n if (actions) {\n this._setupListeners(toggleRef, actions);\n const setHeight = () => {\n var _a;\n return actions.columnsAreaMaxHeight = actions.columnsAreaMaxHeight !== '100%'\n ? actions.columnsAreaMaxHeight :\n (_a = this.columnListHeight) !== null && _a !== void 0 ? _a : `${Math.max(this.grid.calcHeight * 0.5, 200)}px`;\n };\n toggleRef.opening.pipe(first$1()).subscribe(setHeight);\n }\n toggleRef.toggle(Object.assign(Object.assign({}, this.overlaySettings), { target: anchorElement, outlet: this.grid.outlet,\n excludeFromOutsideClick: [anchorElement] }));\n }\n /** @hidden @internal */\n focusSearch(columnActions) {\n var _a;\n (_a = columnActions.querySelector('input')) === null || _a === void 0 ? void 0 : _a.focus();\n }\n _setupListeners(toggleRef, actions) {\n if (actions) {\n if (!this.$sub || this.$sub.closed) {\n this.$sub = actions.columnToggled.pipe(takeUntil(this.$destroy)).subscribe((event) => this.columnToggle.emit(event));\n }\n }\n /** The if statement prevents emitting open and close events twice */\n if (toggleRef.collapsed) {\n toggleRef.opening.pipe(first$1(), takeUntil(this.$destroy)).subscribe((event) => this.opening.emit(event));\n toggleRef.opened.pipe(first$1(), takeUntil(this.$destroy)).subscribe((event) => this.opened.emit(event));\n }\n else {\n toggleRef.closing.pipe(first$1(), takeUntil(this.$destroy)).subscribe((event) => this.closing.emit(event));\n toggleRef.closed.pipe(first$1(), takeUntil(this.$destroy)).subscribe((event) => this.closed.emit(event));\n }\n }\n}\nBaseToolbarDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: BaseToolbarDirective, deps: [{ token: IgxToolbarToken }], target: i0.ɵɵFactoryTarget.Directive });\nBaseToolbarDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: BaseToolbarDirective, inputs: { columnListHeight: \"columnListHeight\", title: \"title\", prompt: \"prompt\", overlaySettings: \"overlaySettings\" }, outputs: { opening: \"opening\", opened: \"opened\", closing: \"closing\", closed: \"closed\", columnToggle: \"columnToggle\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: BaseToolbarDirective, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: IgxToolbarToken, decorators: [{\n type: Inject,\n args: [IgxToolbarToken]\n }] }];\n }, propDecorators: { columnListHeight: [{\n type: Input\n }], title: [{\n type: Input\n }], prompt: [{\n type: Input\n }], overlaySettings: [{\n type: Input\n }], opening: [{\n type: Output\n }], opened: [{\n type: Output\n }], closing: [{\n type: Output\n }], closed: [{\n type: Output\n }], columnToggle: [{\n type: Output\n }] } });\n/**\n * @hidden @internal\n * Base class for pinning/hiding column actions\n */\nclass BaseToolbarColumnActionsDirective extends BaseToolbarDirective {\n constructor() {\n super(...arguments);\n this.hideFilter = false;\n this.filterCriteria = '';\n this.columnDisplayOrder = ColumnDisplayOrder.DisplayOrder;\n this.columnsAreaMaxHeight = '100%';\n this.indentetion = 30;\n }\n checkAll() {\n this.columnActionsUI.checkAllColumns();\n }\n uncheckAll() {\n this.columnActionsUI.uncheckAllColumns();\n }\n}\nBaseToolbarColumnActionsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: BaseToolbarColumnActionsDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nBaseToolbarColumnActionsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: BaseToolbarColumnActionsDirective, inputs: { hideFilter: \"hideFilter\", filterCriteria: \"filterCriteria\", columnDisplayOrder: \"columnDisplayOrder\", columnsAreaMaxHeight: \"columnsAreaMaxHeight\", uncheckAllText: \"uncheckAllText\", checkAllText: \"checkAllText\", indentetion: \"indentetion\", buttonText: \"buttonText\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: BaseToolbarColumnActionsDirective, decorators: [{\n type: Directive\n }], propDecorators: { hideFilter: [{\n type: Input\n }], filterCriteria: [{\n type: Input\n }], columnDisplayOrder: [{\n type: Input\n }], columnsAreaMaxHeight: [{\n type: Input\n }], uncheckAllText: [{\n type: Input\n }], checkAllText: [{\n type: Input\n }], indentetion: [{\n type: Input\n }], buttonText: [{\n type: Input\n }] } });\n\n/**\n * Provides a pre-configured exporter component for the grid.\n *\n * @remarks\n * This component still needs the actual exporter service(s) provided in the DI chain\n * in order to export something.\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n */\nclass IgxGridToolbarExporterComponent extends BaseToolbarDirective {\n constructor(toolbar, excelExporter, csvExporter) {\n super(toolbar);\n this.excelExporter = excelExporter;\n this.csvExporter = csvExporter;\n /**\n * Show entry for CSV export.\n */\n this.exportCSV = true;\n /**\n * Show entry for Excel export.\n */\n this.exportExcel = true;\n /**\n * The name for the exported file.\n */\n this.filename = 'ExportedData';\n /**\n * Emitted when starting an export operation. Re-emitted additionally\n * by the grid itself.\n */\n this.exportStarted = new EventEmitter();\n /**\n * Emitted on successful ending of an export operation.\n */\n this.exportEnded = new EventEmitter();\n /**\n * Indicates whether there is an export in progress.\n */\n this.isExporting = false;\n }\n export(type, toggleRef) {\n let options;\n let exporter;\n toggleRef === null || toggleRef === void 0 ? void 0 : toggleRef.close();\n switch (type) {\n case 'csv':\n options = new IgxCsvExporterOptions(this.filename, CsvFileTypes.CSV);\n exporter = this.csvExporter;\n break;\n case 'excel':\n options = new IgxExcelExporterOptions(this.filename);\n exporter = this.excelExporter;\n }\n const args = { exporter, options, grid: this.grid, cancel: false };\n this.exportStarted.emit(args);\n this.grid.toolbarExporting.emit(args);\n this.isExporting = true;\n this.toolbar.showProgress = true;\n if (args.cancel) {\n return;\n }\n exporter.exportEnded.pipe(first$1()).subscribe(() => {\n this.exportEnded.emit();\n this.isExporting = false;\n this.toolbar.showProgress = false;\n });\n exporter.export(this.grid, options);\n }\n}\nIgxGridToolbarExporterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarExporterComponent, deps: [{ token: IgxToolbarToken }, { token: IgxExcelExporterService }, { token: IgxCsvExporterService }], target: i0.ɵɵFactoryTarget.Component });\nIgxGridToolbarExporterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridToolbarExporterComponent, selector: \"igx-grid-toolbar-exporter\", inputs: { exportCSV: \"exportCSV\", exportExcel: \"exportExcel\", filename: \"filename\" }, outputs: { exportStarted: \"exportStarted\", exportEnded: \"exportEnded\" }, queries: [{ propertyName: \"hasExcelAttr\", first: true, predicate: IgxExcelTextDirective, descendants: true }, { propertyName: \"hasCSVAttr\", first: true, predicate: IgxCSVTextDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: \"\\n\\n
    \\n
      \\n
    • \\n \\n \\n \\n \\n {{ grid?.resourceStrings.igx_grid_toolbar_exporter_excel_entry_text}}\\n \\n \\n
    • \\n\\n
    • \\n \\n \\n \\n \\n {{ grid?.resourceStrings.igx_grid_toolbar_exporter_csv_entry_text }}\\n \\n
    • \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }, { kind: \"directive\", type: IgxToggleDirective, selector: \"[igxToggle]\", inputs: [\"id\"], outputs: [\"opened\", \"opening\", \"closed\", \"closing\", \"appended\"], exportAs: [\"toggle\"] }, { kind: \"directive\", type: IgxCSVTextDirective, selector: \"[csvText],csv-text\" }, { kind: \"directive\", type: IgxExcelTextDirective, selector: \"[excelText],excel-text\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarExporterComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-grid-toolbar-exporter', template: \"\\n\\n
    \\n
      \\n
    • \\n \\n \\n \\n \\n {{ grid?.resourceStrings.igx_grid_toolbar_exporter_excel_entry_text}}\\n \\n \\n
    • \\n\\n
    • \\n \\n \\n \\n \\n {{ grid?.resourceStrings.igx_grid_toolbar_exporter_csv_entry_text }}\\n \\n
    • \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: IgxToolbarToken, decorators: [{\n type: Inject,\n args: [IgxToolbarToken]\n }] }, { type: IgxExcelExporterService }, { type: IgxCsvExporterService }];\n }, propDecorators: { hasExcelAttr: [{\n type: ContentChild,\n args: [IgxExcelTextDirective]\n }], hasCSVAttr: [{\n type: ContentChild,\n args: [IgxCSVTextDirective]\n }], exportCSV: [{\n type: Input\n }], exportExcel: [{\n type: Input\n }], filename: [{\n type: Input\n }], exportStarted: [{\n type: Output\n }], exportEnded: [{\n type: Output\n }] } });\n\n/**\n * Provides a pre-configured column hiding component for the grid.\n *\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n * @example\n * ```html\n * \n * ```\n */\nclass IgxGridToolbarHidingComponent extends BaseToolbarColumnActionsDirective {\n set content(content) {\n this.columnActionsUI = content;\n }\n}\nIgxGridToolbarHidingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarHidingComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxGridToolbarHidingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridToolbarHidingComponent, selector: \"igx-grid-toolbar-hiding\", viewQueries: [{ propertyName: \"content\", first: true, predicate: IgxColumnHidingDirective, descendants: true, read: IgxColumnActionsComponent }], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n \\n\\n\", dependencies: [{ kind: \"directive\", type: IgxColumnHidingDirective, selector: \"[igxColumnHiding]\" }, { kind: \"component\", type: IgxColumnActionsComponent, selector: \"igx-column-actions\", inputs: [\"grid\", \"indentation\", \"columnsAreaMaxHeight\", \"hideFilter\", \"title\", \"filterColumnsPrompt\", \"filterCriteria\", \"columnDisplayOrder\", \"uncheckAllText\", \"checkAllText\", \"id\"], outputs: [\"columnToggled\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxToggleDirective, selector: \"[igxToggle]\", inputs: [\"id\"], outputs: [\"opened\", \"opening\", \"closed\", \"closing\", \"appended\"], exportAs: [\"toggle\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarHidingComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-grid-toolbar-hiding', template: \"\\n \\n \\n \\n\\n\" }]\n }], propDecorators: { content: [{\n type: ViewChild,\n args: [IgxColumnHidingDirective, { read: IgxColumnActionsComponent }]\n }] } });\n\n/**\n * Provides a pre-configured column pinning component for the grid.\n *\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n * @example\n * ```html\n * \n * ```\n */\nclass IgxGridToolbarPinningComponent extends BaseToolbarColumnActionsDirective {\n set content(content) {\n this.columnActionsUI = content;\n }\n}\nIgxGridToolbarPinningComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarPinningComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxGridToolbarPinningComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxGridToolbarPinningComponent, selector: \"igx-grid-toolbar-pinning\", viewQueries: [{ propertyName: \"content\", first: true, predicate: IgxColumnPinningDirective, descendants: true, read: IgxColumnActionsComponent }], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n \\n\\n\", dependencies: [{ kind: \"directive\", type: IgxColumnPinningDirective, selector: \"[igxColumnPinning]\" }, { kind: \"component\", type: IgxColumnActionsComponent, selector: \"igx-column-actions\", inputs: [\"grid\", \"indentation\", \"columnsAreaMaxHeight\", \"hideFilter\", \"title\", \"filterColumnsPrompt\", \"filterCriteria\", \"columnDisplayOrder\", \"uncheckAllText\", \"checkAllText\", \"id\"], outputs: [\"columnToggled\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxToggleDirective, selector: \"[igxToggle]\", inputs: [\"id\"], outputs: [\"opened\", \"opening\", \"closed\", \"closing\", \"appended\"], exportAs: [\"toggle\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarPinningComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-grid-toolbar-pinning', template: \"\\n \\n \\n \\n\\n\" }]\n }], propDecorators: { content: [{\n type: ViewChild,\n args: [IgxColumnPinningDirective, { read: IgxColumnActionsComponent }]\n }] } });\n\nclass IgxGridToolbarModule {\n}\nIgxGridToolbarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxGridToolbarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarModule, declarations: [IgxCSVTextDirective,\n IgxExcelTextDirective,\n IgxGridToolbarActionsComponent,\n IgxGridToolbarAdvancedFilteringComponent,\n IgxGridToolbarComponent,\n IgxGridToolbarExporterComponent,\n IgxGridToolbarHidingComponent,\n IgxGridToolbarPinningComponent,\n IgxGridToolbarTitleComponent,\n IgxGridToolbarDirective], imports: [IgxColumnActionsModule,\n IgxGridSharedModules], exports: [IgxCSVTextDirective,\n IgxExcelTextDirective,\n IgxGridToolbarActionsComponent,\n IgxGridToolbarAdvancedFilteringComponent,\n IgxGridToolbarComponent,\n IgxGridToolbarExporterComponent,\n IgxGridToolbarHidingComponent,\n IgxGridToolbarPinningComponent,\n IgxGridToolbarTitleComponent,\n IgxGridToolbarDirective] });\nIgxGridToolbarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarModule, imports: [IgxColumnActionsModule,\n IgxGridSharedModules] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridToolbarModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxCSVTextDirective,\n IgxExcelTextDirective,\n IgxGridToolbarActionsComponent,\n IgxGridToolbarAdvancedFilteringComponent,\n IgxGridToolbarComponent,\n IgxGridToolbarExporterComponent,\n IgxGridToolbarHidingComponent,\n IgxGridToolbarPinningComponent,\n IgxGridToolbarTitleComponent,\n IgxGridToolbarDirective\n ],\n imports: [\n IgxColumnActionsModule,\n IgxGridSharedModules\n ],\n exports: [\n IgxCSVTextDirective,\n IgxExcelTextDirective,\n IgxGridToolbarActionsComponent,\n IgxGridToolbarAdvancedFilteringComponent,\n IgxGridToolbarComponent,\n IgxGridToolbarExporterComponent,\n IgxGridToolbarHidingComponent,\n IgxGridToolbarPinningComponent,\n IgxGridToolbarTitleComponent,\n IgxGridToolbarDirective\n ]\n }]\n }] });\n\n/**\n * @hidden\n */\nclass IgxGridCommonModule {\n}\nIgxGridCommonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxGridCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCommonModule, declarations: [IgxRowDirective,\n IgxGridCellComponent,\n IgxRowAddTextDirective,\n IgxRowEditTemplateDirective,\n IgxRowEditActionsDirective,\n IgxRowEditTextDirective,\n IgxRowEditTabStopDirective,\n IgxGridBodyDirective,\n IgxGridFooterComponent,\n IgxAdvancedFilteringDialogComponent,\n IgxRowExpandedIndicatorDirective,\n IgxRowCollapsedIndicatorDirective,\n IgxHeaderExpandIndicatorDirective,\n IgxHeaderCollapseIndicatorDirective,\n IgxExcelStyleHeaderIconDirective,\n IgxSortAscendingHeaderIconDirective,\n IgxSortDescendingHeaderIconDirective,\n IgxSortHeaderIconDirective,\n IgxGroupAreaDropDirective,\n IgxGroupByMetaPipe], imports: [IgxGridColumnModule,\n IgxGridHeadersModule,\n IgxColumnMovingModule,\n IgxGridResizingModule,\n IgxGridSelectionModule,\n IgxGridSummaryModule,\n IgxGridToolbarModule,\n IgxColumnActionsModule,\n IgxGridPipesModule,\n IgxGridFilteringModule,\n IgxGridExcelStyleFilteringModule,\n IgxRowDragModule,\n IgxPaginatorModule,\n IgxGridSharedModules,\n IgxChipsModule,\n IgxQueryBuilderModule,\n IgxTooltipModule,\n ReactiveFormsModule], exports: [IgxGridCellComponent,\n IgxRowAddTextDirective,\n IgxRowEditTemplateDirective,\n IgxRowEditActionsDirective,\n IgxRowEditTextDirective,\n IgxRowEditTabStopDirective,\n IgxGridBodyDirective,\n IgxColumnActionsModule,\n IgxGridColumnModule,\n IgxGridHeadersModule,\n IgxGridPipesModule,\n IgxGridFilteringModule,\n IgxGridExcelStyleFilteringModule,\n IgxRowDragModule,\n IgxPaginatorModule,\n IgxGridFooterComponent,\n IgxGridResizingModule,\n IgxColumnMovingModule,\n IgxGridSelectionModule,\n IgxGridSummaryModule,\n IgxGridToolbarModule,\n IgxAdvancedFilteringDialogComponent,\n IgxGridSharedModules,\n IgxRowExpandedIndicatorDirective,\n IgxRowCollapsedIndicatorDirective,\n IgxHeaderExpandIndicatorDirective,\n IgxHeaderCollapseIndicatorDirective,\n IgxExcelStyleHeaderIconDirective,\n IgxSortAscendingHeaderIconDirective,\n IgxSortDescendingHeaderIconDirective,\n IgxSortHeaderIconDirective,\n IgxGroupAreaDropDirective,\n IgxGroupByMetaPipe] });\nIgxGridCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCommonModule, imports: [IgxGridColumnModule,\n IgxGridHeadersModule,\n IgxColumnMovingModule,\n IgxGridResizingModule,\n IgxGridSelectionModule,\n IgxGridSummaryModule,\n IgxGridToolbarModule,\n IgxColumnActionsModule,\n IgxGridPipesModule,\n IgxGridFilteringModule,\n IgxGridExcelStyleFilteringModule,\n IgxRowDragModule,\n IgxPaginatorModule,\n IgxGridSharedModules,\n IgxChipsModule,\n IgxQueryBuilderModule,\n IgxTooltipModule,\n ReactiveFormsModule, IgxColumnActionsModule,\n IgxGridColumnModule,\n IgxGridHeadersModule,\n IgxGridPipesModule,\n IgxGridFilteringModule,\n IgxGridExcelStyleFilteringModule,\n IgxRowDragModule,\n IgxPaginatorModule,\n IgxGridResizingModule,\n IgxColumnMovingModule,\n IgxGridSelectionModule,\n IgxGridSummaryModule,\n IgxGridToolbarModule,\n IgxGridSharedModules] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridCommonModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxRowDirective,\n IgxGridCellComponent,\n IgxRowAddTextDirective,\n IgxRowEditTemplateDirective,\n IgxRowEditActionsDirective,\n IgxRowEditTextDirective,\n IgxRowEditTabStopDirective,\n IgxGridBodyDirective,\n IgxGridFooterComponent,\n IgxAdvancedFilteringDialogComponent,\n IgxRowExpandedIndicatorDirective,\n IgxRowCollapsedIndicatorDirective,\n IgxHeaderExpandIndicatorDirective,\n IgxHeaderCollapseIndicatorDirective,\n IgxExcelStyleHeaderIconDirective,\n IgxSortAscendingHeaderIconDirective,\n IgxSortDescendingHeaderIconDirective,\n IgxSortHeaderIconDirective,\n IgxGroupAreaDropDirective,\n IgxGroupByMetaPipe\n ],\n exports: [\n IgxGridCellComponent,\n IgxRowAddTextDirective,\n IgxRowEditTemplateDirective,\n IgxRowEditActionsDirective,\n IgxRowEditTextDirective,\n IgxRowEditTabStopDirective,\n IgxGridBodyDirective,\n IgxColumnActionsModule,\n IgxGridColumnModule,\n IgxGridHeadersModule,\n IgxGridPipesModule,\n IgxGridFilteringModule,\n IgxGridExcelStyleFilteringModule,\n IgxRowDragModule,\n IgxPaginatorModule,\n IgxGridFooterComponent,\n IgxGridResizingModule,\n IgxColumnMovingModule,\n IgxGridSelectionModule,\n IgxGridSummaryModule,\n IgxGridToolbarModule,\n IgxAdvancedFilteringDialogComponent,\n IgxGridSharedModules,\n IgxRowExpandedIndicatorDirective,\n IgxRowCollapsedIndicatorDirective,\n IgxHeaderExpandIndicatorDirective,\n IgxHeaderCollapseIndicatorDirective,\n IgxExcelStyleHeaderIconDirective,\n IgxSortAscendingHeaderIconDirective,\n IgxSortDescendingHeaderIconDirective,\n IgxSortHeaderIconDirective,\n IgxGroupAreaDropDirective,\n IgxGroupByMetaPipe\n ],\n imports: [\n IgxGridColumnModule,\n IgxGridHeadersModule,\n IgxColumnMovingModule,\n IgxGridResizingModule,\n IgxGridSelectionModule,\n IgxGridSummaryModule,\n IgxGridToolbarModule,\n IgxColumnActionsModule,\n IgxGridPipesModule,\n IgxGridFilteringModule,\n IgxGridExcelStyleFilteringModule,\n IgxRowDragModule,\n IgxPaginatorModule,\n IgxGridSharedModules,\n IgxChipsModule,\n IgxQueryBuilderModule,\n IgxTooltipModule,\n ReactiveFormsModule\n ]\n }]\n }] });\n\n/**\n * An internal component representing the group-by drop area for the igx-grid component.\n *\n * @hidden @internal\n */\nclass IgxTreeGridGroupByAreaComponent extends IgxGroupByAreaDirective {\n get hideGroupedColumns() {\n return this._hideGroupedColumns;\n }\n set hideGroupedColumns(value) {\n if (this.grid.columns && this.expressions) {\n this.setColumnsVisibility(value);\n }\n this._hideGroupedColumns = value;\n }\n constructor(differs, ref, platform) {\n super(ref, platform);\n this.differs = differs;\n this._hideGroupedColumns = false;\n this.destroy$ = new Subject();\n }\n ngAfterContentInit() {\n if (this.grid.columns && this.expressions) {\n this.groupingDiffer = this.differs.find(this.expressions).create();\n this.updateColumnsVisibility();\n }\n this.grid.sortingExpressionsChange.pipe(takeUntil(this.destroy$)).subscribe((sortingExpressions) => {\n if (!this.expressions || !this.expressions.length) {\n return;\n }\n let changed = false;\n sortingExpressions.forEach((sortExpr) => {\n const fieldName = sortExpr.fieldName;\n const groupingExpr = this.expressions.find(ex => ex.fieldName === fieldName);\n if (groupingExpr && groupingExpr.dir !== sortExpr.dir) {\n groupingExpr.dir = sortExpr.dir;\n changed = true;\n }\n });\n if (changed) {\n this.expressions = [...this.expressions];\n }\n });\n }\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n handleReorder(event) {\n const { chipsArray, originalEvent } = event;\n const newExpressions = this.getReorderedExpressions(chipsArray);\n this.chipExpressions = newExpressions;\n // When reordered using keyboard navigation, we don't have `onMoveEnd` event.\n if (originalEvent instanceof KeyboardEvent) {\n this.expressions = newExpressions;\n }\n }\n handleMoveEnd() {\n this.expressions = this.chipExpressions;\n }\n groupBy(expression) {\n this.expressions.push(expression);\n this.expressions = [...this.expressions];\n }\n clearGrouping(name) {\n this.expressions = this.expressions.filter(item => item.fieldName !== name);\n this.grid.sortingExpressions = this.grid.sortingExpressions.filter(item => item.fieldName !== name);\n this.grid.notifyChanges(true);\n }\n expressionsChanged() {\n this.updateColumnsVisibility();\n }\n updateColumnsVisibility() {\n if (this.groupingDiffer && this.grid.columns && !this.grid.hasColumnLayouts) {\n const changes = this.groupingDiffer.diff(this.expressions);\n if (changes && this.grid.columns.length > 0) {\n changes.forEachAddedItem((rec) => {\n const col = this.grid.getColumnByName(rec.item.fieldName);\n col.hidden = this.hideGroupedColumns;\n });\n changes.forEachRemovedItem((rec) => {\n const col = this.grid.getColumnByName(rec.item.fieldName);\n col.hidden = false;\n });\n }\n }\n }\n setColumnsVisibility(value) {\n if (this.grid.columns.length > 0 && !this.grid.hasColumnLayouts) {\n this.expressions.forEach((expr) => {\n const col = this.grid.getColumnByName(expr.fieldName);\n col.hidden = value;\n });\n }\n }\n}\nIgxTreeGridGroupByAreaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridGroupByAreaComponent, deps: [{ token: i0.IterableDiffers }, { token: i0.ElementRef }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nIgxTreeGridGroupByAreaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTreeGridGroupByAreaComponent, selector: \"igx-tree-grid-group-by-area\", inputs: { hideGroupedColumns: \"hideGroupedColumns\" }, providers: [{ provide: IgxGroupByAreaDirective, useExisting: IgxTreeGridGroupByAreaComponent }], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n {{ (expression.fieldName | igxGroupByMeta:grid).title }}\\n {{ expression.dir === 1 ? 'arrow_upward' : 'arrow_downward' }}\\n \\n\\n \\n arrow_forward\\n \\n \\n
    \\n \\n
    \\n
    \\n\\n\\n group_work\\n {{ dropAreaMessage }}\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: IgxSuffixDirective, selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"component\", type: IgxChipsAreaComponent, selector: \"igx-chips-area\", inputs: [\"width\", \"height\"], outputs: [\"reorder\", \"selectionChange\", \"moveStart\", \"moveEnd\"] }, { kind: \"component\", type: IgxChipComponent, selector: \"igx-chip\", inputs: [\"id\", \"tabIndex\", \"data\", \"draggable\", \"animateOnRelease\", \"hideBaseOnDrag\", \"removable\", \"removeIcon\", \"selectable\", \"selectIcon\", \"disabled\", \"selected\", \"color\", \"resourceStrings\"], outputs: [\"selectedChange\", \"moveStart\", \"moveEnd\", \"remove\", \"chipClick\", \"selectedChanging\", \"selectedChanged\", \"keyDown\", \"dragEnter\", \"dragLeave\", \"dragOver\", \"dragDrop\"] }, { kind: \"directive\", type: IgxDropDirective, selector: \"[igxDrop]\", inputs: [\"igxDrop\", \"dropChannel\", \"dropStrategy\"], outputs: [\"enter\", \"over\", \"leave\", \"dropped\"], exportAs: [\"drop\"] }, { kind: \"directive\", type: IgxGroupAreaDropDirective, selector: \"[igxGroupAreaDrop]\" }, { kind: \"pipe\", type: IgxGroupByMetaPipe, name: \"igxGroupByMeta\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridGroupByAreaComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-tree-grid-group-by-area', providers: [{ provide: IgxGroupByAreaDirective, useExisting: IgxTreeGridGroupByAreaComponent }], template: \"\\n \\n \\n {{ (expression.fieldName | igxGroupByMeta:grid).title }}\\n {{ expression.dir === 1 ? 'arrow_upward' : 'arrow_downward' }}\\n \\n\\n \\n arrow_forward\\n \\n \\n
    \\n \\n
    \\n
    \\n\\n\\n group_work\\n {{ dropAreaMessage }}\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.IterableDiffers }, { type: i0.ElementRef }, { type: PlatformUtil }]; }, propDecorators: { hideGroupedColumns: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass IgxGridModule {\n}\nIgxGridModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxGridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridModule, declarations: [IgxGridComponent,\n IgxGridRowComponent,\n IgxGridGroupByRowComponent,\n IgxGroupByRowTemplateDirective,\n IgxGridDetailTemplateDirective,\n IgxGridGroupingPipe,\n IgxGridPagingPipe,\n IgxGridSortingPipe,\n IgxGridFilteringPipe,\n IgxGridSummaryPipe,\n IgxGridDetailsPipe,\n IgxGridExpandableCellComponent,\n IgxGridGroupByAreaComponent], imports: [IgxGridCommonModule,\n IgxTooltipModule,\n ReactiveFormsModule], exports: [IgxGridComponent,\n IgxGridExpandableCellComponent,\n IgxGridGroupByRowComponent,\n IgxGridRowComponent,\n IgxGroupByRowTemplateDirective,\n IgxGridDetailTemplateDirective,\n IgxGridGroupingPipe,\n IgxGridPagingPipe,\n IgxGridSortingPipe,\n IgxGridFilteringPipe,\n IgxGridSummaryPipe,\n IgxGridDetailsPipe,\n IgxGridGroupByAreaComponent,\n IgxGridCommonModule] });\nIgxGridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridModule, imports: [IgxGridCommonModule,\n IgxTooltipModule,\n ReactiveFormsModule, IgxGridCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxGridComponent,\n IgxGridRowComponent,\n IgxGridGroupByRowComponent,\n IgxGroupByRowTemplateDirective,\n IgxGridDetailTemplateDirective,\n IgxGridGroupingPipe,\n IgxGridPagingPipe,\n IgxGridSortingPipe,\n IgxGridFilteringPipe,\n IgxGridSummaryPipe,\n IgxGridDetailsPipe,\n IgxGridExpandableCellComponent,\n IgxGridGroupByAreaComponent,\n ],\n exports: [\n IgxGridComponent,\n IgxGridExpandableCellComponent,\n IgxGridGroupByRowComponent,\n IgxGridRowComponent,\n IgxGroupByRowTemplateDirective,\n IgxGridDetailTemplateDirective,\n IgxGridGroupingPipe,\n IgxGridPagingPipe,\n IgxGridSortingPipe,\n IgxGridFilteringPipe,\n IgxGridSummaryPipe,\n IgxGridDetailsPipe,\n IgxGridGroupByAreaComponent,\n IgxGridCommonModule\n ],\n imports: [\n IgxGridCommonModule,\n IgxTooltipModule,\n ReactiveFormsModule\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n }]\n }] });\n\nclass IgxTreeGridAPIService extends GridBaseAPIService {\n get_all_data(transactions) {\n const grid = this.grid;\n let data = grid && grid.flatData ? grid.flatData : [];\n data = transactions ? grid.dataWithAddedInTransactionRows : data;\n return data;\n }\n get_summary_data() {\n var _a;\n const grid = this.grid;\n const data = (_a = grid.processedRootRecords) === null || _a === void 0 ? void 0 : _a.filter(row => row.isFilteredOutParent === undefined || row.isFilteredOutParent === false).map(rec => rec.data);\n if (data && grid.transactions.enabled) {\n const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === TransactionType.DELETE).map(t => t.id);\n deletedRows.forEach(rowID => {\n const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;\n const index = tempData.indexOf(rowID);\n if (index !== -1) {\n data.splice(index, 1);\n }\n });\n }\n return data;\n }\n allow_expansion_state_change(rowID, expanded) {\n const grid = this.grid;\n const row = grid.records.get(rowID);\n if (row.expanded === expanded ||\n ((!row.children || !row.children.length) && (!grid.loadChildrenOnDemand ||\n (grid.hasChildrenKey && !row.data[grid.hasChildrenKey])))) {\n return false;\n }\n return true;\n }\n expand_path_to_record(record) {\n const grid = this.grid;\n const expandedStates = grid.expansionStates;\n while (record.parent) {\n record = record.parent;\n const expanded = this.get_row_expansion_state(record);\n if (!expanded) {\n expandedStates.set(record.key, true);\n }\n }\n grid.expansionStates = expandedStates;\n if (grid.rowEditable) {\n grid.gridAPI.crudService.endEdit(false);\n }\n }\n get_row_expansion_state(record) {\n const grid = this.grid;\n const states = grid.expansionStates;\n const expanded = states.get(record.key);\n if (expanded !== undefined) {\n return expanded;\n }\n else {\n return record.children && record.children.length && record.level < grid.expansionDepth;\n }\n }\n should_apply_number_style(column) {\n return column.dataType === GridColumnDataType.Number && column.visibleIndex !== 0;\n }\n deleteRowById(rowID) {\n const treeGrid = this.grid;\n const flatDataWithCascadeOnDeleteAndTransactions = treeGrid.primaryKey &&\n treeGrid.foreignKey &&\n treeGrid.cascadeOnDelete &&\n treeGrid.transactions.enabled;\n if (flatDataWithCascadeOnDeleteAndTransactions) {\n treeGrid.transactions.startPending();\n }\n const record = super.deleteRowById(rowID);\n if (flatDataWithCascadeOnDeleteAndTransactions) {\n treeGrid.transactions.endPending(true);\n }\n return record;\n }\n deleteRowFromData(rowID, index) {\n const treeGrid = this.grid;\n const record = treeGrid.records.get(rowID);\n if (treeGrid.primaryKey && treeGrid.foreignKey) {\n index = treeGrid.primaryKey ?\n treeGrid.data.map(c => c[treeGrid.primaryKey]).indexOf(rowID) :\n treeGrid.data.indexOf(rowID);\n super.deleteRowFromData(rowID, index);\n if (treeGrid.cascadeOnDelete) {\n if (record && record.children) {\n for (const child of record.children) {\n super.deleteRowById(child.key);\n }\n }\n }\n }\n else {\n const collection = record.parent ? record.parent.data[treeGrid.childDataKey] : treeGrid.data;\n index = treeGrid.primaryKey ?\n collection.map(c => c[treeGrid.primaryKey]).indexOf(rowID) :\n collection.indexOf(rowID);\n const selectedChildren = [];\n this.get_selected_children(record, selectedChildren);\n if (selectedChildren.length > 0) {\n treeGrid.deselectRows(selectedChildren);\n }\n if (treeGrid.transactions.enabled) {\n const path = treeGrid.generateRowPath(rowID);\n treeGrid.transactions.add({\n id: rowID,\n type: TransactionType.DELETE,\n newValue: null,\n path\n }, collection[index]);\n }\n else {\n collection.splice(index, 1);\n }\n this.grid.validation.clear(rowID);\n }\n }\n get_selected_children(record, selectedRowIDs) {\n const grid = this.grid;\n if (!record.children || record.children.length === 0) {\n return;\n }\n for (const child of record.children) {\n if (grid.selectionService.isRowSelected(child.key)) {\n selectedRowIDs.push(child.key);\n }\n this.get_selected_children(child, selectedRowIDs);\n }\n }\n row_deleted_transaction(rowID) {\n return this.row_deleted_parent(rowID) || super.row_deleted_transaction(rowID);\n }\n get_rec_by_id(rowID) {\n return this.grid.records.get(rowID);\n }\n /**\n * Returns the index of the record in the data view by pk or -1 if not found or primaryKey is not set.\n *\n * @param pk\n * @param dataCollection\n */\n get_rec_index_by_id(pk, dataCollection) {\n dataCollection = dataCollection || this.grid.data;\n return this.grid.primaryKey ? dataCollection.findIndex(rec => rec.data[this.grid.primaryKey] === pk) : -1;\n }\n addRowToData(data, parentRowID) {\n if (parentRowID !== undefined && parentRowID !== null) {\n const state = this.grid.transactions.getState(parentRowID);\n // we should not allow adding of rows as child of deleted row\n if (state && state.type === TransactionType.DELETE) {\n throw Error(`Cannot add child row to deleted parent row`);\n }\n const parentRecord = this.grid.records.get(parentRowID);\n if (!parentRecord) {\n throw Error('Invalid parent row ID!');\n }\n this.grid.summaryService.clearSummaryCache({ rowID: parentRecord.key });\n if (this.grid.primaryKey && this.grid.foreignKey) {\n data[this.grid.foreignKey] = parentRowID;\n super.addRowToData(data);\n }\n else {\n const parentData = parentRecord.data;\n const childKey = this.grid.childDataKey;\n if (this.grid.transactions.enabled) {\n const rowId = this.grid.primaryKey ? data[this.grid.primaryKey] : data;\n const path = [];\n path.push(...this.grid.generateRowPath(parentRowID));\n path.push(parentRowID);\n this.grid.transactions.add({\n id: rowId,\n path,\n newValue: data,\n type: TransactionType.ADD\n }, null);\n }\n else {\n if (!parentData[childKey]) {\n parentData[childKey] = [];\n }\n parentData[childKey].push(data);\n }\n }\n }\n else {\n super.addRowToData(data);\n }\n }\n filterDataByExpressions(expressionsTree) {\n let records = this.filterTreeDataByExpressions(expressionsTree);\n const data = [];\n this.getFlatDataFromFilteredRecords(records, data);\n return data;\n }\n sortDataByExpressions(data, expressions) {\n var _a;\n const records = DataUtil.sort(cloneArray(data), expressions, (_a = this.grid.sortStrategy) !== null && _a !== void 0 ? _a : new IgxDataRecordSorting(), this.grid);\n return records.map(r => r.data);\n }\n filterTreeDataByExpressions(expressionsTree) {\n var _a;\n let records = this.grid.rootRecords;\n if (expressionsTree.filteringOperands.length) {\n const state = {\n expressionsTree,\n strategy: (_a = this.grid.filterStrategy) !== null && _a !== void 0 ? _a : new TreeGridFilteringStrategy()\n };\n records = FilterUtil.filter(cloneArray(records), state, this.grid);\n }\n return records;\n }\n update_row_in_array(value, rowID, index) {\n const grid = this.grid;\n if (grid.primaryKey && grid.foreignKey) {\n super.update_row_in_array(value, rowID, index);\n }\n else {\n const record = grid.records.get(rowID);\n const childData = record.parent ? record.parent.data[grid.childDataKey] : grid.data;\n index = grid.primaryKey ? childData.map(c => c[grid.primaryKey]).indexOf(rowID) :\n childData.indexOf(rowID);\n childData[index] = value;\n }\n }\n /**\n * Updates related row of provided grid's data source with provided new row value\n *\n * @param grid Grid to update data for\n * @param rowID ID of the row to update\n * @param rowValueInDataSource Initial value of the row as it is in data source\n * @param rowCurrentValue Current value of the row as it is with applied previous transactions\n * @param rowNewValue New value of the row\n */\n updateData(grid, rowID, rowValueInDataSource, rowCurrentValue, rowNewValue) {\n if (grid.transactions.enabled) {\n const path = grid.generateRowPath(rowID);\n const transaction = {\n id: rowID,\n type: TransactionType.UPDATE,\n newValue: rowNewValue,\n path\n };\n grid.transactions.add(transaction, rowCurrentValue);\n }\n else {\n mergeObjects(rowValueInDataSource, rowNewValue);\n }\n }\n row_deleted_parent(rowID) {\n const grid = this.grid;\n if (!grid) {\n return false;\n }\n if ((grid.cascadeOnDelete && grid.foreignKey) || grid.childDataKey) {\n let node = grid.records.get(rowID);\n while (node) {\n const state = grid.transactions.getState(node.key);\n if (state && state.type === TransactionType.DELETE) {\n return true;\n }\n node = node.parent;\n }\n }\n return false;\n }\n getFlatDataFromFilteredRecords(records, data) {\n if (!records || records.length === 0) {\n return;\n }\n for (const record of records) {\n if (!record.isFilteredOutParent) {\n data.push(record);\n }\n this.getFlatDataFromFilteredRecords(record.children, data);\n }\n }\n}\nIgxTreeGridAPIService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridAPIService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\nIgxTreeGridAPIService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridAPIService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridAPIService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nclass IgxRowLoadingIndicatorTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxRowLoadingIndicatorTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowLoadingIndicatorTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxRowLoadingIndicatorTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowLoadingIndicatorTemplateDirective, selector: \"[igxRowLoadingIndicator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowLoadingIndicatorTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxRowLoadingIndicator]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nclass IgxTreeGridSelectionService extends IgxGridSelectionService {\n /** Select specified rows. No event is emitted. */\n selectRowsWithNoEvent(rowIDs, clearPrevSelection) {\n if (this.grid && this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n this.cascadeSelectRowsWithNoEvent(rowIDs, clearPrevSelection);\n return;\n }\n super.selectRowsWithNoEvent(rowIDs, clearPrevSelection);\n }\n /** Deselect specified rows. No event is emitted. */\n deselectRowsWithNoEvent(rowIDs) {\n if (this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n this.cascadeDeselectRowsWithNoEvent(rowIDs);\n return;\n }\n super.deselectRowsWithNoEvent(rowIDs);\n }\n emitRowSelectionEvent(newSelection, added, removed, event) {\n if (this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n this.emitCascadeRowSelectionEvent(newSelection, added, removed, event);\n return;\n }\n super.emitRowSelectionEvent(newSelection, added, removed, event);\n }\n updateCascadeSelectionOnFilterAndCRUD(parents, crudRowID, visibleRowIDs = null) {\n if (visibleRowIDs === null) {\n // if the tree grid has flat structure\n // do not explicitly handle the selection state of the rows\n if (!parents.size) {\n return;\n }\n visibleRowIDs = new Set(this.getRowIDs(this.allData));\n this.rowsToBeSelected = new Set(this.rowSelection);\n this.rowsToBeIndeterminate = new Set(this.indeterminateRows);\n if (crudRowID) {\n this.rowSelection.delete(crudRowID);\n }\n }\n if (!parents.size) {\n this.rowSelection = new Set(this.rowsToBeSelected);\n this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n // TODO: emit selectionChangeD event, calculate its args through the handleAddedAndRemovedArgs method\n this.clearHeaderCBState();\n this.selectedRowsChange.next();\n return;\n }\n const newParents = new Set();\n parents.forEach(parent => {\n this.handleRowSelectionState(parent, visibleRowIDs);\n if (parent && parent.parent) {\n newParents.add(parent.parent);\n }\n });\n this.updateCascadeSelectionOnFilterAndCRUD(newParents, null, visibleRowIDs);\n }\n cascadeSelectRowsWithNoEvent(rowIDs, clearPrevSelection) {\n if (clearPrevSelection) {\n this.indeterminateRows.clear();\n this.rowSelection.clear();\n this.calculateRowsNewSelectionState({ added: rowIDs, removed: [] });\n }\n else {\n const oldSelection = this.getSelectedRows();\n const newSelection = [...oldSelection, ...rowIDs];\n const args = { oldSelection, newSelection };\n // retrieve only the rows without their parents/children which has to be added to the selection\n this.handleAddedAndRemovedArgs(args);\n this.calculateRowsNewSelectionState(args);\n }\n this.rowSelection = new Set(this.rowsToBeSelected);\n this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n this.clearHeaderCBState();\n this.selectedRowsChange.next();\n }\n cascadeDeselectRowsWithNoEvent(rowIDs) {\n const args = { added: [], removed: rowIDs };\n this.calculateRowsNewSelectionState(args);\n this.rowSelection = new Set(this.rowsToBeSelected);\n this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n this.clearHeaderCBState();\n this.selectedRowsChange.next();\n }\n get selectionService() {\n return this.grid.selectionService;\n }\n emitCascadeRowSelectionEvent(newSelection, added, removed, event) {\n const currSelection = this.getSelectedRows();\n if (this.areEqualCollections(currSelection, newSelection)) {\n return;\n }\n const args = {\n owner: this.grid, oldSelection: this.getSelectedRowsData(), newSelection,\n added, removed, event, cancel: false\n };\n this.calculateRowsNewSelectionState(args, !!this.grid.primaryKey);\n args.newSelection = Array.from(this.allData.filter(r => this.rowsToBeSelected.has(this.grid.primaryKey ? r[this.grid.primaryKey] : r)));\n // retrieve rows/parents/children which has been added/removed from the selection\n this.handleAddedAndRemovedArgs(args);\n this.grid.rowSelectionChanging.emit(args);\n if (args.cancel) {\n return;\n }\n const newSelectionIDs = args.newSelection.map(r => this.grid.primaryKey ? r[this.grid.primaryKey] : r);\n // if args.newSelection hasn't been modified\n if (this.areEqualCollections(Array.from(this.rowsToBeSelected), newSelectionIDs)) {\n this.rowSelection = new Set(this.rowsToBeSelected);\n this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n this.clearHeaderCBState();\n this.selectedRowsChange.next();\n }\n else {\n // select the rows within the modified args.newSelection with no event\n this.cascadeSelectRowsWithNoEvent(newSelectionIDs, true);\n }\n }\n /**\n * retrieve the rows which should be added/removed to/from the old selection\n */\n handleAddedAndRemovedArgs(args) {\n const newSelectionSet = new Set(args.newSelection);\n const oldSelectionSet = new Set(args.oldSelection);\n args.removed = args.oldSelection.filter(x => !newSelectionSet.has(x));\n args.added = args.newSelection.filter(x => !oldSelectionSet.has(x));\n }\n /**\n * adds to rowsToBeProcessed set all visible children of the rows which was initially within the rowsToBeProcessed set\n *\n * @param rowsToBeProcessed set of the rows (without their parents/children) to be selected/deselected\n * @param visibleRowIDs list of all visible rowIds\n * @returns a new set with all direct parents of the rows within rowsToBeProcessed set\n */\n collectRowsChildrenAndDirectParents(rowsToBeProcessed, visibleRowIDs, adding, shouldConvert) {\n const processedRowsParents = new Set();\n Array.from(rowsToBeProcessed).forEach((row) => {\n const rowID = shouldConvert ? row[this.grid.primaryKey] : row;\n this.selectDeselectRow(rowID, adding);\n const rowTreeRecord = this.grid.gridAPI.get_rec_by_id(rowID);\n const rowAndAllChildren = this.get_all_children(rowTreeRecord);\n rowAndAllChildren.forEach(r => {\n if (visibleRowIDs.has(r.key)) {\n this.selectDeselectRow(r.key, adding);\n }\n });\n if (rowTreeRecord && rowTreeRecord.parent) {\n processedRowsParents.add(rowTreeRecord.parent);\n }\n });\n return processedRowsParents;\n }\n /**\n * populates the rowsToBeSelected and rowsToBeIndeterminate sets\n * with the rows which will be eventually in selected/indeterminate state\n */\n calculateRowsNewSelectionState(args, shouldConvert = false) {\n this.rowsToBeSelected = new Set(args.oldSelection ? shouldConvert ? args.oldSelection.map(r => r[this.grid.primaryKey]) : args.oldSelection : this.getSelectedRows());\n this.rowsToBeIndeterminate = new Set(this.getIndeterminateRows());\n const visibleRowIDs = new Set(this.getRowIDs(this.allData));\n const removed = new Set(args.removed);\n const added = new Set(args.added);\n if (removed && removed.size) {\n let removedRowsParents = new Set();\n removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs, false, shouldConvert);\n Array.from(removedRowsParents).forEach((parent) => {\n this.handleParentSelectionState(parent, visibleRowIDs);\n });\n }\n if (added && added.size) {\n let addedRowsParents = new Set();\n addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs, true, shouldConvert);\n Array.from(addedRowsParents).forEach((parent) => {\n this.handleParentSelectionState(parent, visibleRowIDs);\n });\n }\n }\n /**\n * recursively handle the selection state of the direct and indirect parents\n */\n handleParentSelectionState(treeRow, visibleRowIDs) {\n if (!treeRow) {\n return;\n }\n this.handleRowSelectionState(treeRow, visibleRowIDs);\n if (treeRow.parent) {\n this.handleParentSelectionState(treeRow.parent, visibleRowIDs);\n }\n }\n /**\n * Handle the selection state of a given row based the selection states of its direct children\n */\n handleRowSelectionState(treeRow, visibleRowIDs) {\n let visibleChildren = [];\n if (treeRow && treeRow.children) {\n visibleChildren = treeRow.children.filter(child => visibleRowIDs.has(child.key));\n }\n if (visibleChildren.length) {\n if (visibleChildren.every(row => this.rowsToBeSelected.has(row.key))) {\n this.selectDeselectRow(treeRow.key, true);\n }\n else if (visibleChildren.some(row => this.rowsToBeSelected.has(row.key) || this.rowsToBeIndeterminate.has(row.key))) {\n this.rowsToBeIndeterminate.add(treeRow.key);\n this.rowsToBeSelected.delete(treeRow.key);\n }\n else {\n this.selectDeselectRow(treeRow.key, false);\n }\n }\n else {\n // if the children of the row has been deleted and the row was selected do not change its state\n if (this.isRowSelected(treeRow.key)) {\n this.selectDeselectRow(treeRow.key, true);\n }\n else {\n this.selectDeselectRow(treeRow.key, false);\n }\n }\n }\n get_all_children(record) {\n const children = [];\n if (record && record.children && record.children.length) {\n for (const child of record.children) {\n children.push(...this.get_all_children(child));\n children.push(child);\n }\n }\n return children;\n }\n selectDeselectRow(rowID, select) {\n if (select) {\n this.rowsToBeSelected.add(rowID);\n this.rowsToBeIndeterminate.delete(rowID);\n }\n else {\n this.rowsToBeSelected.delete(rowID);\n this.rowsToBeIndeterminate.delete(rowID);\n }\n }\n}\nIgxTreeGridSelectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridSelectionService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\nIgxTreeGridSelectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridSelectionService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridSelectionService, decorators: [{\n type: Injectable\n }] });\n\nclass IgxTreeGridCellComponent extends IgxGridExpandableCellComponent {\n constructor() {\n super(...arguments);\n /**\n * @hidden\n */\n this.level = 0;\n /**\n * @hidden\n */\n this.showIndicator = false;\n }\n /**\n * Gets the row of the cell.\n * ```typescript\n * let cellRow = this.cell.row;\n * ```\n *\n * @memberof IgxGridCellComponent\n */\n get row() {\n // TODO: Fix types\n return new IgxTreeGridRow(this.grid, this.intRow.index, this.intRow.data);\n }\n /**\n * @hidden\n */\n toggle(event) {\n event.stopPropagation();\n this.grid.gridAPI.set_row_expansion_state(this.intRow.key, !this.intRow.expanded, event);\n }\n /**\n * @hidden\n */\n onLoadingDblClick(event) {\n event.stopPropagation();\n }\n}\nIgxTreeGridCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridCellComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxTreeGridCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTreeGridCellComponent, selector: \"igx-tree-grid-cell\", inputs: { level: \"level\", showIndicator: \"showIndicator\", isLoading: \"isLoading\", row: \"row\" }, providers: [HammerGesturesManager], usesInheritance: true, ngImport: i0, template: \"\\n {{ grid.resourceStrings.igx_grid_pinned_row_indicator }}\\n\\n\\n
    {{\\n formatter\\n ? (value | columnFormatter:formatter:rowData)\\n : column.dataType === \\\"number\\\"\\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\\n : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\\n : column.dataType === 'currency'\\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\\n : column.dataType === 'percent'\\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\\n : value\\n }}
    \\n {{ value ? \\\"check\\\" : \\\"close\\\" }}\\n \\n
    \\n\\n
    {{\\n !isEmptyAddRowCell ? value : (column.header || column.field)\\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 {{ currencyCodeSymbol }}\\n \\n {{ currencyCodeSymbol }}\\n \\n \\n \\n \\n \\n {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} \\n \\n \\n\\n\\n 0\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\\n error\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\\n\\n expand_more\\n\\n\\n chevron_right\\n\\n\\n
    \\n {{grid.resourceStrings.igx_grid_required_validation_error}}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.minlength.requiredLength }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.maxlength.requiredLength }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.min.min }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.max.max }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_email_validation_error }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_pattern_validation_error}}\\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: i5.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i5.NumberValueAccessor, selector: \"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]\" }, { kind: \"directive\", type: i5.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i5.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"component\", type: IgxDatePickerComponent, selector: \"igx-date-picker\", inputs: [\"hideOutsideDays\", \"displayMonthsCount\", \"showWeekNumbers\", \"formatter\", \"headerOrientation\", \"todayButtonLabel\", \"cancelButtonLabel\", \"spinLoop\", \"spinDelta\", \"outlet\", \"id\", \"formatViews\", \"disabledDates\", \"specialDates\", \"calendarFormat\", \"value\", \"minValue\", \"maxValue\", \"resourceStrings\", \"readOnly\"], outputs: [\"valueChange\", \"validationFailed\"] }, { kind: \"component\", type: IgxInputGroupComponent, selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: IgxInputDirective, selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: IgxPrefixDirective, selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"directive\", type: IgxSuffixDirective, selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxFocusDirective, selector: \"[igxFocus]\", inputs: [\"igxFocus\"], exportAs: [\"igxFocus\"] }, { kind: \"directive\", type: IgxTextHighlightDirective, selector: \"[igxTextHighlight]\", inputs: [\"cssClass\", \"activeCssClass\", \"containerClass\", \"groupName\", \"value\", \"row\", \"column\", \"metadata\"] }, { kind: \"directive\", type: IgxTextSelectionDirective, selector: \"[igxTextSelection]\", inputs: [\"igxTextSelection\"], exportAs: [\"igxTextSelection\"] }, { kind: \"component\", type: IgxCheckboxComponent, selector: \"igx-checkbox\", inputs: [\"id\", \"labelId\", \"value\", \"name\", \"tabindex\", \"labelPosition\", \"disableRipple\", \"required\", \"aria-labelledby\", \"aria-label\", \"indeterminate\", \"checked\", \"disabled\", \"invalid\", \"readonly\", \"disableTransitions\"], outputs: [\"change\"] }, { kind: \"component\", type: IgxChipComponent, selector: \"igx-chip\", inputs: [\"id\", \"tabIndex\", \"data\", \"draggable\", \"animateOnRelease\", \"hideBaseOnDrag\", \"removable\", \"removeIcon\", \"selectable\", \"selectIcon\", \"disabled\", \"selected\", \"color\", \"resourceStrings\"], outputs: [\"selectedChange\", \"moveStart\", \"moveEnd\", \"remove\", \"chipClick\", \"selectedChanging\", \"selectedChanged\", \"keyDown\", \"dragEnter\", \"dragLeave\", \"dragOver\", \"dragDrop\"] }, { kind: \"component\", type: IgxCircularProgressBarComponent, selector: \"igx-circular-bar\", inputs: [\"id\", \"isIndeterminate\", \"textVisibility\", \"text\"] }, { kind: \"component\", type: IgxTimePickerComponent, selector: \"igx-time-picker\", inputs: [\"id\", \"displayFormat\", \"inputFormat\", \"mode\", \"minValue\", \"maxValue\", \"spinLoop\", \"formatter\", \"headerOrientation\", \"readOnly\", \"value\", \"resourceStrings\", \"okButtonLabel\", \"cancelButtonLabel\", \"itemsDelta\"], outputs: [\"selected\", \"valueChange\", \"validationFailed\"] }, { kind: \"directive\", type: IgxDateTimeEditorDirective, selector: \"[igxDateTimeEditor]\", inputs: [\"locale\", \"minValue\", \"maxValue\", \"spinLoop\", \"displayFormat\", \"igxDateTimeEditor\", \"value\", \"spinDelta\"], outputs: [\"valueChange\", \"validationFailed\"], exportAs: [\"igxDateTimeEditor\"] }, { kind: \"directive\", type: IgxTooltipDirective, selector: \"[igxTooltip]\", inputs: [\"context\", \"id\"], exportAs: [\"tooltip\"] }, { kind: \"directive\", type: IgxTooltipTargetDirective, selector: \"[igxTooltipTarget]\", inputs: [\"showDelay\", \"hideDelay\", \"tooltipDisabled\", \"igxTooltipTarget\", \"tooltip\"], outputs: [\"tooltipShow\", \"tooltipHide\"], exportAs: [\"tooltipTarget\"] }, { kind: \"directive\", type: i5.FormControlDirective, selector: \"[formControl]\", inputs: [\"formControl\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"], exportAs: [\"ngForm\"] }, { kind: \"directive\", type: i5.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"pipe\", type: IgxGridCellImageAltPipe, name: \"igxCellImageAlt\" }, { kind: \"pipe\", type: IgxStringReplacePipe, name: \"igxStringReplace\" }, { kind: \"pipe\", type: IgxColumnFormatterPipe, name: \"columnFormatter\" }, { kind: \"pipe\", type: i1$1.DecimalPipe, name: \"number\" }, { kind: \"pipe\", type: i1$1.PercentPipe, name: \"percent\" }, { kind: \"pipe\", type: i1$1.CurrencyPipe, name: \"currency\" }, { kind: \"pipe\", type: i1$1.DatePipe, name: \"date\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridCellComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-tree-grid-cell', providers: [HammerGesturesManager], template: \"\\n {{ grid.resourceStrings.igx_grid_pinned_row_indicator }}\\n\\n\\n
    {{\\n formatter\\n ? (value | columnFormatter:formatter:rowData)\\n : column.dataType === \\\"number\\\"\\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\\n : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\\n : column.dataType === 'currency'\\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\\n : column.dataType === 'percent'\\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\\n : value\\n }}
    \\n {{ value ? \\\"check\\\" : \\\"close\\\" }}\\n \\n
    \\n\\n
    {{\\n !isEmptyAddRowCell ? value : (column.header || column.field)\\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 {{ currencyCodeSymbol }}\\n \\n {{ currencyCodeSymbol }}\\n \\n \\n \\n \\n \\n {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} \\n \\n \\n\\n\\n 0\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\\n error\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\\n\\n expand_more\\n\\n\\n chevron_right\\n\\n\\n
    \\n {{grid.resourceStrings.igx_grid_required_validation_error}}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.minlength.requiredLength }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.maxlength.requiredLength }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.min.min }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.max.max }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_email_validation_error }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_pattern_validation_error}}\\n
    \\n
    \\n\" }]\n }], propDecorators: { level: [{\n type: Input\n }], showIndicator: [{\n type: Input\n }], isLoading: [{\n type: Input\n }], row: [{\n type: Input\n }] } });\n\nclass IgxTreeGridRowComponent extends IgxRowDirective {\n /**\n * The `ITreeGridRecord` passed to the row component.\n *\n * ```typescript\n * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n * const treeRow = row.treeRow;\n * ```\n */\n get treeRow() {\n return this._treeRow;\n }\n set treeRow(value) {\n if (this._treeRow !== value) {\n this._treeRow = value;\n this.data = this._treeRow.data;\n }\n }\n /**\n * Sets whether the row is pinned.\n * Default value is `false`.\n * ```typescript\n * this.grid.selectedRows[0].pinned = true;\n * ```\n */\n set pinned(value) {\n if (value) {\n this.grid.pinRow(this.key);\n }\n else {\n this.grid.unpinRow(this.key);\n }\n }\n /**\n * Gets whether the row is pinned.\n * ```typescript\n * let isPinned = row.pinned;\n * ```\n */\n get pinned() {\n return this.grid.isRecordPinned(this._treeRow);\n }\n /**\n * @hidden\n */\n get isRoot() {\n let treeRec = this.treeRow;\n const isPinnedArea = this.pinned && !this.disabled;\n if (isPinnedArea) {\n treeRec = this.grid.unpinnedRecords.find(x => x.data === this.data);\n }\n return (treeRec === null || treeRec === void 0 ? void 0 : treeRec.level) === 0;\n }\n /**\n * @hidden\n */\n get hasChildren() {\n return true;\n }\n /**\n * Returns a value indicating whether the row component is expanded.\n *\n * ```typescript\n * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n * const expanded = row.expanded;\n * ```\n */\n get expanded() {\n return this._treeRow.expanded;\n }\n /**\n * Sets a value indicating whether the row component is expanded.\n *\n * ```typescript\n * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n * row.expanded = true;\n * ```\n */\n set expanded(value) {\n this.grid.gridAPI.set_row_expansion_state(this._treeRow.key, value);\n }\n /**\n * @hidden\n * @internal\n */\n get viewIndex() {\n return this.index + this.grid.page * this.grid.perPage;\n }\n /**\n * @hidden\n */\n get showIndicator() {\n return this.grid.loadChildrenOnDemand ?\n this.grid.expansionStates.has(this.key) ?\n this.treeRow.children && this.treeRow.children.length :\n this.grid.hasChildrenKey ?\n this.data[this.grid.hasChildrenKey] :\n true :\n this.treeRow.children && this.treeRow.children.length;\n }\n /**\n * @hidden\n */\n get indeterminate() {\n return this.selectionService.isRowInIndeterminateState(this.key);\n }\n /**\n * @hidden\n */\n ngDoCheck() {\n this.isLoading = this.grid.loadChildrenOnDemand ? this.grid.loadingRows.has(this.key) : false;\n super.ngDoCheck();\n }\n /**\n * Spawns the add child row UI for the specific row.\n *\n * @example\n * ```typescript\n * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n * row.beginAddChild();\n * ```\n * @param rowID\n */\n beginAddChild() {\n this.grid.crudService.enterAddRowMode(this, true);\n }\n}\nIgxTreeGridRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxTreeGridRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTreeGridRowComponent, selector: \"igx-tree-grid-row\", inputs: { treeRow: \"treeRow\" }, host: { properties: { \"attr.aria-expanded\": \"this.expanded\" } }, providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxTreeGridRowComponent) }], viewQueries: [{ propertyName: \"_cells\", predicate: [\"treeCell\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"\\n\\n\\n
    \\n \\n
    \\n
    \\n\\n\\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n 0 && grid.isPinningToStart\\\">\\n \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n 0 && !grid.isPinningToStart\\\">\\n \\n\\n\\n
    \\n \\n \\n
    \\n
    \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", dependencies: [{ kind: \"component\", type: IgxGridCellComponent, selector: \"igx-grid-cell\", inputs: [\"column\", \"intRow\", \"row\", \"rowData\", \"columnData\", \"cellTemplate\", \"cellValidationErrorTemplate\", \"pinnedIndicator\", \"value\", \"formatter\", \"visibleColumnIndex\", \"cellSelectionMode\", \"lastSearchInfo\", \"lastPinned\", \"firstPinned\", \"editMode\", \"width\", \"active\", \"displayPinnedChip\"] }, { kind: \"directive\", type: IgxRowDragDirective, selector: \"[igxRowDrag]\", inputs: [\"igxRowDrag\"] }, { kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: IgxGridForOfDirective, selector: \"[igxGridFor][igxGridForOf]\", inputs: [\"igxGridForOf\", \"igxGridForOfUniqueSizeCache\", \"igxGridForOfVariableSizes\"], outputs: [\"dataChanging\"] }, { kind: \"component\", type: IgxCheckboxComponent, selector: \"igx-checkbox\", inputs: [\"id\", \"labelId\", \"value\", \"name\", \"tabindex\", \"labelPosition\", \"disableRipple\", \"required\", \"aria-labelledby\", \"aria-label\", \"indeterminate\", \"checked\", \"disabled\", \"invalid\", \"readonly\", \"disableTransitions\"], outputs: [\"change\"] }, { kind: \"component\", type: IgxTreeGridCellComponent, selector: \"igx-tree-grid-cell\", inputs: [\"level\", \"showIndicator\", \"isLoading\", \"row\"] }, { kind: \"pipe\", type: IgxGridNotGroupedPipe, name: \"igxNotGrouped\" }, { kind: \"pipe\", type: IgxGridCellStylesPipe, name: \"igxCellStyles\" }, { kind: \"pipe\", type: IgxGridCellStyleClassesPipe, name: \"igxCellStyleClasses\" }, { kind: \"pipe\", type: IgxGridDataMapperPipe, name: \"dataMapper\" }, { kind: \"pipe\", type: IgxGridTransactionStatePipe, name: \"transactionState\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridRowComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-tree-grid-row', providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxTreeGridRowComponent) }], template: \"\\n\\n\\n
    \\n \\n
    \\n
    \\n\\n\\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n 0 && grid.isPinningToStart\\\">\\n \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n 0 && !grid.isPinningToStart\\\">\\n \\n\\n\\n
    \\n \\n \\n
    \\n
    \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\" }]\n }], propDecorators: { _cells: [{\n type: ViewChildren,\n args: ['treeCell']\n }], treeRow: [{\n type: Input\n }], expanded: [{\n type: HostBinding,\n args: ['attr.aria-expanded']\n }] } });\n\n/**\n * @hidden\n */\nclass IgxTreeGridHierarchizingPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(collection, primaryKey, foreignKey, childDataKey, _) {\n let hierarchicalRecords = [];\n const treeGridRecordsMap = new Map();\n const flatData = [];\n if (!collection || !collection.length) {\n this.grid.flatData = collection;\n this.grid.records = treeGridRecordsMap;\n this.grid.rootRecords = collection;\n return collection;\n }\n if (childDataKey) {\n hierarchicalRecords = this.hierarchizeRecursive(collection, primaryKey, childDataKey, undefined, flatData, 0, treeGridRecordsMap);\n }\n else if (primaryKey) {\n hierarchicalRecords = this.hierarchizeFlatData(collection, primaryKey, foreignKey, treeGridRecordsMap, flatData);\n }\n this.grid.flatData = this.grid.transactions.enabled ?\n flatData.filter(rec => {\n const state = this.grid.transactions.getState(this.getRowID(primaryKey, rec));\n return !state || state.type !== TransactionType.ADD;\n }) : flatData;\n this.grid.records = treeGridRecordsMap;\n this.grid.rootRecords = hierarchicalRecords;\n return hierarchicalRecords;\n }\n getRowID(primaryKey, rowData) {\n return primaryKey ? rowData[primaryKey] : rowData;\n }\n hierarchizeFlatData(collection, primaryKey, foreignKey, map, flatData) {\n const result = [];\n const missingParentRecords = [];\n collection.forEach(row => {\n const record = {\n key: this.getRowID(primaryKey, row),\n data: row,\n children: []\n };\n const parent = map.get(row[foreignKey]);\n if (parent) {\n record.parent = parent;\n parent.children.push(record);\n }\n else {\n missingParentRecords.push(record);\n }\n map.set(row[primaryKey], record);\n });\n missingParentRecords.forEach(record => {\n const parent = map.get(record.data[foreignKey]);\n if (parent) {\n record.parent = parent;\n parent.children.push(record);\n }\n else {\n result.push(record);\n }\n });\n this.setIndentationLevels(result, 0, flatData);\n return result;\n }\n setIndentationLevels(collection, indentationLevel, flatData) {\n for (const record of collection) {\n record.level = indentationLevel;\n record.expanded = this.grid.gridAPI.get_row_expansion_state(record);\n flatData.push(record.data);\n if (record.children && record.children.length > 0) {\n this.setIndentationLevels(record.children, indentationLevel + 1, flatData);\n }\n }\n }\n hierarchizeRecursive(collection, primaryKey, childDataKey, parent, flatData, indentationLevel, map) {\n const result = [];\n for (const item of collection) {\n const record = {\n key: this.getRowID(primaryKey, item),\n data: item,\n parent,\n level: indentationLevel\n };\n record.expanded = this.grid.gridAPI.get_row_expansion_state(record);\n flatData.push(item);\n map.set(record.key, record);\n record.children = item[childDataKey] ?\n this.hierarchizeRecursive(item[childDataKey], primaryKey, childDataKey, record, flatData, indentationLevel + 1, map) :\n undefined;\n result.push(record);\n }\n return result;\n }\n}\nIgxTreeGridHierarchizingPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridHierarchizingPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxTreeGridHierarchizingPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridHierarchizingPipe, name: \"treeGridHierarchizing\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridHierarchizingPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'treeGridHierarchizing' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n/**\n * @hidden\n */\nclass IgxTreeGridFlatteningPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(collection, expandedLevels, expandedStates, _) {\n const data = [];\n this.grid.processedRootRecords = collection;\n this.grid.processedRecords = new Map();\n this.getFlatDataRecursive(collection, data, expandedLevels, expandedStates, true);\n this.grid.processedExpandedFlatData = data.map(r => r.data);\n return data;\n }\n getFlatDataRecursive(collection, data, expandedLevels, expandedStates, parentExpanded) {\n if (!collection || !collection.length) {\n return;\n }\n for (const hierarchicalRecord of collection) {\n if (parentExpanded) {\n data.push(hierarchicalRecord);\n }\n hierarchicalRecord.expanded = this.grid.gridAPI.get_row_expansion_state(hierarchicalRecord);\n this.updateNonProcessedRecordExpansion(this.grid, hierarchicalRecord);\n this.grid.processedRecords.set(hierarchicalRecord.key, hierarchicalRecord);\n this.getFlatDataRecursive(hierarchicalRecord.children, data, expandedLevels, expandedStates, parentExpanded && hierarchicalRecord.expanded);\n }\n }\n updateNonProcessedRecordExpansion(grid, record) {\n const rec = grid.records.get(record.key);\n rec.expanded = record.expanded;\n }\n}\nIgxTreeGridFlatteningPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridFlatteningPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxTreeGridFlatteningPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridFlatteningPipe, name: \"treeGridFlattening\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridFlatteningPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'treeGridFlattening' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n/** @hidden */\nclass IgxTreeGridSortingPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(hierarchicalData, sortExpressions, groupExpressions, sorting, _, pinned) {\n const expressions = groupExpressions ? groupExpressions.concat(sortExpressions) : sortExpressions;\n let result;\n if (!expressions.length) {\n result = hierarchicalData;\n }\n else {\n result = DataUtil.treeGridSort(hierarchicalData, expressions, sorting, null, this.grid);\n }\n const filteredSortedData = [];\n this.flattenTreeGridRecords(result, filteredSortedData);\n this.grid.setFilteredSortedData(filteredSortedData, pinned);\n return result;\n }\n flattenTreeGridRecords(records, flatData) {\n if (records && records.length) {\n for (const record of records) {\n flatData.push(record.data);\n this.flattenTreeGridRecords(record.children, flatData);\n }\n }\n }\n}\nIgxTreeGridSortingPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridSortingPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxTreeGridSortingPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridSortingPipe, name: \"treeGridSorting\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridSortingPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'treeGridSorting' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n/** @hidden */\nclass IgxTreeGridPagingPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(collection, enabled, page = 0, perPage = 15, _) {\n if (!enabled || this.grid.pagingMode !== GridPagingMode.Local) {\n return collection;\n }\n const len = this.grid._totalRecords >= 0 ? this.grid._totalRecords : collection.length;\n const totalPages = Math.ceil(len / perPage);\n const state = {\n index: (totalPages > 0 && page >= totalPages) ? totalPages - 1 : page,\n recordsPerPage: perPage\n };\n const result = DataUtil.page(cloneArray(collection), state, len);\n this.grid.pagingState = state;\n this.grid.page = state.index;\n return result;\n }\n}\nIgxTreeGridPagingPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridPagingPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxTreeGridPagingPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridPagingPipe, name: \"treeGridPaging\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridPagingPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'treeGridPaging' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n/** @hidden */\nclass IgxTreeGridTransactionPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(collection, _) {\n if (this.grid.transactions.enabled) {\n const aggregatedChanges = this.grid.transactions.getAggregatedChanges(true);\n if (aggregatedChanges.length > 0) {\n const primaryKey = this.grid.primaryKey;\n if (!primaryKey) {\n return collection;\n }\n const childDataKey = this.grid.childDataKey;\n if (childDataKey) {\n const hierarchicalDataClone = cloneHierarchicalArray(collection, childDataKey);\n return DataUtil.mergeHierarchicalTransactions(hierarchicalDataClone, aggregatedChanges, childDataKey, this.grid.primaryKey, this.grid.dataCloneStrategy);\n }\n else {\n const flatDataClone = cloneArray(collection);\n return DataUtil.mergeTransactions(flatDataClone, aggregatedChanges, this.grid.primaryKey, this.grid.dataCloneStrategy);\n }\n }\n }\n return collection;\n }\n}\nIgxTreeGridTransactionPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridTransactionPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxTreeGridTransactionPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridTransactionPipe, name: \"treeGridTransaction\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridTransactionPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'treeGridTransaction' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n/**\n * This pipe maps the original record to ITreeGridRecord format used in TreeGrid.\n */\nclass IgxTreeGridNormalizeRecordsPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(_, __) {\n const primaryKey = this.grid.primaryKey;\n // using flattened data because origin data may be hierarchical.\n const flatData = this.grid.flatData;\n const res = flatData.map(rec => ({\n rowID: this.grid.primaryKey ? rec[primaryKey] : rec,\n data: rec,\n level: 0,\n children: []\n }));\n return res;\n }\n}\nIgxTreeGridNormalizeRecordsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridNormalizeRecordsPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxTreeGridNormalizeRecordsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridNormalizeRecordsPipe, name: \"treeGridNormalizeRecord\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridNormalizeRecordsPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'treeGridNormalizeRecord' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\nclass IgxTreeGridAddRowPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(collection, isPinned = false, _pipeTrigger) {\n if (!this.grid.rowEditable || !this.grid.crudService.row || this.grid.crudService.row.getClassName() !== IgxAddRow.name ||\n !this.grid.gridAPI.crudService.addRowParent || isPinned !== this.grid.gridAPI.crudService.addRowParent.isPinned) {\n return collection;\n }\n const copy = collection.slice(0);\n const rec = this.grid.crudService.row.recordRef;\n if (this.grid.crudService.addRowParent.isPinned) {\n const parentRowIndex = copy.findIndex(record => record.rowID === this.grid.crudService.addRowParent.rowID);\n copy.splice(parentRowIndex + 1, 0, rec);\n }\n else {\n copy.splice(this.grid.crudService.row.index, 0, rec);\n }\n this.grid.records.set(rec.key, rec);\n return copy;\n }\n}\nIgxTreeGridAddRowPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridAddRowPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxTreeGridAddRowPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridAddRowPipe, name: \"treeGridAddRow\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridAddRowPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'treeGridAddRow' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n\n/** @hidden */\nclass IgxTreeGridFilteringPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(hierarchyData, expressionsTree, filterStrategy, advancedFilteringExpressionsTree, _, __, pinned) {\n const state = {\n expressionsTree,\n advancedExpressionsTree: advancedFilteringExpressionsTree,\n strategy: new TreeGridFilteringStrategy()\n };\n if (filterStrategy) {\n state.strategy = filterStrategy;\n }\n if (FilteringExpressionsTree.empty(state.expressionsTree) && FilteringExpressionsTree.empty(state.advancedExpressionsTree)) {\n this.grid.setFilteredData(null, pinned);\n return hierarchyData;\n }\n const result = this.filter(hierarchyData, state, this.grid);\n const filteredData = [];\n this.expandAllRecursive(this.grid, result, this.grid.expansionStates, filteredData);\n this.grid.setFilteredData(filteredData, pinned);\n return result;\n }\n expandAllRecursive(grid, data, expandedStates, filteredData) {\n for (const rec of data) {\n filteredData.push(rec.data);\n if (rec.children && rec.children.length > 0) {\n expandedStates.set(rec.key, true);\n this.expandAllRecursive(grid, rec.children, expandedStates, filteredData);\n }\n }\n }\n filter(data, state, grid) {\n return state.strategy.filter(data, state.expressionsTree, state.advancedExpressionsTree, grid);\n }\n}\nIgxTreeGridFilteringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridFilteringPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxTreeGridFilteringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridFilteringPipe, name: \"treeGridFiltering\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridFilteringPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'treeGridFiltering' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n\n/** @hidden */\nclass IgxTreeGridSummaryPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(flatData, hasSummary, summaryCalculationMode, summaryPosition, showSummaryOnCollapse, _, __) {\n if (!flatData || !hasSummary || summaryCalculationMode === GridSummaryCalculationMode.rootLevelOnly) {\n return flatData;\n }\n return this.addSummaryRows(this.grid, flatData, summaryPosition, showSummaryOnCollapse);\n }\n addSummaryRows(grid, collection, summaryPosition, showSummaryOnCollapse) {\n const recordsWithSummary = [];\n const maxSummaryHeight = grid.summaryService.calcMaxSummaryHeight();\n for (const record of collection) {\n recordsWithSummary.push(record);\n const isCollapsed = !record.expanded && record.children && record.children.length > 0 && showSummaryOnCollapse;\n if (isCollapsed) {\n let childData = record.children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n childData = this.removeDeletedRecord(grid, record.key, childData);\n const summaries = grid.summaryService.calculateSummaries(record.key, childData);\n const summaryRecord = {\n summaries,\n max: maxSummaryHeight,\n cellIndentation: record.level + 1\n };\n recordsWithSummary.push(summaryRecord);\n }\n const isExpanded = record.children && record.children.length > 0 && record.expanded;\n if (summaryPosition === GridSummaryPosition.bottom && !isExpanded) {\n let childRecord = record;\n let parent = record.parent;\n while (parent) {\n const children = parent.children;\n if (children[children.length - 1] === childRecord) {\n let childData = children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n childData = this.removeDeletedRecord(grid, parent.key, childData);\n const summaries = grid.summaryService.calculateSummaries(parent.key, childData);\n const summaryRecord = {\n summaries,\n max: maxSummaryHeight,\n cellIndentation: parent.level + 1\n };\n recordsWithSummary.push(summaryRecord);\n childRecord = parent;\n parent = childRecord.parent;\n }\n else {\n break;\n }\n }\n }\n else if (summaryPosition === GridSummaryPosition.top && isExpanded) {\n let childData = record.children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n childData = this.removeDeletedRecord(grid, record.key, childData);\n const summaries = grid.summaryService.calculateSummaries(record.key, childData);\n const summaryRecord = {\n summaries,\n max: maxSummaryHeight,\n cellIndentation: record.level + 1\n };\n recordsWithSummary.push(summaryRecord);\n }\n }\n return recordsWithSummary;\n }\n removeDeletedRecord(grid, rowId, data) {\n if (!grid.transactions.enabled || !grid.cascadeOnDelete) {\n return data;\n }\n const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === 'delete').map(t => t.id);\n let row = grid.records.get(rowId);\n if (!row && deletedRows.lenght === 0) {\n return [];\n }\n row = row.children ? row : row.parent;\n while (row) {\n rowId = row.key;\n if (deletedRows.indexOf(rowId) !== -1) {\n return [];\n }\n row = row.parent;\n }\n deletedRows.forEach(rowID => {\n const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;\n const index = tempData.indexOf(rowID);\n if (index !== -1) {\n data.splice(index, 1);\n }\n });\n return data;\n }\n}\nIgxTreeGridSummaryPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridSummaryPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxTreeGridSummaryPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridSummaryPipe, name: \"treeGridSummary\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridSummaryPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'treeGridSummary' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n\nlet NEXT_ID$6 = 0;\n/**\n * **Ignite UI for Angular Tree Grid** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/grid)\n *\n * The Ignite UI Tree Grid displays and manipulates hierarchical data with consistent schema formatted as a table and\n * provides features such as sorting, filtering, editing, column pinning, paging, column moving and hiding.\n *\n * Example:\n * ```html\n * \n * \n * \n * \n * \n * ```\n */\nclass IgxTreeGridComponent extends IgxGridBaseDirective {\n /**\n * An @Input property that lets you fill the `IgxTreeGridComponent` with an array of data.\n * ```html\n * \n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n get data() {\n return this._data;\n }\n set data(value) {\n this._data = value || [];\n this.summaryService.clearSummaryCache();\n if (!this._init) {\n this.validation.updateAll(this._data);\n }\n if (this.shouldGenerate) {\n this.setupColumns();\n }\n this.cdr.markForCheck();\n }\n /**\n * Get transactions service for the grid.\n *\n * @experimental @hidden\n */\n get transactions() {\n if (this._diTransactions && !this.batchEditing) {\n return this._diTransactions;\n }\n return this._transactions;\n }\n /**\n * An @Input property that sets the count of levels to be expanded in the `IgxTreeGridComponent`. By default it is\n * set to `Infinity` which means all levels would be expanded.\n * ```html\n * \n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n get expansionDepth() {\n return this._expansionDepth;\n }\n set expansionDepth(value) {\n this._expansionDepth = value;\n this.notifyChanges();\n }\n /**\n * An @Input property that provides a template for the row loading indicator when load on demand is enabled.\n * ```html\n * \n * loop\n * \n *\n * \n * \n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n get rowLoadingIndicatorTemplate() {\n return this._rowLoadingIndicatorTemplate;\n }\n set rowLoadingIndicatorTemplate(value) {\n this._rowLoadingIndicatorTemplate = value;\n this.notifyChanges();\n }\n // Kind of stupid\n // private get _gridAPI(): IgxTreeGridAPIService {\n // return this.gridAPI as IgxTreeGridAPIService;\n // }\n constructor(validationService, selectionService, colResizingService, gridAPI, \n // public gridAPI: GridBaseAPIService,\n transactionFactory, _elementRef, _zone, document, cdr, differs, viewRef, appRef, injector, envInjector, navigation, filteringService, overlayService, summaryService, _displayDensityOptions, localeId, platform, _diTransactions) {\n super(validationService, selectionService, colResizingService, gridAPI, transactionFactory, _elementRef, _zone, document, cdr, differs, viewRef, appRef, injector, envInjector, navigation, filteringService, overlayService, summaryService, _displayDensityOptions, localeId, platform, _diTransactions);\n this._diTransactions = _diTransactions;\n /**\n * An @Input property indicating whether child records should be deleted when their parent gets deleted.\n * By default it is set to true and deletes all children along with the parent.\n * ```html\n * \n * \n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n this.cascadeOnDelete = true;\n /**\n * @hidden @internal\n */\n this.role = 'treegrid';\n /**\n * An @Input property that sets the value of the `id` attribute. If not provided it will be automatically generated.\n * ```html\n * \n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n this.id = `igx-tree-grid-${NEXT_ID$6++}`;\n /**\n * Returns a map of all `ITreeGridRecord`s.\n * ```typescript\n * // gets the record with primaryKey=2\n * const states = this.grid.records.get(2);\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n this.records = new Map();\n /**\n * Returns a map of all processed (filtered and sorted) `ITreeGridRecord`s.\n * ```typescript\n * // gets the processed record with primaryKey=2\n * const states = this.grid.processedRecords.get(2);\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n this.processedRecords = new Map();\n /**\n * @hidden\n */\n this.loadingRows = new Set();\n this._filterStrategy = new TreeGridFilteringStrategy();\n this._expansionDepth = Infinity;\n }\n /**\n * @deprecated in version 12.1.0. Use `getCellByColumn` or `getCellByKey` instead\n *\n * Returns a `CellType` object that matches the conditions.\n *\n * @example\n * ```typescript\n * const myCell = this.grid1.getCellByColumnVisibleIndex(2,\"UnitPrice\");\n * ```\n * @param rowIndex\n * @param index\n */\n getCellByColumnVisibleIndex(rowIndex, index) {\n const row = this.getRowByIndex(rowIndex);\n const column = this.columns.find((col) => col.visibleIndex === index);\n if (row && row instanceof IgxTreeGridRow && column) {\n return new IgxGridCell(this, rowIndex, column.field);\n }\n }\n /**\n * @hidden\n */\n ngOnInit() {\n super.ngOnInit();\n this.rowToggle.pipe(takeUntil(this.destroy$)).subscribe((args) => {\n this.loadChildrenOnRowExpansion(args);\n });\n // TODO: cascade selection logic should be refactor to be handled in the already existing subs\n this.rowAddedNotifier.pipe(takeUntil(this.destroy$)).subscribe(args => {\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n let rec = this.gridAPI.get_rec_by_id(this.primaryKey ? args.data[this.primaryKey] : args.data);\n if (rec && rec.parent) {\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(new Set([rec.parent]), rec.parent.key);\n }\n else {\n // The record is still not available\n // Wait for the change detection to update records through pipes\n requestAnimationFrame(() => {\n rec = this.gridAPI.get_rec_by_id(this.primaryKey ?\n args.data[this.primaryKey] : args.data);\n if (rec && rec.parent) {\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(new Set([rec.parent]), rec.parent.key);\n }\n this.notifyChanges();\n });\n }\n }\n });\n this.rowDeletedNotifier.pipe(takeUntil(this.destroy$)).subscribe(args => {\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n if (args.data) {\n const rec = this.gridAPI.get_rec_by_id(this.primaryKey ? args.data[this.primaryKey] : args.data);\n this.handleCascadeSelection(args, rec);\n }\n else {\n // if a row has been added and before commiting the transaction deleted\n const leafRowsDirectParents = new Set();\n this.records.forEach(record => {\n if (record && (!record.children || record.children.length === 0) && record.parent) {\n leafRowsDirectParents.add(record.parent);\n }\n });\n // Wait for the change detection to update records through pipes\n requestAnimationFrame(() => {\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(leafRowsDirectParents);\n this.notifyChanges();\n });\n }\n }\n });\n this.filteringDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n const leafRowsDirectParents = new Set();\n this.records.forEach(record => {\n if (record && (!record.children || record.children.length === 0) && record.parent) {\n leafRowsDirectParents.add(record.parent);\n }\n });\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(leafRowsDirectParents);\n this.notifyChanges();\n }\n });\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n super.ngAfterViewInit();\n // TODO: pipesExectured event\n // run after change detection in super triggers pipes for records structure\n if (this.rowSelection === GridSelectionMode.multipleCascade && this.selectedRows.length) {\n const selRows = this.selectedRows;\n this.selectionService.clearRowSelection();\n this.selectRows(selRows, true);\n this.cdr.detectChanges();\n }\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n if (this.rowLoadingTemplate) {\n this._rowLoadingIndicatorTemplate = this.rowLoadingTemplate.template;\n }\n super.ngAfterContentInit();\n }\n getDefaultExpandState(record) {\n return record.children && record.children.length && record.level < this.expansionDepth;\n }\n /**\n * Expands all rows.\n * ```typescript\n * this.grid.expandAll();\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n expandAll() {\n this._expansionDepth = Infinity;\n this.expansionStates = new Map();\n }\n /**\n * Collapses all rows.\n *\n * ```typescript\n * this.grid.collapseAll();\n * ```\n *\n * @memberof IgxTreeGridComponent\n */\n collapseAll() {\n this._expansionDepth = 0;\n this.expansionStates = new Map();\n }\n /**\n * @hidden\n */\n refreshGridState(args) {\n super.refreshGridState();\n if (this.primaryKey && this.foreignKey && args) {\n const rowID = args.data[this.foreignKey];\n this.summaryService.clearSummaryCache({ rowID });\n this.pipeTrigger++;\n this.cdr.detectChanges();\n }\n }\n /**\n * Creates a new `IgxTreeGridRowComponent` with the given data. If a parentRowID is not specified, the newly created\n * row would be added at the root level. Otherwise, it would be added as a child of the row whose primaryKey matches\n * the specified parentRowID. If the parentRowID does not exist, an error would be thrown.\n * ```typescript\n * const record = {\n * ID: this.grid.data[this.grid1.data.length - 1].ID + 1,\n * Name: this.newRecord\n * };\n * this.grid.addRow(record, 1); // Adds a new child row to the row with ID=1.\n * ```\n *\n * @param data\n * @param parentRowID\n * @memberof IgxTreeGridComponent\n */\n // TODO: remove evt emission\n addRow(data, parentRowID) {\n this.crudService.endEdit(true);\n this.gridAPI.addRowToData(data, parentRowID);\n this.rowAddedNotifier.next({ data: data, owner: this, primaryKey: data[this.primaryKey] });\n this.pipeTrigger++;\n this.notifyChanges();\n }\n /**\n * Enters add mode by spawning the UI with the context of the specified row by index.\n *\n * @remarks\n * Accepted values for index are integers from 0 to this.grid.dataView.length\n * @remarks\n * When adding the row as a child, the parent row is the specified row.\n * @remarks\n * To spawn the UI on top, call the function with index = null or a negative number.\n * In this case trying to add this row as a child will result in error.\n * @example\n * ```typescript\n * this.grid.beginAddRowByIndex(10);\n * this.grid.beginAddRowByIndex(10, true);\n * this.grid.beginAddRowByIndex(null);\n * ```\n * @param index - The index to spawn the UI at. Accepts integers from 0 to this.grid.dataView.length\n * @param asChild - Whether the record should be added as a child. Only applicable to igxTreeGrid.\n */\n beginAddRowByIndex(index, asChild) {\n if (index === null || index < 0) {\n return this.beginAddRowById(null, asChild);\n }\n return this._addRowForIndex(index - 1, asChild);\n }\n /**\n * @hidden\n */\n getContext(rowData, rowIndex, pinned) {\n return {\n $implicit: this.isGhostRecord(rowData) ? rowData.recordRef : rowData,\n index: this.getDataViewIndex(rowIndex, pinned),\n templateID: {\n type: this.isSummaryRow(rowData) ? 'summaryRow' : 'dataRow',\n id: null\n },\n disabled: this.isGhostRecord(rowData) ? rowData.recordRef.isFilteredOutParent === undefined : false\n };\n }\n /**\n * @hidden\n * @internal\n */\n getInitialPinnedIndex(rec) {\n const id = this.gridAPI.get_row_id(rec);\n return this._pinnedRecordIDs.indexOf(id);\n }\n /**\n * @hidden\n * @internal\n */\n isRecordPinned(rec) {\n return this.getInitialPinnedIndex(rec.data) !== -1;\n }\n /**\n *\n * Returns an array of the current cell selection in the form of `[{ column.field: cell.value }, ...]`.\n *\n * @remarks\n * If `formatters` is enabled, the cell value will be formatted by its respective column formatter (if any).\n * If `headers` is enabled, it will use the column header (if any) instead of the column field.\n */\n getSelectedData(formatters = false, headers = false) {\n let source = [];\n const process = (record) => {\n if (record.summaries) {\n source.push(null);\n return;\n }\n source.push(record.data);\n };\n this.unpinnedDataView.forEach(process);\n source = this.isRowPinningToTop ? [...this.pinnedDataView, ...source] : [...source, ...this.pinnedDataView];\n return this.extractDataFromSelection(source, formatters, headers);\n }\n /**\n * @hidden @internal\n */\n getEmptyRecordObjectFor(inTreeRow) {\n const treeRowRec = (inTreeRow === null || inTreeRow === void 0 ? void 0 : inTreeRow.treeRow) || null;\n const row = Object.assign({}, treeRowRec);\n const data = (treeRowRec === null || treeRowRec === void 0 ? void 0 : treeRowRec.data) || {};\n row.data = Object.assign({}, data);\n Object.keys(row.data).forEach(key => {\n var _a;\n // persist foreign key if one is set.\n if (this.foreignKey && key === this.foreignKey) {\n row.data[key] = treeRowRec.data[((_a = this.crudService.addRowParent) === null || _a === void 0 ? void 0 : _a.asChild) ? this.primaryKey : key];\n }\n else {\n row.data[key] = undefined;\n }\n });\n let id = this.generateRowID();\n const rootRecPK = this.foreignKey && this.rootRecords && this.rootRecords.length > 0 ?\n this.rootRecords[0].data[this.foreignKey] : null;\n if (id === rootRecPK) {\n // safeguard in case generated id matches the root foreign key.\n id = this.generateRowID();\n }\n row.key = id;\n row.data[this.primaryKey] = id;\n return { rowID: id, data: row.data, recordRef: row };\n }\n /** @hidden */\n deleteRowById(rowId) {\n // if this is flat self-referencing data, and CascadeOnDelete is set to true\n // and if we have transactions we should start pending transaction. This allows\n // us in case of delete action to delete all child rows as single undo action\n const args = {\n rowID: rowId,\n primaryKey: rowId,\n cancel: false,\n rowData: this.getRowData(rowId),\n oldValue: null,\n owner: this\n };\n this.rowDelete.emit(args);\n if (args.cancel) {\n return;\n }\n const record = this.gridAPI.deleteRowById(rowId);\n if (record !== null && record !== undefined) {\n const rowDeletedEventArgs = { data: record, owner: this, primaryKey: record[this.primaryKey] };\n this.rowDeleted.emit(rowDeletedEventArgs);\n }\n return record;\n }\n /**\n * Returns the `IgxTreeGridRow` by index.\n *\n * @example\n * ```typescript\n * const myRow = treeGrid.getRowByIndex(1);\n * ```\n * @param index\n */\n getRowByIndex(index) {\n if (index < 0 || index >= this.dataView.length) {\n return undefined;\n }\n return this.createRow(index);\n }\n /**\n * Returns the `RowType` object by the specified primary key.\n *\n * @example\n * ```typescript\n * const myRow = this.treeGrid.getRowByIndex(1);\n * ```\n * @param index\n */\n getRowByKey(key) {\n const rec = this.filteredSortedData ? this.primaryKey ? this.filteredSortedData.find(r => r[this.primaryKey] === key) :\n this.filteredSortedData.find(r => r === key) : undefined;\n const index = this.dataView.findIndex(r => r.data && r.data === rec);\n if (index < 0 || index >= this.filteredSortedData.length) {\n return undefined;\n }\n return new IgxTreeGridRow(this, index, rec);\n }\n /**\n * Returns the collection of all RowType for current page.\n *\n * @hidden @internal\n */\n allRows() {\n return this.dataView.map((rec, index) => this.createRow(index));\n }\n /**\n * Returns the collection of `IgxTreeGridRow`s for current page.\n *\n * @hidden @internal\n */\n dataRows() {\n return this.allRows().filter(row => row instanceof IgxTreeGridRow);\n }\n /**\n * Returns an array of the selected `IgxGridCell`s.\n *\n * @example\n * ```typescript\n * const selectedCells = this.grid.selectedCells;\n * ```\n */\n get selectedCells() {\n return this.dataRows().map((row) => row.cells.filter((cell) => cell.selected))\n .reduce((a, b) => a.concat(b), []);\n }\n /**\n * Returns a `CellType` object that matches the conditions.\n *\n * @example\n * ```typescript\n * const myCell = this.grid1.getCellByColumn(2, \"UnitPrice\");\n * ```\n * @param rowIndex\n * @param columnField\n */\n getCellByColumn(rowIndex, columnField) {\n const row = this.getRowByIndex(rowIndex);\n const column = this.columns.find((col) => col.field === columnField);\n if (row && row instanceof IgxTreeGridRow && column) {\n return new IgxGridCell(this, rowIndex, columnField);\n }\n }\n /**\n * Returns a `CellType` object that matches the conditions.\n *\n * @remarks\n * Requires that the primaryKey property is set.\n * @example\n * ```typescript\n * grid.getCellByKey(1, 'index');\n * ```\n * @param rowSelector match any rowID\n * @param columnField\n */\n getCellByKey(rowSelector, columnField) {\n const row = this.getRowByKey(rowSelector);\n const column = this.columns.find((col) => col.field === columnField);\n if (row && column) {\n return new IgxGridCell(this, row.index, columnField);\n }\n }\n pinRow(rowID, index) {\n const row = this.getRowByKey(rowID);\n return super.pinRow(rowID, index, row);\n }\n unpinRow(rowID) {\n const row = this.getRowByKey(rowID);\n return super.unpinRow(rowID, row);\n }\n /** @hidden */\n generateRowPath(rowId) {\n const path = [];\n let record = this.records.get(rowId);\n while (record.parent) {\n path.push(record.parent.key);\n record = record.parent;\n }\n return path.reverse();\n }\n /** @hidden */\n isTreeRow(record) {\n return record.key !== undefined && record.data;\n }\n /** @hidden */\n getUnpinnedIndexById(id) {\n return this.unpinnedRecords.findIndex(x => x.data[this.primaryKey] === id);\n }\n /**\n * @hidden\n */\n createRow(index, data) {\n let row;\n const dataIndex = this._getDataViewIndex(index);\n const rec = data !== null && data !== void 0 ? data : this.dataView[dataIndex];\n if (this.isSummaryRow(rec)) {\n row = new IgxSummaryRow(this, index, rec.summaries, GridInstanceType.TreeGrid);\n }\n if (!row && rec) {\n const isTreeRow = this.isTreeRow(rec);\n const dataRec = isTreeRow ? rec.data : rec;\n const treeRow = isTreeRow ? rec : undefined;\n row = new IgxTreeGridRow(this, index, dataRec, treeRow);\n }\n return row;\n }\n /**\n * Returns if the `IgxTreeGridComponent` has groupable columns.\n *\n * @example\n * ```typescript\n * const groupableGrid = this.grid.hasGroupableColumns;\n * ```\n */\n get hasGroupableColumns() {\n return this.columns.some((col) => col.groupable && !col.columnGroup);\n }\n generateDataFields(data) {\n return super.generateDataFields(data).filter(field => field !== this.childDataKey);\n }\n transactionStatusUpdate(event) {\n let actions = [];\n if (event.origin === TransactionEventOrigin.REDO) {\n actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.DELETE) : [];\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n this.handleCascadeSelection(event);\n }\n }\n else if (event.origin === TransactionEventOrigin.UNDO) {\n actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.ADD) : [];\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n if (event.actions[0].transaction.type === 'add') {\n const rec = this.gridAPI.get_rec_by_id(event.actions[0].transaction.id);\n this.handleCascadeSelection(event, rec);\n }\n else {\n this.handleCascadeSelection(event);\n }\n }\n }\n if (actions.length) {\n for (const action of actions) {\n this.deselectChildren(action.transaction.id);\n }\n }\n super.transactionStatusUpdate(event);\n }\n ;\n findRecordIndexInView(rec) {\n return this.dataView.findIndex(x => x.data[this.primaryKey] === rec[this.primaryKey]);\n }\n /**\n * @hidden @internal\n */\n getDataBasedBodyHeight() {\n return !this.flatData || (this.flatData.length < this._defaultTargetRecordNumber) ?\n 0 : this.defaultTargetBodyHeight;\n }\n /**\n * @hidden\n */\n scrollTo(row, column) {\n let delayScrolling = false;\n let record;\n if (typeof (row) !== 'number') {\n const rowData = row;\n const rowID = this.gridAPI.get_row_id(rowData);\n record = this.processedRecords.get(rowID);\n this.gridAPI.expand_path_to_record(record);\n if (this.paginator) {\n const rowIndex = this.processedExpandedFlatData.indexOf(rowData);\n const page = Math.floor(rowIndex / this.perPage);\n if (this.page !== page) {\n delayScrolling = true;\n this.page = page;\n }\n }\n }\n if (delayScrolling) {\n this.verticalScrollContainer.dataChanged.pipe(first$1()).subscribe(() => {\n this.scrollDirective(this.verticalScrollContainer, typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(record));\n });\n }\n else {\n this.scrollDirective(this.verticalScrollContainer, typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(record));\n }\n this.scrollToHorizontally(column);\n }\n writeToData(rowIndex, value) {\n mergeObjects(this.flatData[rowIndex], value);\n }\n /**\n * @hidden\n */\n initColumns(collection, cb = null) {\n if (this.hasColumnLayouts) {\n // invalid configuration - tree grid should not allow column layouts\n // remove column layouts\n const nonColumnLayoutColumns = this.columns.filter((col) => !col.columnLayout && !col.columnLayoutChild);\n this.updateColumns(nonColumnLayoutColumns);\n }\n super.initColumns(collection, cb);\n }\n /**\n * @hidden @internal\n */\n getGroupAreaHeight() {\n return this.treeGroupArea ? this.getComputedHeight(this.treeGroupArea.nativeElement) : 0;\n }\n /**\n * @description A recursive way to deselect all selected children of a given record\n * @param recordID ID of the record whose children to deselect\n * @hidden\n * @internal\n */\n deselectChildren(recordID) {\n const selectedChildren = [];\n // G.E. Apr 28, 2021 #9465 Records which are not in view can also be selected so we need to\n // deselect them as well, hence using 'records' map instead of getRowByKey() method which will\n // return only row components (i.e. records in view).\n const rowToDeselect = this.records.get(recordID);\n this.selectionService.deselectRowsWithNoEvent([recordID]);\n this.gridAPI.get_selected_children(rowToDeselect, selectedChildren);\n if (selectedChildren.length > 0) {\n selectedChildren.forEach(x => this.deselectChildren(x));\n }\n }\n addChildRows(children, parentID) {\n if (this.primaryKey && this.foreignKey) {\n for (const child of children) {\n child[this.foreignKey] = parentID;\n }\n this.data.push(...children);\n }\n else if (this.childDataKey) {\n let parent = this.records.get(parentID);\n let parentData = parent.data;\n if (this.transactions.enabled && this.transactions.getAggregatedChanges(true).length) {\n const path = [];\n while (parent) {\n path.push(parent.key);\n parent = parent.parent;\n }\n let collection = this.data;\n let record;\n for (let i = path.length - 1; i >= 0; i--) {\n const pid = path[i];\n record = collection.find(r => r[this.primaryKey] === pid);\n if (!record) {\n break;\n }\n collection = record[this.childDataKey];\n }\n if (record) {\n parentData = record;\n }\n }\n parentData[this.childDataKey] = children;\n }\n this.selectionService.clearHeaderCBState();\n this.pipeTrigger++;\n if (this.rowSelection === GridSelectionMode.multipleCascade) {\n // Force pipe triggering for building the data structure\n this.cdr.detectChanges();\n if (this.selectionService.isRowSelected(parentID)) {\n this.selectionService.rowSelection.delete(parentID);\n this.selectionService.selectRowsWithNoEvent([parentID]);\n }\n }\n }\n loadChildrenOnRowExpansion(args) {\n if (this.loadChildrenOnDemand) {\n const parentID = args.rowID;\n if (args.expanded && !this._expansionStates.has(parentID)) {\n this.loadingRows.add(parentID);\n this.loadChildrenOnDemand(parentID, children => {\n this.loadingRows.delete(parentID);\n this.addChildRows(children, parentID);\n this.notifyChanges();\n });\n }\n }\n }\n handleCascadeSelection(event, rec = null) {\n // Wait for the change detection to update records through the pipes\n requestAnimationFrame(() => {\n if (rec === null) {\n rec = this.gridAPI.get_rec_by_id(event.actions[0].transaction.id);\n }\n if (rec && rec.parent) {\n this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(new Set([rec.parent]), rec.parent.key);\n this.notifyChanges();\n }\n });\n }\n}\nIgxTreeGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridComponent, deps: [{ token: IgxGridValidationService }, { token: IgxGridSelectionService }, { token: IgxColumnResizingService }, { token: IGX_GRID_SERVICE_BASE }, { token: IgxHierarchicalTransactionFactory }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i0.IterableDiffers }, { token: i0.ViewContainerRef }, { token: i0.ApplicationRef }, { token: i0.Injector }, { token: i0.EnvironmentInjector }, { token: IgxGridNavigationService }, { token: IgxFilteringService }, { token: IgxOverlayService }, { token: IgxGridSummaryService }, { token: DisplayDensityToken, optional: true }, { token: LOCALE_ID }, { token: PlatformUtil }, { token: IgxGridTransaction, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxTreeGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTreeGridComponent, selector: \"igx-tree-grid\", inputs: { childDataKey: \"childDataKey\", foreignKey: \"foreignKey\", hasChildrenKey: \"hasChildrenKey\", cascadeOnDelete: \"cascadeOnDelete\", loadChildrenOnDemand: \"loadChildrenOnDemand\", id: \"id\", data: \"data\", expansionDepth: \"expansionDepth\", rowLoadingIndicatorTemplate: \"rowLoadingIndicatorTemplate\" }, host: { properties: { \"attr.role\": \"this.role\", \"attr.id\": \"this.id\" } }, providers: [\n IgxGridCRUDService,\n IgxGridValidationService,\n IgxGridSummaryService,\n IgxGridNavigationService,\n { provide: IgxGridSelectionService, useClass: IgxTreeGridSelectionService },\n { provide: IGX_GRID_SERVICE_BASE, useClass: IgxTreeGridAPIService },\n { provide: IGX_GRID_BASE, useExisting: IgxTreeGridComponent },\n IgxFilteringService,\n IgxColumnResizingService,\n IgxForOfSyncService,\n IgxForOfScrollSyncService\n ], queries: [{ propertyName: \"treeGroupArea\", first: true, predicate: IgxTreeGridGroupByAreaComponent, descendants: true, read: IgxTreeGridGroupByAreaComponent }, { propertyName: \"rowLoadingTemplate\", first: true, predicate: IgxRowLoadingIndicatorTemplateDirective, descendants: true, read: IgxRowLoadingIndicatorTemplateDirective }], viewQueries: [{ propertyName: \"recordTemplate\", first: true, predicate: [\"record_template\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"summaryTemplate\", first: true, predicate: [\"summary_template\"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: \"\\n\\n\\n\\n\\n
    \\n
    \\n \\n 0\\\"\\n [igxColumnMovingDrop]=\\\"headerContainer\\\" [attr.droppable]=\\\"true\\\" id=\\\"left\\\"\\n class=\\\"igx-grid__scroll-on-drag-pinned\\\" [style.left.px]=\\\"pinnedWidth\\\">\\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 {{resourceStrings.igx_grid_snackbar_addrow_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 {{emptyFilteredGridMessage}}\\n \\n \\n \\n \\n\\n\\n\\n \\n {{emptyGridMessage}}\\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 You have {{ rowChangesCount }} changes in this row and {{ hiddenColumnsCount }} hidden columns\\n\\n\\n\\n \\n \\n\\n\\n\\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n\\n drag_indicator\\n\\n\\n\\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: IgxRowEditTabStopDirective, selector: \"[igxRowEditTabStop]\" }, { kind: \"directive\", type: IgxGridBodyDirective, selector: \"[igxGridBody]\" }, { kind: \"component\", type: IgxGridHeaderRowComponent, selector: \"igx-grid-header-row\", inputs: [\"grid\", \"pinnedColumnCollection\", \"unpinnedColumnCollection\", \"activeDescendant\", \"hasMRL\", \"width\", \"density\"] }, { kind: \"component\", type: IgxGridColumnResizerComponent, selector: \"igx-grid-column-resizer\", inputs: [\"restrictResizerTop\"] }, { kind: \"directive\", type: IgxColumnMovingDropDirective, selector: \"[igxColumnMovingDrop]\", inputs: [\"igxColumnMovingDrop\"] }, { kind: \"directive\", type: IgxGridDragSelectDirective, selector: \"[igxGridDragSelect]\", inputs: [\"igxGridDragSelect\"], outputs: [\"dragStop\", \"dragScroll\"] }, { kind: \"component\", type: IgxSummaryRowComponent, selector: \"igx-grid-summary-row\", inputs: [\"summaries\", \"gridID\", \"index\", \"firstCellIndentation\"] }, { kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }, { kind: \"directive\", type: IgxToggleDirective, selector: \"[igxToggle]\", inputs: [\"id\"], outputs: [\"opened\", \"opening\", \"closed\", \"closing\", \"appended\"], exportAs: [\"toggle\"] }, { kind: \"directive\", type: IgxOverlayOutletDirective, selector: \"[igxOverlayOutlet]\", exportAs: [\"overlay-outlet\"] }, { kind: \"directive\", type: IgxGridForOfDirective, selector: \"[igxGridFor][igxGridForOf]\", inputs: [\"igxGridForOf\", \"igxGridForOfUniqueSizeCache\", \"igxGridForOfVariableSizes\"], outputs: [\"dataChanging\"] }, { kind: \"directive\", type: IgxTemplateOutletDirective, selector: \"[igxTemplateOutlet]\", inputs: [\"igxTemplateOutletContext\", \"igxTemplateOutlet\"], outputs: [\"viewCreated\", \"viewMoved\", \"cachedViewLoaded\", \"beforeViewDetach\"] }, { kind: \"component\", type: IgxCircularProgressBarComponent, selector: \"igx-circular-bar\", inputs: [\"id\", \"isIndeterminate\", \"textVisibility\", \"text\"] }, { kind: \"component\", type: IgxSnackbarComponent, selector: \"igx-snackbar\", inputs: [\"id\", \"actionText\", \"positionSettings\"], outputs: [\"clicked\", \"animationStarted\", \"animationDone\"] }, { kind: \"component\", type: IgxTreeGridRowComponent, selector: \"igx-tree-grid-row\", inputs: [\"treeRow\"] }, { kind: \"pipe\", type: IgxHasVisibleColumnsPipe, name: \"visibleColumns\" }, { kind: \"pipe\", type: IgxGridRowPinningPipe, name: \"gridRowPinning\" }, { kind: \"pipe\", type: IgxGridRowClassesPipe, name: \"igxGridRowClasses\" }, { kind: \"pipe\", type: IgxGridRowStylesPipe, name: \"igxGridRowStyles\" }, { kind: \"pipe\", type: IgxSummaryDataPipe, name: \"igxGridSummaryDataPipe\" }, { kind: \"pipe\", type: IgxTreeGridHierarchizingPipe, name: \"treeGridHierarchizing\" }, { kind: \"pipe\", type: IgxTreeGridFlatteningPipe, name: \"treeGridFlattening\" }, { kind: \"pipe\", type: IgxTreeGridSortingPipe, name: \"treeGridSorting\" }, { kind: \"pipe\", type: IgxTreeGridFilteringPipe, name: \"treeGridFiltering\" }, { kind: \"pipe\", type: IgxTreeGridPagingPipe, name: \"treeGridPaging\" }, { kind: \"pipe\", type: IgxTreeGridTransactionPipe, name: \"treeGridTransaction\" }, { kind: \"pipe\", type: IgxTreeGridSummaryPipe, name: \"treeGridSummary\" }, { kind: \"pipe\", type: IgxTreeGridNormalizeRecordsPipe, name: \"treeGridNormalizeRecord\" }, { kind: \"pipe\", type: IgxTreeGridAddRowPipe, name: \"treeGridAddRow\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-tree-grid', providers: [\n IgxGridCRUDService,\n IgxGridValidationService,\n IgxGridSummaryService,\n IgxGridNavigationService,\n { provide: IgxGridSelectionService, useClass: IgxTreeGridSelectionService },\n { provide: IGX_GRID_SERVICE_BASE, useClass: IgxTreeGridAPIService },\n { provide: IGX_GRID_BASE, useExisting: IgxTreeGridComponent },\n IgxFilteringService,\n IgxColumnResizingService,\n IgxForOfSyncService,\n IgxForOfScrollSyncService\n ], template: \"\\n\\n\\n\\n\\n
    \\n
    \\n \\n 0\\\"\\n [igxColumnMovingDrop]=\\\"headerContainer\\\" [attr.droppable]=\\\"true\\\" id=\\\"left\\\"\\n class=\\\"igx-grid__scroll-on-drag-pinned\\\" [style.left.px]=\\\"pinnedWidth\\\">\\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 {{resourceStrings.igx_grid_snackbar_addrow_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 {{emptyFilteredGridMessage}}\\n \\n \\n \\n \\n\\n\\n\\n \\n {{emptyGridMessage}}\\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 You have {{ rowChangesCount }} changes in this row and {{ hiddenColumnsCount }} hidden columns\\n\\n\\n\\n \\n \\n\\n\\n\\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n\\n drag_indicator\\n\\n\\n\\n
    \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: IgxGridValidationService }, { type: IgxGridSelectionService }, { type: IgxColumnResizingService }, { type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_SERVICE_BASE]\n }] }, { type: IgxHierarchicalTransactionFactory }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: i0.ViewContainerRef }, { type: i0.ApplicationRef }, { type: i0.Injector }, { type: i0.EnvironmentInjector }, { type: IgxGridNavigationService }, { type: IgxFilteringService }, { type: IgxOverlayService, decorators: [{\n type: Inject,\n args: [IgxOverlayService]\n }] }, { type: IgxGridSummaryService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: PlatformUtil }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IgxGridTransaction]\n }] }];\n }, propDecorators: { childDataKey: [{\n type: Input\n }], foreignKey: [{\n type: Input\n }], hasChildrenKey: [{\n type: Input\n }], cascadeOnDelete: [{\n type: Input\n }], loadChildrenOnDemand: [{\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], treeGroupArea: [{\n type: ContentChild,\n args: [IgxTreeGridGroupByAreaComponent, { read: IgxTreeGridGroupByAreaComponent }]\n }], recordTemplate: [{\n type: ViewChild,\n args: ['record_template', { read: TemplateRef, static: true }]\n }], summaryTemplate: [{\n type: ViewChild,\n args: ['summary_template', { read: TemplateRef, static: true }]\n }], rowLoadingTemplate: [{\n type: ContentChild,\n args: [IgxRowLoadingIndicatorTemplateDirective, { read: IgxRowLoadingIndicatorTemplateDirective }]\n }], data: [{\n type: Input\n }], expansionDepth: [{\n type: Input\n }], rowLoadingIndicatorTemplate: [{\n type: Input\n }] } });\n\nconst HIDDEN_FIELD_NAME = '_Igx_Hidden_Data_';\n/**\n * @hidden\n * @internal\n */\nclass GroupByRecord {\n}\nclass ITreeGridAggregation {\n}\nclass IgxGroupedTreeGridSorting extends IgxSorting {\n static instance() {\n return this._instance || (this._instance = new IgxGroupedTreeGridSorting());\n }\n getFieldValue(obj, key, isDate = false, isTime = false) {\n const data = obj.data[HIDDEN_FIELD_NAME] ?\n obj.data.hasOwnProperty(key) ?\n obj.data :\n obj.data[HIDDEN_FIELD_NAME] :\n obj.data;\n return super.getFieldValue(data, key, isDate, isTime);\n }\n}\nIgxGroupedTreeGridSorting._instance = null;\n/** @hidden */\nclass IgxTreeGridGroupingPipe {\n transform(collection, groupingExpressions, groupKey, childDataKey, grid, aggregations) {\n if (groupingExpressions.length === 0) {\n return collection;\n }\n if ((groupKey === null || groupKey === void 0 ? void 0 : groupKey.toLowerCase()) === (childDataKey === null || childDataKey === void 0 ? void 0 : childDataKey.toLowerCase())) {\n throw new Error('Group key and child data key cannot be the same.');\n }\n this.grid = grid;\n const result = [];\n const groupedRecords = this.groupByMultiple(collection, groupingExpressions);\n this.flattenGrouping(groupedRecords, groupKey, childDataKey, result, aggregations);\n return result;\n }\n flattenGrouping(groupRecords, groupKey, childDataKey, data, aggregations = []) {\n for (const groupRecord of groupRecords) {\n const parent = {};\n const children = groupRecord.records;\n parent[childDataKey] = [];\n for (const aggregation of aggregations) {\n parent[aggregation.field] = aggregation.aggregate(parent, children);\n }\n parent[groupKey] = groupRecord.value + ` (${groupRecord.records.length})`;\n parent[HIDDEN_FIELD_NAME] = { [groupRecord.key]: groupRecord.value };\n data.push(parent);\n if (groupRecord.groups) {\n this.flattenGrouping(groupRecord.groups, groupKey, childDataKey, parent[childDataKey], aggregations);\n }\n else {\n parent[childDataKey] = children;\n }\n }\n }\n groupByMultiple(array, groupingExpressions, index = 0) {\n const res = this.groupBy(array, groupingExpressions[index]);\n if (index + 1 < groupingExpressions.length) {\n for (const groupByRecord of res) {\n groupByRecord.groups = this.groupByMultiple(groupByRecord.records, groupingExpressions, index + 1);\n }\n }\n return res;\n }\n groupBy(array, groupingExpression) {\n var _a;\n const key = groupingExpression.fieldName;\n const column = (_a = this.grid) === null || _a === void 0 ? void 0 : _a.getColumnByName(key);\n const isDateTime = (column === null || column === void 0 ? void 0 : column.dataType) === GridColumnDataType.Date ||\n (column === null || column === void 0 ? void 0 : column.dataType) === GridColumnDataType.DateTime ||\n (column === null || column === void 0 ? void 0 : column.dataType) === GridColumnDataType.Time;\n const map = new Map();\n for (const record of array) {\n const value = isDateTime\n ? formatDate(record[key], column.pipeArgs.format, this.grid.locale)\n : record[key];\n let valueCase = value;\n let groupByRecord;\n if (groupingExpression.ignoreCase) {\n valueCase = value === null || value === void 0 ? void 0 : value.toString().toLowerCase();\n }\n if (map.has(valueCase)) {\n groupByRecord = map.get(valueCase);\n }\n else {\n groupByRecord = new GroupByRecord();\n groupByRecord.key = key;\n groupByRecord.value = value;\n groupByRecord.records = [];\n map.set(valueCase, groupByRecord);\n }\n groupByRecord.records.push(record);\n }\n return Array.from(map.values());\n }\n}\nIgxTreeGridGroupingPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridGroupingPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxTreeGridGroupingPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridGroupingPipe, name: \"treeGridGrouping\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridGroupingPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'treeGridGrouping'\n }]\n }] });\n\n/**\n * @hidden\n */\nclass IgxTreeGridModule {\n}\nIgxTreeGridModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxTreeGridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridModule, declarations: [IgxTreeGridComponent,\n IgxTreeGridRowComponent,\n IgxTreeGridCellComponent,\n IgxTreeGridHierarchizingPipe,\n IgxTreeGridFlatteningPipe,\n IgxTreeGridSortingPipe,\n IgxTreeGridFilteringPipe,\n IgxTreeGridPagingPipe,\n IgxTreeGridTransactionPipe,\n IgxTreeGridSummaryPipe,\n IgxRowLoadingIndicatorTemplateDirective,\n IgxTreeGridNormalizeRecordsPipe,\n IgxTreeGridGroupingPipe,\n IgxTreeGridGroupByAreaComponent,\n IgxTreeGridAddRowPipe], imports: [IgxGridCommonModule,\n IgxTooltipModule,\n ReactiveFormsModule], exports: [IgxTreeGridComponent,\n IgxTreeGridRowComponent,\n IgxTreeGridCellComponent,\n IgxRowLoadingIndicatorTemplateDirective,\n IgxGridCommonModule,\n IgxTreeGridGroupingPipe,\n IgxTreeGridGroupByAreaComponent,\n IgxTreeGridAddRowPipe] });\nIgxTreeGridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridModule, imports: [IgxGridCommonModule,\n IgxTooltipModule,\n ReactiveFormsModule, IgxGridCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTreeGridModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxTreeGridComponent,\n IgxTreeGridRowComponent,\n IgxTreeGridCellComponent,\n IgxTreeGridHierarchizingPipe,\n IgxTreeGridFlatteningPipe,\n IgxTreeGridSortingPipe,\n IgxTreeGridFilteringPipe,\n IgxTreeGridPagingPipe,\n IgxTreeGridTransactionPipe,\n IgxTreeGridSummaryPipe,\n IgxRowLoadingIndicatorTemplateDirective,\n IgxTreeGridNormalizeRecordsPipe,\n IgxTreeGridGroupingPipe,\n IgxTreeGridGroupByAreaComponent,\n IgxTreeGridAddRowPipe\n ],\n exports: [\n IgxTreeGridComponent,\n IgxTreeGridRowComponent,\n IgxTreeGridCellComponent,\n IgxRowLoadingIndicatorTemplateDirective,\n IgxGridCommonModule,\n IgxTreeGridGroupingPipe,\n IgxTreeGridGroupByAreaComponent,\n IgxTreeGridAddRowPipe\n ],\n imports: [\n IgxGridCommonModule,\n IgxTooltipModule,\n ReactiveFormsModule\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n }]\n }] });\n\nclass IgxHierarchicalGridNavigationService extends IgxGridNavigationService {\n constructor() {\n super(...arguments);\n this._pendingNavigation = false;\n }\n dispatchEvent(event) {\n const key = event.key.toLowerCase();\n if (!this.activeNode || !(SUPPORTED_KEYS.has(key) || (key === 'tab' && this.grid.crudService.cell)) &&\n !this.grid.crudService.rowEditingBlocked && !this.grid.crudService.rowInEditMode) {\n return;\n }\n const targetGrid = this.getClosestElemByTag(event.target, 'igx-hierarchical-grid');\n if (targetGrid !== this.grid.nativeElement) {\n return;\n }\n if (this._pendingNavigation && NAVIGATION_KEYS.has(key)) {\n // In case focus needs to be moved from one grid to another, however there is a pending scroll operation\n // which is an async operation, any additional navigation keys should be ignored\n // untill operation complete.\n event.preventDefault();\n return;\n }\n super.dispatchEvent(event);\n }\n navigateInBody(rowIndex, visibleColIndex, cb = null) {\n const rec = this.grid.dataView[rowIndex];\n if (rec && this.grid.isChildGridRecord(rec)) {\n // target is child grid\n const virtState = this.grid.verticalScrollContainer.state;\n const inView = rowIndex >= virtState.startIndex && rowIndex <= virtState.startIndex + virtState.chunkSize;\n const isNext = this.activeNode.row < rowIndex;\n const targetLayoutIndex = isNext ? null : this.grid.childLayoutKeys.length - 1;\n if (inView) {\n this._moveToChild(rowIndex, visibleColIndex, isNext, targetLayoutIndex, cb);\n }\n else {\n let scrollAmount = this.grid.verticalScrollContainer.getScrollForIndex(rowIndex, !isNext);\n scrollAmount += isNext ? 1 : -1;\n this.grid.verticalScrollContainer.getScroll().scrollTop = scrollAmount;\n this._pendingNavigation = true;\n this.grid.verticalScrollContainer.chunkLoad.pipe(first$1()).subscribe(() => {\n this._moveToChild(rowIndex, visibleColIndex, isNext, targetLayoutIndex, cb);\n this._pendingNavigation = false;\n });\n }\n return;\n }\n const isLast = rowIndex === this.grid.dataView.length;\n if ((rowIndex === -1 || isLast) &&\n this.grid.parent !== null) {\n // reached end of child grid\n const nextSiblingIndex = this.nextSiblingIndex(isLast);\n if (nextSiblingIndex !== null) {\n this.grid.parent.navigation._moveToChild(this.grid.childRow.index, visibleColIndex, isLast, nextSiblingIndex, cb);\n }\n else {\n this._moveToParent(isLast, visibleColIndex, cb);\n }\n return;\n }\n if (this.grid.parent) {\n const isNext = this.activeNode && typeof this.activeNode.row === 'number' ? rowIndex > this.activeNode.row : false;\n const cbHandler = (args) => {\n this._handleScrollInChild(rowIndex, isNext);\n cb(args);\n };\n if (!this.activeNode) {\n this.activeNode = { row: null, column: null };\n }\n super.navigateInBody(rowIndex, visibleColIndex, cbHandler);\n return;\n }\n if (!this.activeNode) {\n this.activeNode = { row: null, column: null };\n }\n super.navigateInBody(rowIndex, visibleColIndex, cb);\n }\n shouldPerformVerticalScroll(index, visibleColumnIndex = -1, isNext) {\n const targetRec = this.grid.dataView[index];\n if (this.grid.isChildGridRecord(targetRec)) {\n const scrollAmount = this.grid.verticalScrollContainer.getScrollForIndex(index, !isNext);\n const currScroll = this.grid.verticalScrollContainer.getScroll().scrollTop;\n const shouldScroll = !isNext ? scrollAmount > currScroll : currScroll < scrollAmount;\n return shouldScroll;\n }\n else {\n return super.shouldPerformVerticalScroll(index, visibleColumnIndex);\n }\n }\n focusTbody(event) {\n if (!this.activeNode || this.activeNode.row === null) {\n this.activeNode = {\n row: 0,\n column: 0\n };\n this.grid.navigateTo(0, 0, (obj) => {\n this.grid.clearCellSelection();\n obj.target.activate(event);\n });\n }\n else {\n super.focusTbody(event);\n }\n }\n nextSiblingIndex(isNext) {\n const layoutKey = this.grid.childRow.layout.key;\n const layoutIndex = this.grid.parent.childLayoutKeys.indexOf(layoutKey);\n const nextIndex = isNext ? layoutIndex + 1 : layoutIndex - 1;\n if (nextIndex <= this.grid.parent.childLayoutKeys.length - 1 && nextIndex > -1) {\n return nextIndex;\n }\n else {\n return null;\n }\n }\n /**\n * Handles scrolling in child grid and ensures target child row is in main grid view port.\n *\n * @param rowIndex The row index which should be in view.\n * @param isNext Optional. Whether we are navigating to next. Used to determine scroll direction.\n * @param cb Optional.Callback function called when operation is complete.\n */\n _handleScrollInChild(rowIndex, isNext, cb) {\n const shouldScroll = this.shouldPerformVerticalScroll(rowIndex, -1, isNext);\n if (shouldScroll) {\n this.grid.navigation.performVerticalScrollToCell(rowIndex, -1, () => {\n this.positionInParent(rowIndex, isNext, cb);\n });\n }\n else {\n this.positionInParent(rowIndex, isNext, cb);\n }\n }\n /**\n *\n * @param rowIndex Row index that should come in view.\n * @param isNext Whether we are navigating to next. Used to determine scroll direction.\n * @param cb Optional.Callback function called when operation is complete.\n */\n positionInParent(rowIndex, isNext, cb) {\n const row = this.grid.gridAPI.get_row_by_index(rowIndex);\n if (!row) {\n if (cb) {\n cb();\n }\n return;\n }\n const positionInfo = this.getPositionInfo(row, isNext);\n if (!positionInfo.inView) {\n // stop event from triggering multiple times before scrolling is complete.\n this._pendingNavigation = true;\n const scrollableGrid = isNext ? this.getNextScrollableDown(this.grid) : this.getNextScrollableUp(this.grid);\n scrollableGrid.grid.verticalScrollContainer.recalcUpdateSizes();\n scrollableGrid.grid.verticalScrollContainer.addScrollTop(positionInfo.offset);\n scrollableGrid.grid.verticalScrollContainer.chunkLoad.pipe(first$1()).subscribe(() => {\n this._pendingNavigation = false;\n if (cb) {\n cb();\n }\n });\n }\n else {\n if (cb) {\n cb();\n }\n }\n }\n /**\n * Moves navigation to child grid.\n *\n * @param parentRowIndex The parent row index, at which the child grid is rendered.\n * @param childLayoutIndex Optional. The index of the child row island to which the child grid belongs to. Uses first if not set.\n */\n _moveToChild(parentRowIndex, visibleColIndex, isNext, childLayoutIndex, cb) {\n const ri = typeof childLayoutIndex !== 'number' ?\n this.grid.childLayoutList.first : this.grid.childLayoutList.toArray()[childLayoutIndex];\n const rowId = this.grid.dataView[parentRowIndex].rowID;\n const pathSegment = {\n rowID: rowId,\n rowIslandKey: ri.key\n };\n const childGrid = this.grid.gridAPI.getChildGrid([pathSegment]);\n const targetIndex = isNext ? 0 : childGrid.dataView.length - 1;\n const targetRec = childGrid.dataView[targetIndex];\n if (!targetRec) {\n // if no target rec, then move on in next sibling or parent\n childGrid.navigation.navigateInBody(targetIndex, visibleColIndex, cb);\n return;\n }\n if (childGrid.isChildGridRecord(targetRec)) {\n // if target is a child grid record should move into it.\n this.grid.navigation.activeNode.row = null;\n childGrid.navigation.activeNode = { row: targetIndex, column: this.activeNode.column };\n childGrid.navigation._handleScrollInChild(targetIndex, isNext, () => {\n const targetLayoutIndex = isNext ? 0 : childGrid.childLayoutList.toArray().length - 1;\n childGrid.navigation._moveToChild(targetIndex, visibleColIndex, isNext, targetLayoutIndex, cb);\n });\n return;\n }\n const childGridNav = childGrid.navigation;\n this.clearActivation();\n const lastVisibleIndex = childGridNav.lastColumnIndex;\n const columnIndex = visibleColIndex <= lastVisibleIndex ? visibleColIndex : lastVisibleIndex;\n childGridNav.activeNode = { row: targetIndex, column: columnIndex };\n childGrid.tbody.nativeElement.focus({ preventScroll: true });\n this._pendingNavigation = false;\n childGrid.navigation._handleScrollInChild(targetIndex, isNext, () => {\n childGrid.navigateTo(targetIndex, columnIndex, cb);\n });\n }\n /**\n * Moves navigation back to parent grid.\n *\n * @param rowIndex\n */\n _moveToParent(isNext, columnIndex, cb) {\n const indexInParent = this.grid.childRow.index;\n const hasNextTarget = this.hasNextTarget(this.grid.parent, indexInParent, isNext);\n if (!hasNextTarget) {\n return;\n }\n this.clearActivation();\n const targetRowIndex = isNext ? indexInParent + 1 : indexInParent - 1;\n const lastVisibleIndex = this.grid.parent.navigation.lastColumnIndex;\n const nextColumnIndex = columnIndex <= lastVisibleIndex ? columnIndex : lastVisibleIndex;\n this._pendingNavigation = true;\n const cbFunc = (args) => {\n this._pendingNavigation = false;\n cb(args);\n args.target.grid.tbody.nativeElement.focus();\n };\n this.grid.parent.navigation.navigateInBody(targetRowIndex, nextColumnIndex, cbFunc);\n }\n /**\n * Gets information on the row position relative to the root grid view port.\n * Returns whether the row is in view and its offset.\n *\n * @param rowObj\n * @param isNext\n */\n getPositionInfo(row, isNext) {\n // XXX: Fix type\n let rowElem = row.nativeElement;\n if (row.layout) {\n const childLayoutKeys = this.grid.childLayoutKeys;\n const riKey = isNext ? childLayoutKeys[0] : childLayoutKeys[childLayoutKeys.length - 1];\n const pathSegment = {\n rowID: row.data.rowID,\n rowIslandKey: riKey\n };\n const childGrid = this.grid.gridAPI.getChildGrid([pathSegment]);\n rowElem = childGrid.tfoot.nativeElement;\n }\n const gridBottom = this._getMinBottom(this.grid);\n const diffBottom = rowElem.getBoundingClientRect().bottom - gridBottom;\n const gridTop = this._getMaxTop(this.grid);\n const diffTop = rowElem.getBoundingClientRect().bottom -\n rowElem.offsetHeight - gridTop;\n // Adding Math.Round because Chrome has some inconsistencies when the page is zoomed\n const isInView = isNext ? Math.round(diffBottom) <= 0 : Math.round(diffTop) >= 0;\n const calcOffset = isNext ? diffBottom : diffTop;\n return { inView: isInView, offset: calcOffset };\n }\n /**\n * Gets closest element by its tag name.\n *\n * @param sourceElem The element from which to start the search.\n * @param targetTag The target element tag name, for which to search.\n */\n getClosestElemByTag(sourceElem, targetTag) {\n let result = sourceElem;\n while (result !== null && result.nodeType === 1) {\n if (result.tagName.toLowerCase() === targetTag.toLowerCase()) {\n return result;\n }\n result = result.parentNode;\n }\n return null;\n }\n clearActivation() {\n // clear if previous activation exists.\n if (this.activeNode && Object.keys(this.activeNode).length) {\n this.activeNode = Object.assign({});\n }\n }\n hasNextTarget(grid, index, isNext) {\n const targetRowIndex = isNext ? index + 1 : index - 1;\n const hasTargetRecord = !!grid.dataView[targetRowIndex];\n if (hasTargetRecord) {\n return true;\n }\n else {\n let hasTargetRecordInParent = false;\n if (grid.parent) {\n const indexInParent = grid.childRow.index;\n hasTargetRecordInParent = this.hasNextTarget(grid.parent, indexInParent, isNext);\n }\n return hasTargetRecordInParent;\n }\n }\n /**\n * Gets the max top view in the current grid hierarchy.\n *\n * @param grid\n */\n _getMaxTop(grid) {\n let currGrid = grid;\n let top = currGrid.tbody.nativeElement.getBoundingClientRect().top;\n while (currGrid.parent) {\n currGrid = currGrid.parent;\n const pinnedRowsHeight = currGrid.hasPinnedRecords && currGrid.isRowPinningToTop ? currGrid.pinnedRowHeight : 0;\n top = Math.max(top, currGrid.tbody.nativeElement.getBoundingClientRect().top + pinnedRowsHeight);\n }\n return top;\n }\n /**\n * Gets the min bottom view in the current grid hierarchy.\n *\n * @param grid\n */\n _getMinBottom(grid) {\n let currGrid = grid;\n let bottom = currGrid.tbody.nativeElement.getBoundingClientRect().bottom;\n while (currGrid.parent) {\n currGrid = currGrid.parent;\n const pinnedRowsHeight = currGrid.hasPinnedRecords && !currGrid.isRowPinningToTop ? currGrid.pinnedRowHeight : 0;\n bottom = Math.min(bottom, currGrid.tbody.nativeElement.getBoundingClientRect().bottom - pinnedRowsHeight);\n }\n return bottom;\n }\n /**\n * Finds the next grid that allows scrolling down.\n *\n * @param grid The grid from which to begin the search.\n */\n getNextScrollableDown(grid) {\n let currGrid = grid.parent;\n if (!currGrid) {\n return { grid, prev: null };\n }\n let scrollTop = currGrid.verticalScrollContainer.scrollPosition;\n let scrollHeight = currGrid.verticalScrollContainer.getScroll().scrollHeight;\n let nonScrollable = scrollHeight === 0 ||\n Math.round(scrollTop + currGrid.verticalScrollContainer.igxForContainerSize) === scrollHeight;\n let prev = grid;\n while (nonScrollable && currGrid.parent !== null) {\n prev = currGrid;\n currGrid = currGrid.parent;\n scrollTop = currGrid.verticalScrollContainer.scrollPosition;\n scrollHeight = currGrid.verticalScrollContainer.getScroll().scrollHeight;\n nonScrollable = scrollHeight === 0 ||\n Math.round(scrollTop + currGrid.verticalScrollContainer.igxForContainerSize) === scrollHeight;\n }\n return { grid: currGrid, prev };\n }\n /**\n * Finds the next grid that allows scrolling up.\n *\n * @param grid The grid from which to begin the search.\n */\n getNextScrollableUp(grid) {\n let currGrid = grid.parent;\n if (!currGrid) {\n return { grid, prev: null };\n }\n let nonScrollable = currGrid.verticalScrollContainer.scrollPosition === 0;\n let prev = grid;\n while (nonScrollable && currGrid.parent !== null) {\n prev = currGrid;\n currGrid = currGrid.parent;\n nonScrollable = currGrid.verticalScrollContainer.scrollPosition === 0;\n }\n return { grid: currGrid, prev };\n }\n}\nIgxHierarchicalGridNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridNavigationService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\nIgxHierarchicalGridNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridNavigationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridNavigationService, decorators: [{\n type: Injectable\n }] });\n\nclass IgxHierarchicalGridAPIService extends GridBaseAPIService {\n constructor() {\n super(...arguments);\n this.childRowIslands = new Map();\n this.childGrids = new Map();\n }\n registerChildRowIsland(rowIsland) {\n this.childRowIslands.set(rowIsland.key, rowIsland);\n this.destroyMap.set(rowIsland.key, new Subject());\n }\n unsetChildRowIsland(rowIsland) {\n this.childGrids.delete(rowIsland.key);\n this.childRowIslands.delete(rowIsland.key);\n this.destroyMap.delete(rowIsland.key);\n }\n getChildRowIsland(key) {\n return this.childRowIslands.get(key);\n }\n getChildGrid(path) {\n const currPath = path;\n let grid;\n const pathElem = currPath.shift();\n const childrenForLayout = this.childGrids.get(pathElem.rowIslandKey);\n if (childrenForLayout) {\n const childGrid = childrenForLayout.get(pathElem.rowID);\n if (currPath.length === 0) {\n grid = childGrid;\n }\n else {\n grid = childGrid.gridAPI.getChildGrid(currPath);\n }\n }\n return grid;\n }\n getChildGrids(inDepth) {\n let allChildren = [];\n this.childGrids.forEach((layoutMap) => {\n layoutMap.forEach((grid) => {\n allChildren.push(grid);\n if (inDepth) {\n const children = grid.gridAPI.getChildGrids(inDepth);\n allChildren = allChildren.concat(children);\n }\n });\n });\n return allChildren;\n }\n getParentRowId(childGrid) {\n let rowID;\n this.childGrids.forEach((layoutMap) => {\n layoutMap.forEach((grid, key) => {\n if (grid === childGrid) {\n rowID = key;\n return;\n }\n });\n });\n return rowID;\n }\n registerChildGrid(parentRowID, rowIslandKey, grid) {\n let childrenForLayout = this.childGrids.get(rowIslandKey);\n if (!childrenForLayout) {\n this.childGrids.set(rowIslandKey, new Map());\n childrenForLayout = this.childGrids.get(rowIslandKey);\n }\n childrenForLayout.set(parentRowID, grid);\n }\n getChildGridsForRowIsland(rowIslandKey) {\n const childrenForLayout = this.childGrids.get(rowIslandKey);\n const children = [];\n if (childrenForLayout) {\n childrenForLayout.forEach((child) => {\n children.push(child);\n });\n }\n return children;\n }\n getChildGridByID(rowIslandKey, rowID) {\n const childrenForLayout = this.childGrids.get(rowIslandKey);\n return childrenForLayout.get(rowID);\n }\n get_row_expansion_state(record) {\n let inState;\n if (record.childGridsData !== undefined) {\n const ri = record.key;\n const states = this.grid.expansionStates;\n const expanded = states.get(ri);\n if (expanded !== undefined) {\n return expanded;\n }\n else {\n return this.grid.getDefaultExpandState(record);\n }\n }\n else {\n inState = !!super.get_row_expansion_state(record);\n }\n return inState && this.grid.childLayoutList.length !== 0;\n }\n allow_expansion_state_change(rowID, expanded) {\n const rec = this.get_rec_by_id(rowID);\n const grid = this.grid;\n if (grid.hasChildrenKey && !rec[grid.hasChildrenKey]) {\n return false;\n }\n return !!rec && this.grid.expansionStates.get(rowID) !== expanded;\n }\n get_rec_by_id(rowID) {\n const data = this.get_all_data(false);\n const index = this.get_row_index_in_data(rowID, data);\n return data[index];\n }\n}\nIgxHierarchicalGridAPIService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridAPIService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\nIgxHierarchicalGridAPIService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridAPIService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridAPIService, decorators: [{\n type: Injectable\n }] });\n\nconst hierarchicalTransactionServiceFactory = () => new IgxTransactionService();\nconst IgxHierarchicalTransactionServiceFactory = {\n provide: IgxGridTransaction,\n useFactory: hierarchicalTransactionServiceFactory\n};\nclass IgxHierarchicalGridBaseDirective extends IgxGridBaseDirective {\n /**\n * @hidden\n */\n get maxLevelHeaderDepth() {\n if (this._maxLevelHeaderDepth === null) {\n this._maxLevelHeaderDepth = this.columns.reduce((acc, col) => Math.max(acc, col.level), 0);\n }\n return this._maxLevelHeaderDepth;\n }\n /**\n * Gets the outlet used to attach the grid's overlays to.\n *\n * @remark\n * If set, returns the outlet defined outside the grid. Otherwise returns the grid's internal outlet directive.\n */\n get outlet() {\n return this.rootGrid ? this.rootGrid.resolveOutlet() : this.resolveOutlet();\n }\n /**\n * Sets the outlet used to attach the grid's overlays to.\n */\n set outlet(val) {\n this._userOutletDirective = val;\n }\n get batchEditing() {\n return this._batchEditing;\n }\n set batchEditing(val) {\n if (val !== this._batchEditing) {\n delete this._transactions;\n this.switchTransactionService(val);\n this.subscribeToTransactions();\n this.batchEditingChange.emit(val);\n this._batchEditing = val;\n }\n }\n constructor(validationService, selectionService, colResizingService, gridAPI, transactionFactory, elementRef, zone, document, cdr, differs, viewRef, appRef, injector, envInjector, navigation, filteringService, overlayService, summaryService, _displayDensityOptions, localeId, platform, _diTransactions) {\n super(validationService, selectionService, colResizingService, gridAPI, transactionFactory, elementRef, zone, document, cdr, differs, viewRef, appRef, injector, envInjector, navigation, filteringService, overlayService, summaryService, _displayDensityOptions, localeId, platform, _diTransactions);\n this.gridAPI = gridAPI;\n /**\n * Gets/Sets whether the expand/collapse all button in the header should be rendered.\n *\n * @remark\n * The default value is false.\n * @example\n * ```html\n * \n * \n * ```\n */\n this.showExpandAll = false;\n /**\n * Emitted when a new chunk of data is loaded from virtualization.\n *\n * @example\n * ```typescript\n * \n * \n * ```\n */\n this.dataPreLoad = new EventEmitter();\n /** @hidden @internal */\n this.batchEditingChange = new EventEmitter();\n }\n /**\n * @hidden\n */\n createColumnsList(cols) {\n const columns = [];\n const topLevelCols = cols.filter(c => c.level === 0);\n topLevelCols.forEach((col) => {\n const ref = this._createColumn(col);\n ref.changeDetectorRef.detectChanges();\n columns.push(ref.instance);\n });\n const result = flatten(columns);\n this.updateColumns(result);\n this.initPinning();\n const mirror = reflectComponentType(IgxColumnComponent);\n const outputs = mirror.outputs.filter(o => o.propName !== 'columnChange');\n outputs.forEach(output => {\n this.columns.forEach(column => {\n if (column[output.propName]) {\n column[output.propName].pipe(takeUntil(column.destroy$)).subscribe((args) => {\n const rowIslandColumn = this.parentIsland.childColumns.find(col => col.field === column.field);\n rowIslandColumn[output.propName].emit({ args, owner: this });\n });\n }\n });\n });\n }\n _createColumn(col) {\n let ref;\n if (col instanceof IgxColumnGroupComponent) {\n ref = this._createColGroupComponent(col);\n }\n else {\n ref = this._createColComponent(col);\n }\n return ref;\n }\n _createColGroupComponent(col) {\n const ref = createComponent(IgxColumnGroupComponent, { environmentInjector: this.envInjector, elementInjector: this.injector });\n ref.changeDetectorRef.detectChanges();\n const mirror = reflectComponentType(IgxColumnGroupComponent);\n mirror.inputs.forEach((input) => {\n const propName = input.propName;\n ref.instance[propName] = col[propName];\n });\n if (col.children.length > 0) {\n const newChildren = [];\n col.children.forEach(child => {\n const newCol = this._createColumn(child).instance;\n newCol.parent = ref.instance;\n newChildren.push(newCol);\n });\n ref.instance.children.reset(newChildren);\n ref.instance.children.notifyOnChanges();\n }\n return ref;\n }\n _createColComponent(col) {\n const ref = createComponent(IgxColumnComponent, { environmentInjector: this.envInjector, elementInjector: this.injector });\n const mirror = reflectComponentType(IgxColumnComponent);\n mirror.inputs.forEach((input) => {\n const propName = input.propName;\n if (!(col[propName] instanceof IgxSummaryOperand)) {\n ref.instance[propName] = col[propName];\n }\n else {\n ref.instance[propName] = col[propName].constructor;\n }\n });\n ref.instance.validators = col.validators;\n return ref;\n }\n getGridsForIsland(rowIslandID) {\n return this.gridAPI.getChildGridsForRowIsland(rowIslandID);\n }\n getChildGrid(path) {\n if (!path) {\n return;\n }\n return this.gridAPI.getChildGrid(path);\n }\n}\nIgxHierarchicalGridBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridBaseDirective, deps: [{ token: IgxGridValidationService }, { token: IgxGridSelectionService }, { token: IgxColumnResizingService }, { token: IGX_GRID_SERVICE_BASE }, { token: IgxFlatTransactionFactory }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i0.IterableDiffers }, { token: i0.ViewContainerRef }, { token: i0.ApplicationRef }, { token: i0.Injector }, { token: i0.EnvironmentInjector }, { token: IgxHierarchicalGridNavigationService }, { token: IgxFilteringService }, { token: IgxOverlayService }, { token: IgxGridSummaryService }, { token: DisplayDensityToken, optional: true }, { token: LOCALE_ID }, { token: PlatformUtil }, { token: IgxGridTransaction, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nIgxHierarchicalGridBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxHierarchicalGridBaseDirective, inputs: { hasChildrenKey: \"hasChildrenKey\", showExpandAll: \"showExpandAll\" }, outputs: { dataPreLoad: \"dataPreLoad\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridBaseDirective, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: IgxGridValidationService }, { type: IgxGridSelectionService }, { type: IgxColumnResizingService }, { type: IgxHierarchicalGridAPIService, decorators: [{\n type: Inject,\n args: [IGX_GRID_SERVICE_BASE]\n }] }, { type: IgxFlatTransactionFactory }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: i0.ViewContainerRef }, { type: i0.ApplicationRef }, { type: i0.Injector }, { type: i0.EnvironmentInjector }, { type: IgxHierarchicalGridNavigationService }, { type: IgxFilteringService }, { type: IgxOverlayService, decorators: [{\n type: Inject,\n args: [IgxOverlayService]\n }] }, { type: IgxGridSummaryService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: PlatformUtil }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IgxGridTransaction]\n }] }];\n }, propDecorators: { hasChildrenKey: [{\n type: Input\n }], showExpandAll: [{\n type: Input\n }], dataPreLoad: [{\n type: Output\n }] } });\nconst flatten = (arr) => {\n let result = [];\n arr.forEach(el => {\n result.push(el);\n if (el.children) {\n result = result.concat(flatten(el.children.toArray()));\n }\n });\n return result;\n};\n\nclass IgxRowIslandAPIService {\n constructor() {\n this.change = new Subject();\n this.state = new Map();\n this.destroyMap = new Map();\n this.childRowIslands = new Map();\n this.childGrids = new Map();\n }\n register(rowIsland) {\n this.state.set(rowIsland.id, rowIsland);\n this.destroyMap.set(rowIsland.id, new Subject());\n }\n unsubscribe(rowIsland) {\n this.state.delete(rowIsland.id);\n }\n get(id) {\n return this.state.get(id);\n }\n unset(id) {\n this.state.delete(id);\n this.destroyMap.delete(id);\n }\n reset(oldId, newId) {\n const destroy = this.destroyMap.get(oldId);\n const rowIsland = this.get(oldId);\n this.unset(oldId);\n if (rowIsland) {\n this.state.set(newId, rowIsland);\n }\n if (destroy) {\n this.destroyMap.set(newId, destroy);\n }\n }\n registerChildRowIsland(rowIsland) {\n this.childRowIslands.set(rowIsland.key, rowIsland);\n this.destroyMap.set(rowIsland.key, new Subject());\n }\n unsetChildRowIsland(rowIsland) {\n this.childRowIslands.delete(rowIsland.key);\n this.destroyMap.delete(rowIsland.key);\n }\n getChildRowIsland(rowIslandKey) {\n return this.childRowIslands.get(rowIslandKey);\n }\n registerChildGrid(parentRowID, grid) {\n this.childGrids.set(parentRowID, grid);\n }\n getChildGrids(inDepth) {\n let allChildren = [];\n this.childGrids.forEach((grid) => {\n allChildren.push(grid);\n });\n if (inDepth) {\n this.childRowIslands.forEach((layout) => {\n allChildren = allChildren.concat(layout.rowIslandAPI.getChildGrids(inDepth));\n });\n }\n return allChildren;\n }\n getChildGridByID(rowID) {\n return this.childGrids.get(rowID);\n }\n}\nIgxRowIslandAPIService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowIslandAPIService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIgxRowIslandAPIService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowIslandAPIService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowIslandAPIService, decorators: [{\n type: Injectable\n }] });\n\nclass IgxRowIslandComponent extends IgxHierarchicalGridBaseDirective {\n /**\n * Sets if all immediate children of the grids for this `IgxRowIslandComponent` should be expanded/collapsed.\n * ```html\n * \n * \n * \n * \n * \n * ```\n *\n * @memberof IgxRowIslandComponent\n */\n set expandChildren(value) {\n this._defaultExpandState = value;\n this.rowIslandAPI.getChildGrids().forEach((grid) => {\n if (document.body.contains(grid.nativeElement)) {\n // Detect changes right away if the grid is visible\n grid.expandChildren = value;\n grid.cdr.detectChanges();\n }\n else {\n // Else defer the detection on changes when the grid gets into view for performance.\n grid.updateOnRender = true;\n }\n });\n }\n /**\n * Gets if all immediate children of the grids for this `IgxRowIslandComponent` have been set to be expanded/collapsed.\n * ```typescript\n * const expanded = this.rowIsland.expandChildren;\n * ```\n *\n * @memberof IgxRowIslandComponent\n */\n get expandChildren() {\n return this._defaultExpandState;\n }\n /**\n * @hidden\n */\n get id() {\n const pId = this.parentId ? this.parentId.substring(this.parentId.indexOf(this.layout_id) + this.layout_id.length) + '-' : '';\n return this.layout_id + pId + this.key;\n }\n /**\n * @hidden\n */\n get parentId() {\n return this.parentIsland ? this.parentIsland.id : null;\n }\n /**\n * @hidden\n */\n get level() {\n let ptr = this.parentIsland;\n let lvl = 0;\n while (ptr) {\n lvl++;\n ptr = ptr.parentIsland;\n }\n return lvl + 1;\n }\n constructor(validationService, selectionService, colResizingService, gridAPI, transactionFactory, elementRef, zone, document, cdr, differs, viewRef, injector, envInjector, appRef, navigation, filteringService, overlayService, summaryService, _displayDensityOptions, rowIslandAPI, localeId, platform) {\n super(validationService, selectionService, colResizingService, gridAPI, transactionFactory, elementRef, zone, document, cdr, differs, viewRef, appRef, injector, envInjector, navigation, filteringService, overlayService, summaryService, _displayDensityOptions, localeId, platform);\n this.rowIslandAPI = rowIslandAPI;\n /**\n * @hidden\n */\n this.children = new QueryList();\n /**\n * @hidden\n */\n this.childColumns = new QueryList();\n /**\n * @hidden\n */\n this.layoutChange = new EventEmitter();\n /**\n * Event emmited when a grid is being created based on this row island.\n * ```html\n * \n * \n * \n * \n * \n * ```\n *\n * @memberof IgxRowIslandComponent\n */\n this.gridCreated = new EventEmitter();\n /**\n * Emitted after a grid is being initialized for this row island.\n * The emitting is done in `ngAfterViewInit`.\n * ```html\n * \n * \n * \n * \n * \n * ```\n *\n * @memberof IgxRowIslandComponent\n */\n this.gridInitialized = new EventEmitter();\n /**\n * @hidden\n */\n this.initialChanges = [];\n /**\n * @hidden\n */\n this.rootGrid = null;\n this.layout_id = `igx-row-island-`;\n this.isInit = false;\n this._childColumns = [];\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.filteringService.grid = this;\n this.rootGrid = this.gridAPI.grid;\n this.rowIslandAPI.rowIsland = this;\n this.ri_columnListDiffer = this.differs.find([]).create(null);\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n this.updateChildren();\n this.children.notifyOnChanges();\n this.children.changes.pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.updateChildren();\n // update existing grids since their child ri have been changed.\n this.getGridsForIsland(this.key).forEach(grid => {\n grid.onRowIslandChange(this.children);\n });\n });\n const nestedColumns = this.children.map((layout) => layout.columnList.toArray());\n const colsArray = [].concat.apply([], nestedColumns);\n const topCols = this.columnList.filter((item) => colsArray.indexOf(item) === -1);\n this._childColumns = topCols;\n this.updateColumns(this._childColumns);\n this.columnList.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n Promise.resolve().then(() => {\n this.updateColumnList();\n });\n });\n // handle column changes so that they are passed to child grid instances when columnChange is emitted.\n this.ri_columnListDiffer.diff(this.childColumns);\n this._childColumns.forEach(x => x.columnChange.pipe(takeUntil(x.destroy$)).subscribe(() => this.updateColumnList()));\n this.childColumns.changes.pipe(takeUntil(this.destroy$)).subscribe((change) => {\n const diff = this.ri_columnListDiffer.diff(change);\n if (diff) {\n diff.forEachAddedItem((record) => {\n record.item.columnChange.pipe(takeUntil(record.item.destroy$)).subscribe(() => this.updateColumnList());\n });\n }\n });\n this.actionStrip = this.actionStrips.first;\n if (this.actionStrip) {\n this.actionStrip.menuOverlaySettings.outlet = this.outlet;\n }\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this.rowIslandAPI.register(this);\n if (this.parentIsland) {\n this.parentIsland.rowIslandAPI.registerChildRowIsland(this);\n }\n else {\n this.rootGrid.gridAPI.registerChildRowIsland(this);\n }\n this._init = false;\n // Create the child toolbar if the parent island has a toolbar definition\n this.gridCreated.pipe(pluck('grid'), takeUntil(this.destroy$)).subscribe(grid => {\n grid.rendered$.pipe(first$1(), filter(() => !!this.islandToolbarTemplate))\n .subscribe(() => grid.toolbarOutlet.createEmbeddedView(this.islandToolbarTemplate, { $implicit: grid }));\n grid.rendered$.pipe(first$1(), filter(() => !!this.islandPaginatorTemplate))\n .subscribe(() => {\n this.rootGrid.paginatorList.changes.pipe(takeUntil(this.destroy$)).subscribe(() => grid.setUpPaginator());\n grid.paginatorOutlet.createEmbeddedView(this.islandPaginatorTemplate);\n });\n });\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n this.layoutChange.emit(changes);\n if (!this.isInit) {\n this.initialChanges.push(changes);\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n // Override the base destroy because we don't have rendered anything to use removeEventListener on\n this.destroy$.next(true);\n this.destroy$.complete();\n this._destroyed = true;\n this.rowIslandAPI.unset(this.id);\n if (this.parentIsland) {\n this.getGridsForIsland(this.key).forEach(grid => {\n this.cleanGridState(grid);\n grid.gridAPI.unsetChildRowIsland(this);\n });\n this.parentIsland.rowIslandAPI.unsetChildRowIsland(this);\n }\n else {\n this.rootGrid.gridAPI.unsetChildRowIsland(this);\n this.cleanGridState(this.rootGrid);\n }\n }\n /**\n * @hidden\n */\n reflow() { }\n /**\n * @hidden\n */\n calculateGridHeight() { }\n updateColumnList() {\n const nestedColumns = this.children.map((layout) => layout.columnList.toArray());\n const colsArray = [].concat.apply([], nestedColumns);\n const topCols = this.columnList.filter((item) => {\n if (colsArray.indexOf(item) === -1) {\n /* Reset the default width of the columns that come into this row island,\n because the root catches them first during the detectChanges() and sets their defaultWidth. */\n item.defaultWidth = undefined;\n return true;\n }\n return false;\n });\n this._childColumns = topCols;\n this.rowIslandAPI.getChildGrids().forEach((grid) => {\n grid.createColumnsList(this._childColumns);\n if (!document.body.contains(grid.nativeElement)) {\n grid.updateOnRender = true;\n }\n });\n }\n updateChildren() {\n if (this.children.first === this) {\n this.children.reset(this.children.toArray().slice(1));\n }\n this.children.forEach(child => {\n child.parentIsland = this;\n });\n }\n cleanGridState(grid) {\n grid.childGridTemplates.forEach((tmpl) => {\n tmpl.owner.cleanView(tmpl.context.templateID);\n });\n grid.childGridTemplates.clear();\n grid.onRowIslandChange();\n }\n}\nIgxRowIslandComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowIslandComponent, deps: [{ token: IgxGridValidationService }, { token: IgxGridSelectionService }, { token: IgxColumnResizingService }, { token: IGX_GRID_SERVICE_BASE }, { token: IgxFlatTransactionFactory }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i0.IterableDiffers }, { token: i0.ViewContainerRef }, { token: i0.Injector }, { token: i0.EnvironmentInjector }, { token: i0.ApplicationRef }, { token: IgxHierarchicalGridNavigationService }, { token: IgxFilteringService }, { token: IgxOverlayService }, { token: IgxGridSummaryService }, { token: DisplayDensityToken, optional: true }, { token: IgxRowIslandAPIService }, { token: LOCALE_ID }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nIgxRowIslandComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxRowIslandComponent, selector: \"igx-row-island\", inputs: { key: \"key\", expandChildren: \"expandChildren\" }, outputs: { layoutChange: \"layoutChange\", gridCreated: \"gridCreated\", gridInitialized: \"gridInitialized\" }, providers: [\n IgxRowIslandAPIService,\n IgxFilteringService,\n IgxGridSelectionService\n ], queries: [{ propertyName: \"islandToolbarTemplate\", first: true, predicate: IgxGridToolbarDirective, descendants: true, read: TemplateRef }, { propertyName: \"islandPaginatorTemplate\", first: true, predicate: IgxPaginatorDirective, descendants: true, read: TemplateRef }, { propertyName: \"children\", predicate: i0.forwardRef(function () { return IgxRowIslandComponent; }), read: IgxRowIslandComponent }, { propertyName: \"childColumns\", predicate: IgxColumnComponent, read: IgxColumnComponent }, { propertyName: \"actionStrips\", predicate: IgxActionStripComponent, read: IgxActionStripComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxRowIslandComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'igx-row-island',\n template: ``,\n providers: [\n IgxRowIslandAPIService,\n IgxFilteringService,\n IgxGridSelectionService\n ]\n }]\n }], ctorParameters: function () {\n return [{ type: IgxGridValidationService }, { type: IgxGridSelectionService }, { type: IgxColumnResizingService }, { type: IgxHierarchicalGridAPIService, decorators: [{\n type: Inject,\n args: [IGX_GRID_SERVICE_BASE]\n }] }, { type: IgxFlatTransactionFactory }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: i0.ViewContainerRef }, { type: i0.Injector }, { type: i0.EnvironmentInjector }, { type: i0.ApplicationRef }, { type: IgxHierarchicalGridNavigationService }, { type: IgxFilteringService }, { type: IgxOverlayService, decorators: [{\n type: Inject,\n args: [IgxOverlayService]\n }] }, { type: IgxGridSummaryService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: IgxRowIslandAPIService }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: PlatformUtil }];\n }, propDecorators: { key: [{\n type: Input\n }], children: [{\n type: ContentChildren,\n args: [forwardRef(() => IgxRowIslandComponent), { read: IgxRowIslandComponent, descendants: false }]\n }], childColumns: [{\n type: ContentChildren,\n args: [IgxColumnComponent, { read: IgxColumnComponent, descendants: false }]\n }], islandToolbarTemplate: [{\n type: ContentChild,\n args: [IgxGridToolbarDirective, { read: TemplateRef }]\n }], islandPaginatorTemplate: [{\n type: ContentChild,\n args: [IgxPaginatorDirective, { read: TemplateRef }]\n }], actionStrips: [{\n type: ContentChildren,\n args: [IgxActionStripComponent, { read: IgxActionStripComponent, descendants: false }]\n }], layoutChange: [{\n type: Output\n }], gridCreated: [{\n type: Output\n }], gridInitialized: [{\n type: Output\n }], expandChildren: [{\n type: Input\n }] } });\n\nclass IgxHierarchicalGridCellComponent extends IgxGridCellComponent {\n constructor(selectionService, grid, overlayService, cdr, helement, zone, touchManager, platformUtil) {\n super(selectionService, grid, overlayService, cdr, helement, zone, touchManager, platformUtil);\n }\n ngOnInit() {\n super.ngOnInit();\n this._rootGrid = this._getRootGrid();\n }\n /**\n * @hidden\n * @internal\n */\n activate(event) {\n this._clearAllHighlights();\n const currentElement = this.grid.nativeElement;\n let parentGrid = this.grid;\n let childGrid;\n // add highligh to the current grid\n if (this._rootGrid.id !== currentElement.id) {\n currentElement.classList.add('igx-grid__tr--highlighted');\n }\n // add highligh to the current grid\n while (this._rootGrid.id !== parentGrid.id) {\n childGrid = parentGrid;\n parentGrid = parentGrid.parent;\n const parentRowID = parentGrid.gridAPI.getParentRowId(childGrid);\n parentGrid.highlightedRowID = parentRowID;\n }\n this.grid.navigation.activeNode.gridID = this.gridID;\n super.activate(event);\n }\n _getRootGrid() {\n let currGrid = this.grid;\n while (currGrid.parent) {\n currGrid = currGrid.parent;\n }\n return currGrid;\n }\n // TODO: Extend the new selection service to avoid complete traversal\n _clearAllHighlights() {\n [this._rootGrid, ...this._rootGrid.getChildGrids(true)].forEach(grid => {\n if (grid !== this.grid && grid.navigation.activeNode) {\n grid.navigation.clearActivation();\n grid.selectionService.initKeyboardState();\n grid.selectionService.clear();\n }\n grid.selectionService.activeElement = null;\n grid.nativeElement.classList.remove('igx-grid__tr--highlighted');\n grid.highlightedRowID = null;\n grid.cdr.markForCheck();\n });\n }\n}\nIgxHierarchicalGridCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridCellComponent, deps: [{ token: IgxGridSelectionService }, { token: IGX_GRID_BASE }, { token: IgxOverlayService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: HammerGesturesManager }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nIgxHierarchicalGridCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxHierarchicalGridCellComponent, selector: \"igx-hierarchical-grid-cell\", providers: [HammerGesturesManager], usesInheritance: true, ngImport: i0, template: \"\\n {{ grid.resourceStrings.igx_grid_pinned_row_indicator }}\\n\\n\\n
    {{\\n formatter\\n ? (value | columnFormatter:formatter:rowData:columnData)\\n : column.dataType === \\\"number\\\"\\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\\n : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\\n : column.dataType === 'currency'\\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\\n : column.dataType === 'percent'\\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\\n : value\\n }}
    \\n {{ value ? \\\"check\\\" : \\\"close\\\" }}\\n \\n
    \\n\\n
    {{\\n !isEmptyAddRowCell ? value : (column.header || column.field)\\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 {{ currencyCodeSymbol }}\\n \\n {{ currencyCodeSymbol }}\\n \\n \\n \\n \\n \\n {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} \\n \\n \\n\\n\\n\\n\\n\\n\\n error\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\\n\\n
    \\n {{grid.resourceStrings.igx_grid_required_validation_error}}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.minlength.requiredLength }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.maxlength.requiredLength }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.min.min }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.max.max }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_email_validation_error }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_pattern_validation_error}}\\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i5.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i5.NumberValueAccessor, selector: \"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]\" }, { kind: \"directive\", type: i5.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i5.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"component\", type: IgxDatePickerComponent, selector: \"igx-date-picker\", inputs: [\"hideOutsideDays\", \"displayMonthsCount\", \"showWeekNumbers\", \"formatter\", \"headerOrientation\", \"todayButtonLabel\", \"cancelButtonLabel\", \"spinLoop\", \"spinDelta\", \"outlet\", \"id\", \"formatViews\", \"disabledDates\", \"specialDates\", \"calendarFormat\", \"value\", \"minValue\", \"maxValue\", \"resourceStrings\", \"readOnly\"], outputs: [\"valueChange\", \"validationFailed\"] }, { kind: \"component\", type: IgxInputGroupComponent, selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: IgxInputDirective, selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: IgxPrefixDirective, selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"directive\", type: IgxSuffixDirective, selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxFocusDirective, selector: \"[igxFocus]\", inputs: [\"igxFocus\"], exportAs: [\"igxFocus\"] }, { kind: \"directive\", type: IgxTextHighlightDirective, selector: \"[igxTextHighlight]\", inputs: [\"cssClass\", \"activeCssClass\", \"containerClass\", \"groupName\", \"value\", \"row\", \"column\", \"metadata\"] }, { kind: \"directive\", type: IgxTextSelectionDirective, selector: \"[igxTextSelection]\", inputs: [\"igxTextSelection\"], exportAs: [\"igxTextSelection\"] }, { kind: \"component\", type: IgxCheckboxComponent, selector: \"igx-checkbox\", inputs: [\"id\", \"labelId\", \"value\", \"name\", \"tabindex\", \"labelPosition\", \"disableRipple\", \"required\", \"aria-labelledby\", \"aria-label\", \"indeterminate\", \"checked\", \"disabled\", \"invalid\", \"readonly\", \"disableTransitions\"], outputs: [\"change\"] }, { kind: \"component\", type: IgxChipComponent, selector: \"igx-chip\", inputs: [\"id\", \"tabIndex\", \"data\", \"draggable\", \"animateOnRelease\", \"hideBaseOnDrag\", \"removable\", \"removeIcon\", \"selectable\", \"selectIcon\", \"disabled\", \"selected\", \"color\", \"resourceStrings\"], outputs: [\"selectedChange\", \"moveStart\", \"moveEnd\", \"remove\", \"chipClick\", \"selectedChanging\", \"selectedChanged\", \"keyDown\", \"dragEnter\", \"dragLeave\", \"dragOver\", \"dragDrop\"] }, { kind: \"component\", type: IgxTimePickerComponent, selector: \"igx-time-picker\", inputs: [\"id\", \"displayFormat\", \"inputFormat\", \"mode\", \"minValue\", \"maxValue\", \"spinLoop\", \"formatter\", \"headerOrientation\", \"readOnly\", \"value\", \"resourceStrings\", \"okButtonLabel\", \"cancelButtonLabel\", \"itemsDelta\"], outputs: [\"selected\", \"valueChange\", \"validationFailed\"] }, { kind: \"directive\", type: IgxDateTimeEditorDirective, selector: \"[igxDateTimeEditor]\", inputs: [\"locale\", \"minValue\", \"maxValue\", \"spinLoop\", \"displayFormat\", \"igxDateTimeEditor\", \"value\", \"spinDelta\"], outputs: [\"valueChange\", \"validationFailed\"], exportAs: [\"igxDateTimeEditor\"] }, { kind: \"directive\", type: IgxTooltipDirective, selector: \"[igxTooltip]\", inputs: [\"context\", \"id\"], exportAs: [\"tooltip\"] }, { kind: \"directive\", type: IgxTooltipTargetDirective, selector: \"[igxTooltipTarget]\", inputs: [\"showDelay\", \"hideDelay\", \"tooltipDisabled\", \"igxTooltipTarget\", \"tooltip\"], outputs: [\"tooltipShow\", \"tooltipHide\"], exportAs: [\"tooltipTarget\"] }, { kind: \"directive\", type: i5.FormControlDirective, selector: \"[formControl]\", inputs: [\"formControl\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"], exportAs: [\"ngForm\"] }, { kind: \"directive\", type: i5.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"pipe\", type: IgxGridCellImageAltPipe, name: \"igxCellImageAlt\" }, { kind: \"pipe\", type: IgxStringReplacePipe, name: \"igxStringReplace\" }, { kind: \"pipe\", type: IgxColumnFormatterPipe, name: \"columnFormatter\" }, { kind: \"pipe\", type: i1$1.DecimalPipe, name: \"number\" }, { kind: \"pipe\", type: i1$1.PercentPipe, name: \"percent\" }, { kind: \"pipe\", type: i1$1.CurrencyPipe, name: \"currency\" }, { kind: \"pipe\", type: i1$1.DatePipe, name: \"date\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridCellComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-hierarchical-grid-cell', providers: [HammerGesturesManager], template: \"\\n {{ grid.resourceStrings.igx_grid_pinned_row_indicator }}\\n\\n\\n
    {{\\n formatter\\n ? (value | columnFormatter:formatter:rowData:columnData)\\n : column.dataType === \\\"number\\\"\\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\\n : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\\n : column.dataType === 'currency'\\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\\n : column.dataType === 'percent'\\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\\n : value\\n }}
    \\n {{ value ? \\\"check\\\" : \\\"close\\\" }}\\n \\n
    \\n\\n
    {{\\n !isEmptyAddRowCell ? value : (column.header || column.field)\\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 {{ currencyCodeSymbol }}\\n \\n {{ currencyCodeSymbol }}\\n \\n \\n \\n \\n \\n {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} \\n \\n \\n\\n\\n\\n\\n\\n\\n error\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\\n\\n
    \\n {{grid.resourceStrings.igx_grid_required_validation_error}}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.minlength.requiredLength }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.maxlength.requiredLength }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.min.min }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.max.max }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_email_validation_error }}\\n
    \\n
    \\n {{grid.resourceStrings.igx_grid_pattern_validation_error}}\\n
    \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: IgxGridSelectionService }, { type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }, { type: IgxOverlayService, decorators: [{\n type: Inject,\n args: [IgxOverlayService]\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: HammerGesturesManager }, { type: PlatformUtil }];\n } });\n\nclass IgxHierarchicalRowComponent extends IgxRowDirective {\n constructor() {\n super(...arguments);\n this.expanderClass = 'igx-grid__hierarchical-expander';\n this.rolActionClass = 'igx-grid__tr-action';\n /**\n * @hidden\n * @internal\n */\n this.select = () => {\n this.grid.selectRows([this.key]);\n };\n /**\n * @hidden\n * @internal\n */\n this.deselect = () => {\n this.grid.deselectRows([this.key]);\n };\n }\n /**\n * @hidden\n */\n get expanderClassResolved() {\n return {\n [`${this.expanderClass} ${this.rolActionClass}`]: !this.pinned || this.disabled,\n [`${this.expanderClass}--empty`]: this.pinned && !this.disabled\n };\n }\n get viewIndex() {\n return this.index + this.grid.page * this.grid.perPage;\n }\n /**\n * Returns whether the row is expanded.\n * ```typescript\n * const RowExpanded = this.grid1.rowList.first.expanded;\n * ```\n */\n get expanded() {\n return this.grid.gridAPI.get_row_expansion_state(this.data);\n }\n /**\n * @hidden\n */\n get expandedClass() {\n return this.expanded && !this.pinned;\n }\n get hasChildren() {\n return !!this.grid.childLayoutKeys.length;\n }\n /**\n * @hidden\n */\n get highlighted() {\n return this.grid && this.grid.highlightedRowID === this.key;\n }\n /**\n * @hidden\n */\n expanderClick(event) {\n event.stopPropagation();\n this.toggle();\n }\n /**\n * Toggles the hierarchical row.\n * ```typescript\n * this.grid1.rowList.first.toggle()\n * ```\n */\n toggle() {\n if (this.added) {\n return;\n }\n // K.D. 28 Feb, 2022 #10634 Don't trigger endEdit/commit upon row expansion state change\n // this.endEdit(this.grid.rootGrid);\n this.grid.gridAPI.set_row_expansion_state(this.key, !this.expanded);\n this.grid.cdr.detectChanges();\n }\n /**\n * @hidden\n */\n get iconTemplate() {\n let expandable = true;\n if (this.grid.hasChildrenKey) {\n expandable = this.data[this.grid.hasChildrenKey];\n }\n if (!expandable || (this.pinned && !this.disabled)) {\n return this.defaultEmptyTemplate;\n }\n if (this.expanded) {\n return this.grid.rowExpandedIndicatorTemplate || this.defaultExpandedTemplate;\n }\n else {\n return this.grid.rowCollapsedIndicatorTemplate || this.defaultCollapsedTemplate;\n }\n }\n // TODO: consider moving into CRUD\n endEdit(grid) {\n if (grid.gridAPI.crudService.cellInEditMode) {\n grid.gridAPI.crudService.endEdit();\n }\n grid.gridAPI.getChildGrids(true).forEach(g => {\n if (g.gridAPI.crudService.cellInEditMode) {\n g.gridAPI.crudService.endEdit();\n }\n });\n }\n}\nIgxHierarchicalRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxHierarchicalRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxHierarchicalRowComponent, selector: \"igx-hierarchical-grid-row\", host: { properties: { \"class.igx-grid__tr--expanded\": \"this.expandedClass\", \"class.igx-grid__tr--highlighted\": \"this.highlighted\" } }, providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxHierarchicalRowComponent) }], viewQueries: [{ propertyName: \"expander\", first: true, predicate: [\"expander\"], descendants: true, read: ElementRef }, { propertyName: \"defaultExpandedTemplate\", first: true, predicate: [\"defaultExpandedTemplate\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"defaultEmptyTemplate\", first: true, predicate: [\"defaultEmptyTemplate\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"defaultCollapsedTemplate\", first: true, predicate: [\"defaultCollapsedTemplate\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"_cells\", predicate: i0.forwardRef(function () { return IgxHierarchicalGridCellComponent; }), descendants: true, read: IgxHierarchicalGridCellComponent }], usesInheritance: true, ngImport: i0, template: \"\\n\\n expand_more\\n\\n\\n\\n chevron_right\\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 0 && grid.isPinningToStart\\\">\\n \\n \\n\\n \\n \\n \\n \\n\\n 0 && !grid.isPinningToStart\\\">\\n \\n \\n\\n \\n
    \\n \\n \\n
    \\n
    \\n\\n \\n \\n \\n \\n
    \\n\", dependencies: [{ kind: \"directive\", type: IgxRowDragDirective, selector: \"[igxRowDrag]\", inputs: [\"igxRowDrag\"] }, { kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxGridForOfDirective, selector: \"[igxGridFor][igxGridForOf]\", inputs: [\"igxGridForOf\", \"igxGridForOfUniqueSizeCache\", \"igxGridForOfVariableSizes\"], outputs: [\"dataChanging\"] }, { kind: \"component\", type: IgxCheckboxComponent, selector: \"igx-checkbox\", inputs: [\"id\", \"labelId\", \"value\", \"name\", \"tabindex\", \"labelPosition\", \"disableRipple\", \"required\", \"aria-labelledby\", \"aria-label\", \"indeterminate\", \"checked\", \"disabled\", \"invalid\", \"readonly\", \"disableTransitions\"], outputs: [\"change\"] }, { kind: \"component\", type: IgxHierarchicalGridCellComponent, selector: \"igx-hierarchical-grid-cell\" }, { kind: \"pipe\", type: IgxGridNotGroupedPipe, name: \"igxNotGrouped\" }, { kind: \"pipe\", type: IgxGridCellStylesPipe, name: \"igxCellStyles\" }, { kind: \"pipe\", type: IgxGridCellStyleClassesPipe, name: \"igxCellStyleClasses\" }, { kind: \"pipe\", type: IgxGridDataMapperPipe, name: \"dataMapper\" }, { kind: \"pipe\", type: IgxGridTransactionStatePipe, name: \"transactionState\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalRowComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-hierarchical-grid-row', providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxHierarchicalRowComponent) }], template: \"\\n\\n expand_more\\n\\n\\n\\n chevron_right\\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 0 && grid.isPinningToStart\\\">\\n \\n \\n\\n \\n \\n \\n \\n\\n 0 && !grid.isPinningToStart\\\">\\n \\n \\n\\n \\n
    \\n \\n \\n
    \\n
    \\n\\n \\n \\n \\n \\n
    \\n\" }]\n }], propDecorators: { expander: [{\n type: ViewChild,\n args: ['expander', { read: ElementRef }]\n }], _cells: [{\n type: ViewChildren,\n args: [forwardRef(() => IgxHierarchicalGridCellComponent), { read: IgxHierarchicalGridCellComponent }]\n }], defaultExpandedTemplate: [{\n type: ViewChild,\n args: ['defaultExpandedTemplate', { read: TemplateRef, static: true }]\n }], defaultEmptyTemplate: [{\n type: ViewChild,\n args: ['defaultEmptyTemplate', { read: TemplateRef, static: true }]\n }], defaultCollapsedTemplate: [{\n type: ViewChild,\n args: ['defaultCollapsedTemplate', { read: TemplateRef, static: true }]\n }], expandedClass: [{\n type: HostBinding,\n args: ['class.igx-grid__tr--expanded']\n }], highlighted: [{\n type: HostBinding,\n args: ['class.igx-grid__tr--highlighted']\n }] } });\n\n/**\n * @hidden\n */\nclass IgxGridHierarchicalPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(collection, state = new Map(), id, primaryKey, childKeys, _pipeTrigger) {\n if (childKeys.length === 0) {\n return collection;\n }\n if (this.grid.verticalScrollContainer.isRemote) {\n return collection;\n }\n const result = this.addHierarchy(this.grid, cloneArray(collection), state, primaryKey, childKeys);\n return result;\n }\n addHierarchy(grid, data, state, primaryKey, childKeys) {\n const result = [];\n data.forEach((v) => {\n result.push(v);\n const childGridsData = {};\n childKeys.forEach((childKey) => {\n if (!v[childKey]) {\n v[childKey] = [];\n }\n const hasNestedPath = childKey === null || childKey === void 0 ? void 0 : childKey.includes('.');\n const childData = !hasNestedPath ? v[childKey] : resolveNestedPath(v, childKey);\n childGridsData[childKey] = childData;\n });\n if (grid.gridAPI.get_row_expansion_state(v)) {\n result.push({ rowID: primaryKey ? v[primaryKey] : v, childGridsData });\n }\n });\n return result;\n }\n}\nIgxGridHierarchicalPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridHierarchicalPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridHierarchicalPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridHierarchicalPipe, name: \"gridHierarchical\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridHierarchicalPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'gridHierarchical' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n/**\n * @hidden\n */\nclass IgxGridHierarchicalPagingPipe {\n constructor(grid) {\n this.grid = grid;\n }\n transform(collection, enabled, page = 0, perPage = 15, _id, _pipeTrigger) {\n if (!enabled || this.grid.pagingMode !== GridPagingMode.Local) {\n return collection;\n }\n const state = {\n index: page,\n recordsPerPage: perPage\n };\n const total = this.grid._totalRecords >= 0 ? this.grid._totalRecords : collection.length;\n const result = DataUtil.page(cloneArray(collection), state, total);\n this.grid.pagingState = state;\n return result;\n }\n}\nIgxGridHierarchicalPagingPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridHierarchicalPagingPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe });\nIgxGridHierarchicalPagingPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridHierarchicalPagingPipe, name: \"gridHierarchicalPaging\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxGridHierarchicalPagingPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'gridHierarchicalPaging' }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_GRID_BASE]\n }] }];\n } });\n\nlet NEXT_ID$5 = 0;\nclass IgxChildGridRowComponent {\n /**\n * @hidden\n */\n get parentHasScroll() {\n return !this.parentGrid.verticalScrollContainer.dc.instance.notVirtual;\n }\n /**\n * Get a reference to the grid that contains the selected row.\n *\n * ```typescript\n * handleRowSelection(event) {\n * // the grid on which the rowSelected event was triggered\n * const grid = event.row.grid;\n * }\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n // TODO: Refactor\n get parentGrid() {\n return this.gridAPI.grid;\n }\n get level() {\n return this.layout.level;\n }\n /**\n * The native DOM element representing the row. Could be null in certain environments.\n *\n * ```typescript\n * // get the nativeElement of the second selected row\n * let selectedRowNativeElement = this.grid.selectedRows[1].nativeElement;\n * ```\n */\n get nativeElement() {\n return this.element.nativeElement;\n }\n constructor(gridAPI, element, cdr) {\n this.gridAPI = gridAPI;\n this.element = element;\n this.cdr = cdr;\n /**\n * The data passed to the row component.\n *\n * ```typescript\n * // get the row data for the first selected row\n * let selectedRowData = this.grid.selectedRows[0].data;\n * ```\n */\n this.data = [];\n /**\n * Returns whether the row is expanded.\n * ```typescript\n * const RowExpanded = this.grid1.rowList.first.expanded;\n * ```\n */\n this.expanded = false;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n const ref = this.container.createComponent(IgxHierarchicalGridComponent, { injector: this.container.injector });\n this.hGrid = ref.instance;\n this.hGrid.data = this.data.childGridsData[this.layout.key];\n this.layout.layoutChange.subscribe((ch) => {\n this._handleLayoutChanges(ch);\n });\n const changes = this.layout.initialChanges;\n changes.forEach(change => {\n this._handleLayoutChanges(change);\n });\n this.hGrid.parent = this.parentGrid;\n this.hGrid.parentIsland = this.layout;\n this.hGrid.childRow = this;\n // handler logic that re-emits hgrid events on the row island\n this.setupEventEmitters();\n this.layout.gridCreated.emit({\n owner: this.layout,\n parentID: this.data.rowID,\n grid: this.hGrid\n });\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this.hGrid.childLayoutList = this.layout.children;\n const layouts = this.hGrid.childLayoutList.toArray();\n layouts.forEach((l) => this.hGrid.gridAPI.registerChildRowIsland(l));\n this.parentGrid.gridAPI.registerChildGrid(this.data.rowID, this.layout.key, this.hGrid);\n this.layout.rowIslandAPI.registerChildGrid(this.data.rowID, this.hGrid);\n this.layout.gridInitialized.emit({\n owner: this.layout,\n parentID: this.data.rowID,\n grid: this.hGrid\n });\n this.hGrid.cdr.detectChanges();\n }\n setupEventEmitters() {\n const destructor = takeUntil(this.hGrid.destroy$);\n const mirror = reflectComponentType(IgxGridComponent);\n // exclude outputs related to two-way binding functionality\n const inputNames = mirror.inputs.map(input => input.propName);\n const outputs = mirror.outputs.filter(o => {\n const matchingInputPropName = o.propName.slice(0, o.propName.indexOf('Change'));\n return inputNames.indexOf(matchingInputPropName) === -1;\n });\n // TODO: Skip the `rendered` output. Rendered should be called once per grid.\n outputs.filter(o => o.propName !== 'rendered').forEach(output => {\n if (this.hGrid[output.propName]) {\n this.hGrid[output.propName].pipe(destructor).subscribe((args) => {\n if (!args) {\n args = {};\n }\n args.owner = this.hGrid;\n this.layout[output.propName].emit(args);\n });\n }\n });\n }\n _handleLayoutChanges(changes) {\n for (const change in changes) {\n if (changes.hasOwnProperty(change)) {\n this.hGrid[change] = changes[change].currentValue;\n }\n }\n }\n}\nIgxChildGridRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxChildGridRowComponent, deps: [{ token: IGX_GRID_SERVICE_BASE }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxChildGridRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxChildGridRowComponent, selector: \"igx-child-grid-row\", inputs: { layout: \"layout\", parentGridID: \"parentGridID\", data: \"data\", index: \"index\" }, host: { properties: { \"attr.aria-level\": \"this.level\" } }, viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: \"
    \\n \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxChildGridRowComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-child-grid-row', template: \"
    \\n \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: IgxHierarchicalGridAPIService, decorators: [{\n type: Inject,\n args: [IGX_GRID_SERVICE_BASE]\n }] }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }];\n }, propDecorators: { layout: [{\n type: Input\n }], parentGridID: [{\n type: Input\n }], data: [{\n type: Input\n }], index: [{\n type: Input\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], level: [{\n type: HostBinding,\n args: ['attr.aria-level']\n }] } });\nclass IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirective {\n constructor() {\n super(...arguments);\n /**\n * @hidden @internal\n */\n this.role = 'grid';\n /**\n * @hidden\n */\n this.childLayoutKeys = [];\n /**\n * @hidden\n */\n this.highlightedRowID = null;\n /**\n * @hidden\n */\n this.updateOnRender = false;\n /**\n * @hidden\n */\n this.parent = null;\n this.h_id = `igx-hierarchical-grid-${NEXT_ID$5++}`;\n this.childGridTemplates = new Map();\n this.scrollTop = 0;\n this.scrollLeft = 0;\n }\n // @ViewChild('headerHierarchyExpander', { read: ElementRef, static: true })\n get headerHierarchyExpander() {\n var _a;\n return (_a = this.theadRow) === null || _a === void 0 ? void 0 : _a.headerHierarchyExpander;\n }\n /**\n * Gets/Sets the value of the `id` attribute.\n *\n * @remarks\n * If not provided it will be automatically generated.\n * @example\n * ```html\n * \n * ```\n */\n get id() {\n return this.h_id;\n }\n set id(value) {\n this.h_id = value;\n }\n /**\n * An @Input property that lets you fill the `IgxHierarchicalGridComponent` with an array of data.\n * ```html\n * \n * ```\n *\n * @memberof IgxHierarchicalGridComponent\n */\n set data(value) {\n this._data = value || [];\n this.summaryService.clearSummaryCache();\n if (!this._init) {\n this.validation.updateAll(this._data);\n }\n if (this.shouldGenerate) {\n this.setupColumns();\n this.reflow();\n }\n this.cdr.markForCheck();\n if (this.parent && (this.height === null || this.height.indexOf('%') !== -1)) {\n // If the height will change based on how much data there is, recalculate sizes in igxForOf.\n this.notifyChanges(true);\n }\n }\n /**\n * Returns an array of data set to the `IgxHierarchicalGridComponent`.\n * ```typescript\n * let filteredData = this.grid.filteredData;\n * ```\n *\n * @memberof IgxHierarchicalGridComponent\n */\n get data() {\n return this._data;\n }\n /** @hidden @internal */\n get paginator() {\n var _a, _b;\n const id = this.id;\n return (!this.parentIsland && ((_a = this.paginationComponents) === null || _a === void 0 ? void 0 : _a.first)) || ((_b = this.rootGrid.paginatorList) === null || _b === void 0 ? void 0 : _b.find((pg) => { var _a; return ((_a = pg.nativeElement.offsetParent) === null || _a === void 0 ? void 0 : _a.id) === id; }));\n }\n /** @hidden @internal */\n get excelStyleFilteringComponent() {\n return this.parentIsland ?\n this.parentIsland.excelStyleFilteringComponents.first :\n super.excelStyleFilteringComponent;\n }\n /**\n * Gets/Sets the total number of records in the data source.\n *\n * @remarks\n * This property is required for remote grid virtualization to function when it is bound to remote data.\n * @example\n * ```typescript\n * const itemCount = this.grid1.totalItemCount;\n * this.grid1.totalItemCount = 55;\n * ```\n */\n set totalItemCount(count) {\n this.verticalScrollContainer.totalItemCount = count;\n this.cdr.detectChanges();\n }\n get totalItemCount() {\n return this.verticalScrollContainer.totalItemCount;\n }\n /**\n * Sets if all immediate children of the `IgxHierarchicalGridComponent` should be expanded/collapsed.\n * Defult value is false.\n * ```html\n * \n * ```\n *\n * @memberof IgxHierarchicalGridComponent\n */\n set expandChildren(value) {\n this._defaultExpandState = value;\n this.expansionStates = new Map();\n }\n /**\n * Gets if all immediate children of the `IgxHierarchicalGridComponent` previously have been set to be expanded/collapsed.\n * If previously set and some rows have been manually expanded/collapsed it will still return the last set value.\n * ```typescript\n * const expanded = this.grid.expandChildren;\n * ```\n *\n * @memberof IgxHierarchicalGridComponent\n */\n get expandChildren() {\n return this._defaultExpandState;\n }\n /**\n * @deprecated in version 12.1.0. Use `getCellByColumn` or `getCellByKey` instead\n *\n * Returns a `CellType` object that matches the conditions.\n *\n * @example\n * ```typescript\n * const myCell = this.grid1.getCellByColumnVisibleIndex(2,\"UnitPrice\");\n * ```\n * @param rowIndex\n * @param index\n */\n getCellByColumnVisibleIndex(rowIndex, index) {\n const row = this.getRowByIndex(rowIndex);\n const column = this.columns.find((col) => col.visibleIndex === index);\n if (row && row instanceof IgxHierarchicalGridRow && column) {\n return new IgxGridCell(this, rowIndex, column.field);\n }\n }\n /**\n * Gets the unique identifier of the parent row. It may be a `string` or `number` if `primaryKey` of the\n * parent grid is set or an object reference of the parent record otherwise.\n * ```typescript\n * const foreignKey = this.grid.foreignKey;\n * ```\n *\n * @memberof IgxHierarchicalGridComponent\n */\n get foreignKey() {\n if (!this.parent) {\n return null;\n }\n return this.parent.gridAPI.getParentRowId(this);\n }\n /**\n * @hidden\n */\n get hasExpandableChildren() {\n return !!this.childLayoutKeys.length;\n }\n /**\n * @hidden\n */\n get resolveRowEditContainer() {\n if (this.parentIsland && this.parentIsland.rowEditCustom) {\n return this.parentIsland.rowEditContainer;\n }\n return this.rowEditContainer;\n }\n /**\n * @hidden\n */\n get resolveRowEditActions() {\n return this.parentIsland ? this.parentIsland.rowEditActionsTemplate : this.rowEditActionsTemplate;\n }\n /**\n * @hidden\n */\n get resolveRowEditText() {\n return this.parentIsland ? this.parentIsland.rowEditTextTemplate : this.rowEditTextTemplate;\n }\n /** @hidden */\n hideActionStrip() {\n if (!this.parent) {\n // hide child layout actions strips when\n // moving outside root grid.\n super.hideActionStrip();\n this.allLayoutList.forEach(ri => {\n var _a;\n (_a = ri.actionStrip) === null || _a === void 0 ? void 0 : _a.hide();\n });\n }\n }\n /**\n * @hidden\n */\n get parentRowOutletDirective() {\n // Targeting parent outlet in order to prevent hiding when outlet\n // is present at a child grid and is attached to a row.\n return this.parent ? this.parent.rowOutletDirective : this.outlet;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n // this.expansionStatesChange.pipe(takeUntil(this.destroy$)).subscribe((value: Map) => {\n // const res = Array.from(value.entries()).filter(({1: v}) => v === true).map(([k]) => k);\n // });\n this.batchEditing = !!this.rootGrid.batchEditing;\n if (this.rootGrid !== this) {\n this.rootGrid.batchEditingChange.pipe(takeUntil(this.destroy$)).subscribe((val) => {\n this.batchEditing = val;\n });\n }\n super.ngOnInit();\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n super.ngAfterViewInit();\n this.zone.runOutsideAngular(() => {\n this.verticalScrollContainer.getScroll().addEventListener('scroll', this.hg_verticalScrollHandler.bind(this));\n this.headerContainer.getScroll().addEventListener('scroll', this.hg_horizontalScrollHandler.bind(this));\n });\n this.verticalScrollContainer.beforeViewDestroyed.pipe(takeUntil(this.destroy$)).subscribe((view) => {\n const rowData = view.context.$implicit;\n if (this.isChildGridRecord(rowData)) {\n const cachedData = this.childGridTemplates.get(rowData.rowID);\n if (cachedData) {\n const tmlpOutlet = cachedData.owner;\n tmlpOutlet._viewContainerRef.detach(0);\n }\n }\n });\n if (this.parent) {\n this._displayDensity = this.rootGrid.displayDensity;\n this.summaryService.summaryHeight = 0;\n this.rootGrid.densityChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this._displayDensity = this.rootGrid.displayDensity;\n this.summaryService.summaryHeight = 0;\n this.notifyChanges(true);\n this.cdr.markForCheck();\n });\n this.childLayoutKeys = this.parentIsland.children.map((item) => item.key);\n }\n this.actionStrip = this.parentIsland ? this.parentIsland.actionStrip : this.actionStrip;\n this.headSelectorsTemplates = this.parentIsland ?\n this.parentIsland.headSelectorsTemplates :\n this.headSelectorsTemplates;\n this.rowSelectorsTemplates = this.parentIsland ?\n this.parentIsland.rowSelectorsTemplates :\n this.rowSelectorsTemplates;\n this.dragIndicatorIconTemplate = this.parentIsland ?\n this.parentIsland.dragIndicatorIconTemplate :\n this.dragIndicatorIconTemplate;\n this.rowExpandedIndicatorTemplate = this.rootGrid.rowExpandedIndicatorTemplate;\n this.rowCollapsedIndicatorTemplate = this.rootGrid.rowCollapsedIndicatorTemplate;\n this.headerCollapseIndicatorTemplate = this.rootGrid.headerCollapseIndicatorTemplate;\n this.headerExpandIndicatorTemplate = this.rootGrid.headerExpandIndicatorTemplate;\n this.excelStyleHeaderIconTemplate = this.rootGrid.excelStyleHeaderIconTemplate;\n this.sortAscendingHeaderIconTemplate = this.rootGrid.sortAscendingHeaderIconTemplate;\n this.sortDescendingHeaderIconTemplate = this.rootGrid.sortDescendingHeaderIconTemplate;\n this.sortHeaderIconTemplate = this.rootGrid.sortHeaderIconTemplate;\n this.hasChildrenKey = this.parentIsland ?\n this.parentIsland.hasChildrenKey || this.rootGrid.hasChildrenKey :\n this.rootGrid.hasChildrenKey;\n this.showExpandAll = this.parentIsland ?\n this.parentIsland.showExpandAll : this.rootGrid.showExpandAll;\n }\n get outletDirective() {\n return this.rootGrid.outlet;\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n this.updateColumnList(false);\n this.childLayoutKeys = this.parent ?\n this.parentIsland.children.map((item) => item.key) :\n this.childLayoutKeys = this.childLayoutList.map((item) => item.key);\n this.childLayoutList.notifyOnChanges();\n this.childLayoutList.changes.pipe(takeUntil(this.destroy$)).subscribe(() => this.onRowIslandChange());\n super.ngAfterContentInit();\n }\n /**\n * Returns the `RowType` by index.\n *\n * @example\n * ```typescript\n * const myRow = this.grid1.getRowByIndex(1);\n * ```\n * @param index\n */\n getRowByIndex(index) {\n if (index < 0 || index >= this.dataView.length) {\n return undefined;\n }\n return this.createRow(index);\n }\n /**\n * Returns the `RowType` by key.\n *\n * @example\n * ```typescript\n * const myRow = this.grid1.getRowByKey(1);\n * ```\n * @param key\n */\n getRowByKey(key) {\n const data = this.dataView;\n const rec = this.primaryKey ?\n data.find(record => record[this.primaryKey] === key) :\n data.find(record => record === key);\n const index = data.indexOf(rec);\n if (index < 0 || index > data.length) {\n return undefined;\n }\n return new IgxHierarchicalGridRow(this, index, rec);\n }\n /**\n * @hidden @internal\n */\n allRows() {\n return this.dataView.map((rec, index) => this.createRow(index));\n }\n /**\n * Returns the collection of `IgxHierarchicalGridRow`s for current page.\n *\n * @hidden @internal\n */\n dataRows() {\n return this.allRows().filter(row => row instanceof IgxHierarchicalGridRow);\n }\n /**\n * Returns an array of the selected `IgxGridCell`s.\n *\n * @example\n * ```typescript\n * const selectedCells = this.grid.selectedCells;\n * ```\n */\n get selectedCells() {\n return this.dataRows().map((row) => row.cells.filter((cell) => cell.selected))\n .reduce((a, b) => a.concat(b), []);\n }\n /**\n * Returns a `CellType` object that matches the conditions.\n *\n * @example\n * ```typescript\n * const myCell = this.grid1.getCellByColumn(2, \"UnitPrice\");\n * ```\n * @param rowIndex\n * @param columnField\n */\n getCellByColumn(rowIndex, columnField) {\n const row = this.getRowByIndex(rowIndex);\n const column = this.columns.find((col) => col.field === columnField);\n if (row && row instanceof IgxHierarchicalGridRow && column) {\n return new IgxGridCell(this, rowIndex, columnField);\n }\n }\n /**\n * Returns a `CellType` object that matches the conditions.\n *\n * @remarks\n * Requires that the primaryKey property is set.\n * @example\n * ```typescript\n * grid.getCellByKey(1, 'index');\n * ```\n * @param rowSelector match any rowID\n * @param columnField\n */\n getCellByKey(rowSelector, columnField) {\n const row = this.getRowByKey(rowSelector);\n const column = this.columns.find((col) => col.field === columnField);\n if (row && column) {\n return new IgxGridCell(this, row.index, columnField);\n }\n }\n pinRow(rowID, index) {\n const row = this.getRowByKey(rowID);\n return super.pinRow(rowID, index, row);\n }\n unpinRow(rowID) {\n const row = this.getRowByKey(rowID);\n return super.unpinRow(rowID, row);\n }\n /**\n * @hidden @internal\n */\n dataLoading(event) {\n this.dataPreLoad.emit(event);\n }\n /** @hidden */\n featureColumnsWidth() {\n return super.featureColumnsWidth(this.headerHierarchyExpander);\n }\n /**\n * @hidden\n */\n onRowIslandChange() {\n if (this.parent) {\n this.childLayoutKeys = this.parentIsland.children.filter(item => !item._destroyed).map((item) => item.key);\n }\n else {\n this.childLayoutKeys = this.childLayoutList.filter(item => !item._destroyed).map((item) => item.key);\n }\n if (!this.cdr.destroyed) {\n this.cdr.detectChanges();\n }\n }\n ngOnDestroy() {\n if (!this.parent) {\n this.gridAPI.getChildGrids(true).forEach((grid) => {\n if (!grid.childRow.cdr.destroyed) {\n grid.childRow.cdr.destroy();\n }\n });\n }\n if (this.parent && this.selectionService.activeElement) {\n // in case selection is in destroyed child grid, selection should be cleared.\n this._clearSeletionHighlights();\n }\n super.ngOnDestroy();\n }\n /**\n * @hidden\n */\n isRowHighlighted(rowData) {\n return this.highlightedRowID === rowData.rowID;\n }\n /**\n * @hidden\n */\n isHierarchicalRecord(record) {\n if (this.isGhostRecord(record)) {\n record = record.recordRef;\n }\n return this.childLayoutList.length !== 0 && record[this.childLayoutList.first.key];\n }\n /**\n * @hidden\n */\n isChildGridRecord(record) {\n // Can be null when there is defined layout but no child data was found\n return (record === null || record === void 0 ? void 0 : record.childGridsData) !== undefined;\n }\n /**\n * @hidden\n */\n trackChanges(index, rec) {\n if (rec.childGridsData !== undefined) {\n // if is child rec\n return rec.rowID;\n }\n return rec;\n }\n /**\n * @hidden\n */\n getContext(rowData, rowIndex, pinned) {\n if (this.isChildGridRecord(rowData)) {\n const cachedData = this.childGridTemplates.get(rowData.rowID);\n if (cachedData) {\n const view = cachedData.view;\n const tmlpOutlet = cachedData.owner;\n return {\n $implicit: rowData,\n moveView: view,\n owner: tmlpOutlet,\n index: this.dataView.indexOf(rowData)\n };\n }\n else {\n // child rows contain unique grids, hence should have unique templates\n return {\n $implicit: rowData,\n templateID: {\n type: 'childRow',\n id: rowData.rowID\n },\n index: this.dataView.indexOf(rowData)\n };\n }\n }\n else {\n return {\n $implicit: this.isGhostRecord(rowData) ? rowData.recordRef : rowData,\n templateID: {\n type: 'dataRow',\n id: null\n },\n index: this.getDataViewIndex(rowIndex, pinned),\n disabled: this.isGhostRecord(rowData)\n };\n }\n }\n /**\n * @hidden\n */\n get rootGrid() {\n let currGrid = this;\n while (currGrid.parent) {\n currGrid = currGrid.parent;\n }\n return currGrid;\n }\n /**\n * @hidden\n */\n get iconTemplate() {\n const expanded = this.hasExpandedRecords() && this.hasExpandableChildren;\n if (!expanded && this.showExpandAll) {\n return this.headerCollapseIndicatorTemplate || this.defaultCollapsedTemplate;\n }\n else {\n return this.headerExpandIndicatorTemplate || this.defaultExpandedTemplate;\n }\n }\n /**\n * @hidden\n * @internal\n */\n getDragGhostCustomTemplate() {\n if (this.parentIsland) {\n return this.parentIsland.getDragGhostCustomTemplate();\n }\n return super.getDragGhostCustomTemplate();\n }\n /**\n * @hidden\n * Gets the visible content height that includes header + tbody + footer.\n * For hierarchical child grid it may be scrolled and not fully visible.\n */\n getVisibleContentHeight() {\n let height = super.getVisibleContentHeight();\n if (this.parent) {\n const rootHeight = this.rootGrid.getVisibleContentHeight();\n const topDiff = this.nativeElement.getBoundingClientRect().top - this.rootGrid.nativeElement.getBoundingClientRect().top;\n height = rootHeight - topDiff > height ? height : rootHeight - topDiff;\n }\n return height;\n }\n /**\n * @hidden\n */\n toggleAll() {\n const expanded = this.hasExpandedRecords() && this.hasExpandableChildren;\n if (!expanded && this.showExpandAll) {\n this.expandAll();\n }\n else {\n this.collapseAll();\n }\n }\n /**\n * @hidden\n * @internal\n */\n hasExpandedRecords() {\n if (this.expandChildren) {\n return true;\n }\n let hasExpandedEntry = false;\n this.expansionStates.forEach(value => {\n if (value) {\n hasExpandedEntry = value;\n }\n });\n return hasExpandedEntry;\n }\n getDefaultExpandState(record) {\n if (this.hasChildrenKey && !record[this.hasChildrenKey]) {\n return false;\n }\n return this.expandChildren;\n }\n /**\n * @hidden\n */\n isExpanded(record) {\n return this.gridAPI.get_row_expansion_state(record);\n }\n /**\n * @hidden\n */\n viewCreatedHandler(args) {\n if (this.isChildGridRecord(args.context.$implicit)) {\n const key = args.context.$implicit.rowID;\n this.childGridTemplates.set(key, args);\n }\n }\n /**\n * @hidden\n */\n viewMovedHandler(args) {\n if (this.isChildGridRecord(args.context.$implicit)) {\n // view was moved, update owner in cache\n const key = args.context.$implicit.rowID;\n const cachedData = this.childGridTemplates.get(key);\n cachedData.owner = args.owner;\n this.childLayoutList.forEach((layout) => {\n const relatedGrid = this.gridAPI.getChildGridByID(layout.key, args.context.$implicit.rowID);\n if (relatedGrid && relatedGrid.updateOnRender) {\n // Detect changes if `expandChildren` has changed when the grid wasn't visible. This is for performance reasons.\n relatedGrid.notifyChanges(true);\n relatedGrid.updateOnRender = false;\n }\n });\n }\n }\n onContainerScroll() {\n this.hideOverlays();\n }\n /**\n * @hidden\n */\n createRow(index, data) {\n let row;\n const dataIndex = this._getDataViewIndex(index);\n const rec = data !== null && data !== void 0 ? data : this.dataView[dataIndex];\n if (!row && rec && !rec.childGridsData) {\n row = new IgxHierarchicalGridRow(this, index, rec);\n }\n return row;\n }\n /** @hidden @internal */\n getChildGrids(inDeph) {\n return this.gridAPI.getChildGrids(inDeph);\n }\n generateDataFields(data) {\n return super.generateDataFields(data).filter((field) => {\n const layoutsList = this.parentIsland ? this.parentIsland.children : this.childLayoutList;\n const keys = layoutsList.map((item) => item.key);\n return keys.indexOf(field) === -1;\n });\n }\n resizeNotifyHandler() {\n // do not trigger reflow if element is detached or if it is child grid.\n if (this.document.contains(this.nativeElement) && !this.parent) {\n this.notifyChanges(true);\n }\n }\n /**\n * @hidden\n */\n initColumns(collection, cb = null) {\n if (this.hasColumnLayouts) {\n // invalid configuration - hierarchical grid should not allow column layouts\n // remove column layouts\n const nonColumnLayoutColumns = this.columns.filter((col) => !col.columnLayout && !col.columnLayoutChild);\n this.updateColumns(nonColumnLayoutColumns);\n }\n super.initColumns(collection, cb);\n }\n setupColumns() {\n if (this.parentIsland && this.parentIsland.childColumns.length > 0 && !this.autoGenerate) {\n this.createColumnsList(this.parentIsland.childColumns.toArray());\n }\n else {\n super.setupColumns();\n }\n }\n getColumnList() {\n const childLayouts = this.parent ? this.childLayoutList : this.allLayoutList;\n const nestedColumns = childLayouts.map((layout) => layout.columnList.toArray());\n const colsArray = [].concat.apply([], nestedColumns);\n if (colsArray.length > 0) {\n const topCols = this.columnList.filter((item) => colsArray.indexOf(item) === -1);\n return topCols;\n }\n else {\n return this.columnList.toArray();\n }\n }\n onColumnsChanged() {\n Promise.resolve().then(() => {\n this.updateColumnList();\n });\n }\n _shouldAutoSize(renderedHeight) {\n if (this.isPercentHeight && this.parent) {\n return true;\n }\n return super._shouldAutoSize(renderedHeight);\n }\n updateColumnList(recalcColSizes = true) {\n const childLayouts = this.parent ? this.childLayoutList : this.allLayoutList;\n const nestedColumns = childLayouts.map((layout) => layout.columnList.toArray());\n const colsArray = [].concat.apply([], nestedColumns);\n const colLength = this.columns.length;\n const topCols = this.columnList.filter((item) => colsArray.indexOf(item) === -1);\n if (topCols.length > 0) {\n this.updateColumns(topCols);\n if (recalcColSizes && this.columns.length !== colLength) {\n this.calculateGridSizes(false);\n }\n }\n }\n _clearSeletionHighlights() {\n [this.rootGrid, ...this.rootGrid.getChildGrids(true)].forEach(grid => {\n grid.selectionService.clear();\n grid.selectionService.activeElement = null;\n grid.nativeElement.classList.remove('igx-grid__tr--highlighted');\n grid.highlightedRowID = null;\n grid.cdr.markForCheck();\n });\n }\n hg_verticalScrollHandler() {\n this.scrollTop = this.verticalScrollContainer.scrollPosition;\n }\n hg_horizontalScrollHandler() {\n this.scrollLeft = this.headerContainer.scrollPosition;\n }\n}\nIgxHierarchicalGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxHierarchicalGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxHierarchicalGridComponent, selector: \"igx-hierarchical-grid\", inputs: { id: \"id\", data: \"data\", expandChildren: \"expandChildren\" }, host: { properties: { \"attr.role\": \"this.role\", \"attr.id\": \"this.id\" } }, providers: [\n IgxGridCRUDService,\n IgxGridValidationService,\n IgxGridSelectionService,\n { provide: IGX_GRID_SERVICE_BASE, useClass: IgxHierarchicalGridAPIService },\n { provide: IGX_GRID_BASE, useExisting: IgxHierarchicalGridComponent },\n IgxGridSummaryService,\n IgxFilteringService,\n IgxHierarchicalGridNavigationService,\n IgxColumnResizingService,\n IgxForOfSyncService,\n IgxForOfScrollSyncService,\n IgxRowIslandAPIService\n ], queries: [{ propertyName: \"toolbarTemplate\", first: true, predicate: IgxGridToolbarDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: \"childLayoutList\", predicate: IgxRowIslandComponent, read: IgxRowIslandComponent }, { propertyName: \"allLayoutList\", predicate: IgxRowIslandComponent, descendants: true, read: IgxRowIslandComponent }, { propertyName: \"paginatorList\", predicate: IgxPaginatorComponent, descendants: true }], viewQueries: [{ propertyName: \"toolbarOutlet\", first: true, predicate: [\"toolbarOutlet\"], descendants: true, read: ViewContainerRef }, { propertyName: \"paginatorOutlet\", first: true, predicate: [\"paginatorOutlet\"], descendants: true, read: ViewContainerRef }, { propertyName: \"hierarchicalRecordTemplate\", first: true, predicate: [\"hierarchical_record_template\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"childTemplate\", first: true, predicate: [\"child_record_template\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"templateOutlets\", predicate: IgxTemplateOutletDirective, descendants: true, read: IgxTemplateOutletDirective }, { propertyName: \"hierarchicalRows\", predicate: IgxChildGridRowComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: \"\\n\\n\\n\\n\\n\\n
    \\n
    \\n \\n 0\\\"\\n [igxColumnMovingDrop]=\\\"headerContainer\\\" [attr.droppable]=\\\"true\\\" id=\\\"left\\\"\\n class=\\\"igx-grid__scroll-on-drag-pinned\\\" [style.left.px]=\\\"pinnedWidth\\\">\\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
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{resourceStrings.igx_grid_snackbar_addrow_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 {{emptyFilteredGridMessage}}\\n \\n \\n \\n \\n\\n\\n\\n \\n {{emptyGridMessage}}\\n \\n \\n \\n \\n\\n\\n\\n \\n\\n\\n\\n
    \\n \\n \\n
    \\n
    \\n\\n\\n unfold_more\\n\\n\\n\\n unfold_less\\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n You have {{ rowChangesCount }} changes in this row and {{ hiddenColumnsCount }} hidden columns\\n\\n\\n \\n \\n\\n\\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n\\n drag_indicator\\n\\n\\n\\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: IgxRowEditTabStopDirective, selector: \"[igxRowEditTabStop]\" }, { kind: \"directive\", type: IgxGridBodyDirective, selector: \"[igxGridBody]\" }, { kind: \"component\", type: IgxGridHeaderRowComponent, selector: \"igx-grid-header-row\", inputs: [\"grid\", \"pinnedColumnCollection\", \"unpinnedColumnCollection\", \"activeDescendant\", \"hasMRL\", \"width\", \"density\"] }, { kind: \"component\", type: IgxGridColumnResizerComponent, selector: \"igx-grid-column-resizer\", inputs: [\"restrictResizerTop\"] }, { kind: \"directive\", type: IgxColumnMovingDropDirective, selector: \"[igxColumnMovingDrop]\", inputs: [\"igxColumnMovingDrop\"] }, { kind: \"directive\", type: IgxGridDragSelectDirective, selector: \"[igxGridDragSelect]\", inputs: [\"igxGridDragSelect\"], outputs: [\"dragStop\", \"dragScroll\"] }, { kind: \"component\", type: IgxSummaryRowComponent, selector: \"igx-grid-summary-row\", inputs: [\"summaries\", \"gridID\", \"index\", \"firstCellIndentation\"] }, { kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }, { kind: \"directive\", type: IgxToggleDirective, selector: \"[igxToggle]\", inputs: [\"id\"], outputs: [\"opened\", \"opening\", \"closed\", \"closing\", \"appended\"], exportAs: [\"toggle\"] }, { kind: \"directive\", type: IgxOverlayOutletDirective, selector: \"[igxOverlayOutlet]\", exportAs: [\"overlay-outlet\"] }, { kind: \"directive\", type: IgxGridForOfDirective, selector: \"[igxGridFor][igxGridForOf]\", inputs: [\"igxGridForOf\", \"igxGridForOfUniqueSizeCache\", \"igxGridForOfVariableSizes\"], outputs: [\"dataChanging\"] }, { kind: \"directive\", type: IgxTemplateOutletDirective, selector: \"[igxTemplateOutlet]\", inputs: [\"igxTemplateOutletContext\", \"igxTemplateOutlet\"], outputs: [\"viewCreated\", \"viewMoved\", \"cachedViewLoaded\", \"beforeViewDetach\"] }, { kind: \"component\", type: IgxCircularProgressBarComponent, selector: \"igx-circular-bar\", inputs: [\"id\", \"isIndeterminate\", \"textVisibility\", \"text\"] }, { kind: \"component\", type: IgxSnackbarComponent, selector: \"igx-snackbar\", inputs: [\"id\", \"actionText\", \"positionSettings\"], outputs: [\"clicked\", \"animationStarted\", \"animationDone\"] }, { kind: \"component\", type: IgxHierarchicalRowComponent, selector: \"igx-hierarchical-grid-row\" }, { kind: \"component\", type: IgxChildGridRowComponent, selector: \"igx-child-grid-row\", inputs: [\"layout\", \"parentGridID\", \"data\", \"index\"] }, { kind: \"pipe\", type: IgxGridSortingPipe, name: \"gridSort\" }, { kind: \"pipe\", type: IgxGridFilteringPipe, name: \"gridFiltering\" }, { kind: \"pipe\", type: IgxGridTransactionPipe, name: \"gridTransaction\" }, { kind: \"pipe\", type: IgxHasVisibleColumnsPipe, name: \"visibleColumns\" }, { kind: \"pipe\", type: IgxGridRowPinningPipe, name: \"gridRowPinning\" }, { kind: \"pipe\", type: IgxGridAddRowPipe, name: \"gridAddRow\" }, { kind: \"pipe\", type: IgxGridRowClassesPipe, name: \"igxGridRowClasses\" }, { kind: \"pipe\", type: IgxGridRowStylesPipe, name: \"igxGridRowStyles\" }, { kind: \"pipe\", type: IgxSummaryDataPipe, name: \"igxGridSummaryDataPipe\" }, { kind: \"pipe\", type: IgxGridHierarchicalPipe, name: \"gridHierarchical\" }, { kind: \"pipe\", type: IgxGridHierarchicalPagingPipe, name: \"gridHierarchicalPaging\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-hierarchical-grid', providers: [\n IgxGridCRUDService,\n IgxGridValidationService,\n IgxGridSelectionService,\n { provide: IGX_GRID_SERVICE_BASE, useClass: IgxHierarchicalGridAPIService },\n { provide: IGX_GRID_BASE, useExisting: IgxHierarchicalGridComponent },\n IgxGridSummaryService,\n IgxFilteringService,\n IgxHierarchicalGridNavigationService,\n IgxColumnResizingService,\n IgxForOfSyncService,\n IgxForOfScrollSyncService,\n IgxRowIslandAPIService\n ], template: \"\\n\\n\\n\\n\\n\\n
    \\n
    \\n \\n 0\\\"\\n [igxColumnMovingDrop]=\\\"headerContainer\\\" [attr.droppable]=\\\"true\\\" id=\\\"left\\\"\\n class=\\\"igx-grid__scroll-on-drag-pinned\\\" [style.left.px]=\\\"pinnedWidth\\\">\\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
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{resourceStrings.igx_grid_snackbar_addrow_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 {{emptyFilteredGridMessage}}\\n \\n \\n \\n \\n\\n\\n\\n \\n {{emptyGridMessage}}\\n \\n \\n \\n \\n\\n\\n\\n \\n\\n\\n\\n
    \\n \\n \\n
    \\n
    \\n\\n\\n unfold_more\\n\\n\\n\\n unfold_less\\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n You have {{ rowChangesCount }} changes in this row and {{ hiddenColumnsCount }} hidden columns\\n\\n\\n \\n \\n\\n\\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n\\n drag_indicator\\n\\n\\n\\n
    \\n
    \\n\" }]\n }], propDecorators: { role: [{\n type: HostBinding,\n args: ['attr.role']\n }], childLayoutList: [{\n type: ContentChildren,\n args: [IgxRowIslandComponent, { read: IgxRowIslandComponent, descendants: false }]\n }], allLayoutList: [{\n type: ContentChildren,\n args: [IgxRowIslandComponent, { read: IgxRowIslandComponent, descendants: true }]\n }], toolbarTemplate: [{\n type: ContentChild,\n args: [IgxGridToolbarDirective, { read: TemplateRef, static: true }]\n }], paginatorList: [{\n type: ContentChildren,\n args: [IgxPaginatorComponent, { descendants: true }]\n }], toolbarOutlet: [{\n type: ViewChild,\n args: ['toolbarOutlet', { read: ViewContainerRef }]\n }], paginatorOutlet: [{\n type: ViewChild,\n args: ['paginatorOutlet', { read: ViewContainerRef }]\n }], templateOutlets: [{\n type: ViewChildren,\n args: [IgxTemplateOutletDirective, { read: IgxTemplateOutletDirective }]\n }], hierarchicalRows: [{\n type: ViewChildren,\n args: [IgxChildGridRowComponent]\n }], hierarchicalRecordTemplate: [{\n type: ViewChild,\n args: ['hierarchical_record_template', { read: TemplateRef, static: true }]\n }], childTemplate: [{\n type: ViewChild,\n args: ['child_record_template', { read: TemplateRef, static: true }]\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], data: [{\n type: Input\n }], expandChildren: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass IgxHierarchicalGridModule {\n}\nIgxHierarchicalGridModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxHierarchicalGridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridModule, declarations: [IgxHierarchicalGridComponent,\n IgxHierarchicalRowComponent,\n IgxRowIslandComponent,\n IgxChildGridRowComponent,\n IgxHierarchicalGridCellComponent,\n IgxGridHierarchicalPipe,\n IgxGridHierarchicalPagingPipe], imports: [IgxGridModule,\n IgxTooltipModule,\n ReactiveFormsModule], exports: [IgxGridModule,\n IgxHierarchicalGridComponent,\n IgxHierarchicalRowComponent,\n IgxHierarchicalGridCellComponent,\n IgxRowIslandComponent,\n IgxChildGridRowComponent] });\nIgxHierarchicalGridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridModule, imports: [IgxGridModule,\n IgxTooltipModule,\n ReactiveFormsModule, IgxGridModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxHierarchicalGridModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxHierarchicalGridComponent,\n IgxHierarchicalRowComponent,\n IgxRowIslandComponent,\n IgxChildGridRowComponent,\n IgxHierarchicalGridCellComponent,\n IgxGridHierarchicalPipe,\n IgxGridHierarchicalPagingPipe\n ],\n exports: [\n IgxGridModule,\n IgxHierarchicalGridComponent,\n IgxHierarchicalRowComponent,\n IgxHierarchicalGridCellComponent,\n IgxRowIslandComponent,\n IgxChildGridRowComponent\n ],\n imports: [\n IgxGridModule,\n IgxTooltipModule,\n ReactiveFormsModule\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n }]\n }] });\n\n/**\n * IgxActionIcon is a container for the action nav icon of the IgxNavbar.\n */\nclass IgxNavbarActionDirective {\n}\nIgxNavbarActionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavbarActionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxNavbarActionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxNavbarActionDirective, selector: \"igx-navbar-action,[igxNavbarAction]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavbarActionDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-navbar-action,[igxNavbarAction]'\n }]\n }] });\nclass IgxNavbarTitleDirective {\n}\nIgxNavbarTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavbarTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxNavbarTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxNavbarTitleDirective, selector: \"igx-navbar-title,[igxNavbarTitle]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavbarTitleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-navbar-title,[igxNavbarTitle]'\n }]\n }] });\nlet NEXT_ID$4 = 0;\n/**\n * **Ignite UI for Angular Navbar** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/navbar.html)\n *\n * The Ignite UI Navbar is most commonly used to provide an app header with a hamburger menu and navigation\n * state such as a \"Go Back\" button. It also supports other actions represented by icons.\n *\n * Example:\n * ```html\n * \n * search\n * favorite\n * more_vert\n * \n * ```\n */\nclass IgxNavbarComponent {\n constructor() {\n /**\n * An @Input property that sets the value of the `id` attribute. If not provided it will be automatically generated.\n * ```html\n * \n * ```\n */\n this.id = `igx-navbar-${NEXT_ID$4++}`;\n /**\n * The event that will be thrown when the action is executed,\n * provides reference to the `IgxNavbar` component as argument\n * ```typescript\n * public actionExc(event){\n * alert(\"Action Execute!\");\n * }\n * //..\n * ```\n * ```html\n * \n * ```\n */\n this.action = new EventEmitter();\n /**\n * An @Input property that sets the titleId of the `IgxNavbarComponent`. If not set it will be automatically generated.\n * ```html\n * \n * ```\n */\n this.titleId = `igx-navbar-title-${NEXT_ID$4++}`;\n this.isVisible = true;\n }\n /**\n * Sets whether the action button of the `IgxNavbarComponent` is visible.\n * ```html\n * \n * ```\n */\n set isActionButtonVisible(value) {\n this.isVisible = value;\n }\n /**\n * Returns whether the `IgxNavbarComponent` action button is visible, true/false.\n * ```typescript\n * @ViewChild(\"MyChild\")\n * public navBar: IgxNavbarComponent;\n * ngAfterViewInit(){\n * let actionButtonVisibile = this.navBar.isActionButtonVisible;\n * }\n * ```\n */\n get isActionButtonVisible() {\n if (this.actionIconTemplate || !this.actionButtonIcon) {\n return false;\n }\n return this.isVisible;\n }\n get isTitleContentVisible() {\n return this.titleContent ? true : false;\n }\n /**\n * @hidden\n */\n _triggerAction() {\n this.action.emit(this);\n }\n}\nIgxNavbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxNavbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxNavbarComponent, selector: \"igx-navbar\", inputs: { id: \"id\", actionButtonIcon: \"actionButtonIcon\", title: \"title\", titleId: \"titleId\", isActionButtonVisible: \"isActionButtonVisible\" }, outputs: { action: \"action\" }, host: { properties: { \"attr.id\": \"this.id\" } }, queries: [{ propertyName: \"actionIconTemplate\", first: true, predicate: IgxNavbarActionDirective, descendants: true, read: IgxNavbarActionDirective }, { propertyName: \"titleContent\", first: true, predicate: IgxNavbarTitleDirective, descendants: true, read: IgxNavbarTitleDirective }], ngImport: i0, template: \"\\n\", styles: [\":host{display:block;width:100%}\\n\"], dependencies: [{ kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavbarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-navbar', template: \"\\n\", styles: [\":host{display:block;width:100%}\\n\"] }]\n }], propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], actionButtonIcon: [{\n type: Input\n }], title: [{\n type: Input\n }], action: [{\n type: Output\n }], titleId: [{\n type: Input\n }], actionIconTemplate: [{\n type: ContentChild,\n args: [IgxNavbarActionDirective, { read: IgxNavbarActionDirective }]\n }], titleContent: [{\n type: ContentChild,\n args: [IgxNavbarTitleDirective, { read: IgxNavbarTitleDirective }]\n }], isActionButtonVisible: [{\n type: Input\n }] } });\n/**\n * @hidden\n */\nclass IgxNavbarModule {\n}\nIgxNavbarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxNavbarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavbarModule, declarations: [IgxNavbarComponent, IgxNavbarActionDirective, IgxNavbarTitleDirective], imports: [IgxButtonModule, IgxIconModule, CommonModule], exports: [IgxNavbarComponent, IgxNavbarActionDirective, IgxNavbarTitleDirective] });\nIgxNavbarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavbarModule, imports: [IgxButtonModule, IgxIconModule, CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavbarModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxNavbarComponent, IgxNavbarActionDirective, IgxNavbarTitleDirective],\n exports: [IgxNavbarComponent, IgxNavbarActionDirective, IgxNavbarTitleDirective],\n imports: [IgxButtonModule, IgxIconModule, CommonModule]\n }]\n }] });\n\nclass IgxNavDrawerItemDirective {\n constructor() {\n /**\n * @hidden\n */\n this.active = false;\n /**\n * @hidden\n */\n this.isHeader = false;\n /**\n * @hidden\n */\n this.activeClass = 'igx-nav-drawer__item--active';\n }\n /**\n * @hidden\n */\n get defaultCSS() {\n return !this.active && !this.isHeader;\n }\n /**\n * @hidden\n */\n get currentCSS() {\n return this.active && !this.isHeader;\n }\n /**\n * @hidden\n */\n get headerCSS() {\n return this.isHeader;\n }\n}\nIgxNavDrawerItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavDrawerItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxNavDrawerItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxNavDrawerItemDirective, selector: \"[igxDrawerItem]\", inputs: { active: \"active\", isHeader: \"isHeader\" }, host: { properties: { \"class.igx-nav-drawer__item\": \"this.defaultCSS\", \"class.igx-nav-drawer__item--active\": \"this.currentCSS\", \"class.igx-nav-drawer__item--header\": \"this.headerCSS\" } }, exportAs: [\"igxDrawerItem\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavDrawerItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxDrawerItem]',\n exportAs: 'igxDrawerItem'\n }]\n }], propDecorators: { active: [{\n type: Input,\n args: ['active']\n }], isHeader: [{\n type: Input,\n args: ['isHeader']\n }], defaultCSS: [{\n type: HostBinding,\n args: ['class.igx-nav-drawer__item']\n }], currentCSS: [{\n type: HostBinding,\n args: ['class.igx-nav-drawer__item--active']\n }], headerCSS: [{\n type: HostBinding,\n args: ['class.igx-nav-drawer__item--header']\n }] } });\nclass IgxNavDrawerTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxNavDrawerTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavDrawerTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxNavDrawerTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxNavDrawerTemplateDirective, selector: \"[igxDrawer]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavDrawerTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxDrawer]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\nclass IgxNavDrawerMiniTemplateDirective {\n constructor(template) {\n this.template = template;\n }\n}\nIgxNavDrawerMiniTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavDrawerMiniTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxNavDrawerMiniTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxNavDrawerMiniTemplateDirective, selector: \"[igxDrawerMini]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavDrawerMiniTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxDrawerMini]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nlet NEXT_ID$3 = 0;\n/**\n * **Ignite UI for Angular Navigation Drawer** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/navdrawer)\n *\n * The Ignite UI Navigation Drawer is a collapsible side navigation container commonly used in combination with the Navbar.\n *\n * Example:\n * ```html\n * \n * \n * \n * \n * \n * ```\n */\nclass IgxNavigationDrawerComponent {\n /**\n * State of the drawer.\n *\n * ```typescript\n * // get\n * let navDrawerIsOpen = this.navdrawer.isOpen;\n * ```\n *\n * ```html\n * \n * \n * ```\n *\n * Two-way data binding.\n * ```html\n * \n * \n * ```\n */\n get isOpen() {\n return this._isOpen;\n }\n set isOpen(value) {\n this._isOpen = value;\n this.isOpenChange.emit(this._isOpen);\n }\n /**\n * Returns nativeElement of the component.\n *\n * @hidden\n */\n get element() {\n return this.elementRef.nativeElement;\n }\n /**\n * @hidden\n */\n get template() {\n if (this.miniTemplate && !this.isOpen) {\n return this.miniTemplate.template;\n }\n else if (this.contentTemplate) {\n return this.contentTemplate.template;\n }\n }\n /**\n * @hidden\n */\n get miniTemplate() {\n return this._miniTemplate;\n }\n /**\n * @hidden\n */\n set miniTemplate(v) {\n if (!this.isOpen) {\n this.setDrawerWidth(v ? this.miniWidth : '');\n }\n this._miniTemplate = v;\n }\n /**\n * @hidden\n */\n get flexWidth() {\n if (!this.pin) {\n return '0px';\n }\n if (this.isOpen) {\n return this.width;\n }\n if (this.miniTemplate && this.miniWidth) {\n return this.miniWidth;\n }\n return '0px';\n }\n /** @hidden */\n get isPinnedRight() {\n return this.pin && this.position === 'right' ? '1' : '0';\n }\n /**\n * @hidden\n */\n get drawer() {\n return this._drawer.nativeElement;\n }\n /**\n * @hidden\n */\n get overlay() {\n return this._overlay.nativeElement;\n }\n /**\n * @hidden\n */\n get styleDummy() {\n return this._styleDummy.nativeElement;\n }\n /**\n * Property to decide whether to change width or translate the drawer from pan gesture.\n *\n * @hidden\n */\n get hasAnimateWidth() {\n return this.pin || !!this.miniTemplate;\n }\n /**\n * Used for touch gestures (swipe and pan).\n * Defaults to 50 (in px) and is extended to at least 110% of the mini template width if available.\n *\n * @hidden\n */\n get maxEdgeZone() {\n return this._maxEdgeZone;\n }\n /**\n * Gets the Drawer width for specific state.\n * Will attempt to evaluate requested state and cache.\n *\n *\n * @hidden\n */\n get expectedWidth() {\n return this.getExpectedWidth(false);\n }\n /**\n * Get the Drawer mini width for specific state.\n * Will attempt to evaluate requested state and cache.\n *\n * @hidden\n */\n get expectedMiniWidth() {\n return this.getExpectedWidth(true);\n }\n /**\n * @hidden\n */\n get touchManager() {\n return this._touchManager;\n }\n /**\n * Exposes optional navigation service\n *\n * @hidden\n */\n get state() {\n return this._state;\n }\n constructor(elementRef, _state, renderer, _touchManager, platformUtil) {\n this.elementRef = elementRef;\n this._state = _state;\n this.renderer = renderer;\n this._touchManager = _touchManager;\n this.platformUtil = platformUtil;\n /** @hidden @internal */\n this.cssClass = true;\n /**\n * ID of the component\n *\n * ```typescript\n * // get\n * let myNavDrawerId = this.navdrawer.id;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.id = `igx-nav-drawer-${NEXT_ID$3++}`;\n /**\n * Position of the Navigation Drawer. Can be \"left\"(default) or \"right\".\n *\n * ```typescript\n * // get\n * let myNavDrawerPosition = this.navdrawer.position;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.position = 'left';\n /**\n * Enables the use of touch gestures to manipulate the drawer:\n * - swipe/pan from edge to open, swipe-toggle and pan-drag.\n *\n * ```typescript\n * // get\n * let gesturesEnabled = this.navdrawer.enableGestures;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.enableGestures = true;\n /**\n * @hidden\n */\n this.isOpenChange = new EventEmitter();\n /**\n * Minimum device width required for automatic pin to be toggled.\n * Default is 1024, can be set to a falsy value to disable this behavior.\n *\n * ```typescript\n * // get\n * let navDrawerPinThreshold = this.navdrawer.pinThreshold;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.pinThreshold = 1024;\n /**\n * When pinned the drawer is relatively positioned instead of sitting above content.\n * May require additional layout styling.\n *\n * ```typescript\n * // get\n * let navDrawerIsPinned = this.navdrawer.pin;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.pin = false;\n /**\n * Width of the drawer in its open state. Defaults to \"280px\".\n *\n * ```typescript\n * // get\n * let navDrawerWidth = this.navdrawer.width;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.width = '280px';\n /**\n * Enables/disables the animation, when toggling the drawer. Set to `false` by default.\n * ````html\n * \n * ````\n */\n this.disableAnimation = false;\n /**\n * Width of the drawer in its mini state. Defaults to 68px.\n *\n * ```typescript\n * // get\n * let navDrawerMiniWidth = this.navdrawer.miniWidth;\n * ```\n *\n * ```html\n * \n * \n * ```\n */\n this.miniWidth = '68px';\n /**\n * Pinned state change output for two-way binding.\n *\n * ```html\n * \n * ```\n */\n this.pinChange = new EventEmitter(true);\n /**\n * Event fired as the Navigation Drawer is about to open.\n *\n * ```html\n * \n * ```\n */\n this.opening = new EventEmitter();\n /**\n * Event fired when the Navigation Drawer has opened.\n *\n * ```html\n * \n * ```\n */\n this.opened = new EventEmitter();\n /**\n * Event fired as the Navigation Drawer is about to close.\n *\n * ```html\n * \n * ```\n */\n this.closing = new EventEmitter();\n /**\n * Event fired when the Navigation Drawer has closed.\n *\n * ```html\n * \n * ```\n */\n this.closed = new EventEmitter();\n this._isOpen = false;\n this._gesturesAttached = false;\n this._widthCache = { width: null, miniWidth: null, windowWidth: null };\n this.css = {\n drawer: 'igx-nav-drawer__aside',\n mini: 'igx-nav-drawer__aside--mini',\n overlay: 'igx-nav-drawer__overlay',\n styleDummy: 'igx-nav-drawer__style-dummy'\n };\n /** Pan animation properties */\n this._panning = false;\n this._maxEdgeZone = 50;\n this.checkPinThreshold = (evt) => {\n if (!this.platformUtil.isBrowser) {\n return;\n }\n let windowWidth;\n if (this.pinThreshold) {\n windowWidth = this.getWindowWidth();\n if (evt && this._widthCache.windowWidth === windowWidth) {\n return;\n }\n this._widthCache.windowWidth = windowWidth;\n if (!this.pin && windowWidth >= this.pinThreshold) {\n this.pin = true;\n this.pinChange.emit(true);\n }\n else if (this.pin && windowWidth < this.pinThreshold) {\n this.pin = false;\n this.pinChange.emit(false);\n }\n }\n };\n this.swipe = (evt) => {\n // TODO: Could also force input type: http://stackoverflow.com/a/27108052\n if (!this.enableGestures || evt.pointerType !== 'touch') {\n return;\n }\n // HammerJS swipe is horizontal-only by default, don't check deltaY\n let deltaX;\n let startPosition;\n if (this.position === 'right') {\n // when on the right use inverse of deltaX\n deltaX = -evt.deltaX;\n startPosition = this.getWindowWidth() - (evt.center.x + evt.distance);\n }\n else {\n deltaX = evt.deltaX;\n startPosition = evt.center.x - evt.distance;\n }\n // only accept closing swipe (ignoring minEdgeZone) when the drawer is expanded:\n if ((this.isOpen && deltaX < 0) ||\n // positive deltaX from the edge:\n (deltaX > 0 && startPosition < this.maxEdgeZone)) {\n this.toggle();\n }\n };\n this.panstart = (evt) => {\n if (!this.enableGestures || this.pin || evt.pointerType !== 'touch') {\n return;\n }\n const startPosition = this.position === 'right' ? this.getWindowWidth() - (evt.center.x + evt.distance)\n : evt.center.x - evt.distance;\n // cache width during animation, flag to allow further handling\n if (this.isOpen || (startPosition < this.maxEdgeZone)) {\n this._panning = true;\n this._panStartWidth = this.getExpectedWidth(!this.isOpen);\n this._panLimit = this.getExpectedWidth(this.isOpen);\n this.renderer.addClass(this.overlay, 'panning');\n this.renderer.addClass(this.drawer, 'panning');\n }\n };\n this.pan = (evt) => {\n // TODO: input.deltaX = prevDelta.x + (center.x - offset.x);\n // get actual delta (not total session one) from event?\n // pan WILL also fire after a full swipe, only resize on flag\n if (!this._panning) {\n return;\n }\n const right = this.position === 'right';\n // when on the right use inverse of deltaX\n const deltaX = right ? -evt.deltaX : evt.deltaX;\n let newX;\n let percent;\n const visibleWidth = this._panStartWidth + deltaX;\n if (this.isOpen && deltaX < 0) {\n // when visibleWidth hits limit - stop animating\n if (visibleWidth <= this._panLimit) {\n return;\n }\n if (this.hasAnimateWidth) {\n percent = (visibleWidth - this._panLimit) / (this._panStartWidth - this._panLimit);\n newX = visibleWidth;\n }\n else {\n percent = visibleWidth / this._panStartWidth;\n newX = evt.deltaX;\n }\n this.setXSize(newX, percent.toPrecision(2));\n }\n else if (!this.isOpen && deltaX > 0) {\n // when visibleWidth hits limit - stop animating\n if (visibleWidth >= this._panLimit) {\n return;\n }\n if (this.hasAnimateWidth) {\n percent = (visibleWidth - this._panStartWidth) / (this._panLimit - this._panStartWidth);\n newX = visibleWidth;\n }\n else {\n percent = visibleWidth / this._panLimit;\n newX = (this._panLimit - visibleWidth) * (right ? 1 : -1);\n }\n this.setXSize(newX, percent.toPrecision(2));\n }\n };\n this.panEnd = (evt) => {\n if (this._panning) {\n const deltaX = this.position === 'right' ? -evt.deltaX : evt.deltaX;\n const visibleWidth = this._panStartWidth + deltaX;\n this.resetPan();\n // check if pan brought the drawer to 50%\n if (this.isOpen && visibleWidth <= this._panStartWidth / 2) {\n this.close();\n }\n else if (!this.isOpen && visibleWidth >= this._panLimit / 2) {\n this.open();\n }\n this._panStartWidth = null;\n }\n };\n this.toggleOpenedEvent = () => {\n this.elementRef.nativeElement.removeEventListener('transitionend', this.toggleOpenedEvent, false);\n this.opened.emit();\n };\n this.toggleClosedEvent = () => {\n this.elementRef.nativeElement.removeEventListener('transitionend', this.toggleClosedEvent, false);\n this.closed.emit();\n };\n }\n /**\n * @hidden\n */\n ngOnInit() {\n // DOM and @Input()-s initialized\n if (this._state) {\n this._state.add(this.id, this);\n }\n if (this.isOpen) {\n this.setDrawerWidth(this.width);\n }\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n // wait for template and ng-content to be ready\n this.updateEdgeZone();\n this.checkPinThreshold();\n this.ensureEvents();\n // TODO: apply platform-safe Ruler from http://plnkr.co/edit/81nWDyreYMzkunihfRgX?p=preview\n // (https://github.com/angular/angular/issues/6515), blocked by https://github.com/angular/angular/issues/6904\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this._touchManager.destroy();\n if (this._state) {\n this._state.remove(this.id);\n }\n if (this._resizeObserver) {\n this._resizeObserver.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n // simple settings can come from attribute set (rather than binding), make sure boolean props are converted\n if (changes.enableGestures && changes.enableGestures.currentValue !== undefined) {\n this.enableGestures = !!(this.enableGestures && this.enableGestures.toString() === 'true');\n this.ensureEvents();\n }\n if (changes.pin && changes.pin.currentValue !== undefined) {\n this.pin = !!(this.pin && this.pin.toString() === 'true');\n if (this.pin) {\n this._touchManager.destroy();\n this._gesturesAttached = false;\n }\n else {\n this.ensureEvents();\n }\n }\n if (changes.pinThreshold) {\n if (this.pinThreshold) {\n this.ensureEvents();\n this.checkPinThreshold();\n }\n }\n if (changes.width && this.isOpen) {\n this.setDrawerWidth(changes.width.currentValue);\n }\n if (changes.isOpen) {\n this.setDrawerWidth(this.isOpen ? this.width : (this.miniTemplate ? this.miniWidth : ''));\n }\n if (changes.miniWidth) {\n if (!this.isOpen) {\n this.setDrawerWidth(changes.miniWidth.currentValue);\n }\n this.updateEdgeZone();\n }\n }\n /**\n * Toggle the open state of the Navigation Drawer.\n *\n * ```typescript\n * this.navdrawer.toggle();\n * ```\n */\n toggle() {\n if (this.isOpen) {\n this.close();\n }\n else {\n this.open();\n }\n }\n /**\n * Open the Navigation Drawer. Has no effect if already opened.\n *\n * ```typescript\n * this.navdrawer.open();\n * ```\n */\n open() {\n if (this._panning) {\n this.resetPan();\n }\n if (this.isOpen) {\n return;\n }\n this.opening.emit();\n this.isOpen = true;\n // TODO: Switch to animate API when available\n // var animationCss = this.animate.css();\n // animationCss\n // .setStyles({'width':'50px'}, {'width':'400px'})\n // .start(this.elementRef.nativeElement)\n // .onComplete(() => animationCss.setToStyles({'width':'auto'}).start(this.elementRef.nativeElement));\n this.elementRef.nativeElement.addEventListener('transitionend', this.toggleOpenedEvent, false);\n this.setDrawerWidth(this.width);\n }\n /**\n * Close the Navigation Drawer. Has no effect if already closed.\n *\n * ```typescript\n * this.navdrawer.close();\n * ```\n */\n close() {\n if (this._panning) {\n this.resetPan();\n }\n if (!this.isOpen) {\n return;\n }\n this.closing.emit();\n this.isOpen = false;\n this.setDrawerWidth(this.miniTemplate ? this.miniWidth : '');\n this.elementRef.nativeElement.addEventListener('transitionend', this.toggleClosedEvent, false);\n }\n /**\n * @hidden\n */\n set_maxEdgeZone(value) {\n this._maxEdgeZone = value;\n }\n /**\n * Get the Drawer width for specific state. Will attempt to evaluate requested state and cache.\n *\n * @hidden\n * @param [mini] - Request mini width instead\n */\n getExpectedWidth(mini) {\n if (mini) {\n if (!this.miniTemplate) {\n return 0;\n }\n if (this.miniWidth) {\n return parseFloat(this.miniWidth);\n }\n else {\n // if (!this.isOpen) { // This WON'T work due to transition timings...\n // return this.elementRef.nativeElement.children[1].offsetWidth;\n // } else {\n if (this._widthCache.miniWidth === null) {\n // force class for width calc. TODO?\n // force class for width calc. TODO?\n this.renderer.addClass(this.styleDummy, this.css.drawer);\n this.renderer.addClass(this.styleDummy, this.css.mini);\n this._widthCache.miniWidth = this.styleDummy.offsetWidth;\n this.renderer.removeClass(this.styleDummy, this.css.drawer);\n this.renderer.removeClass(this.styleDummy, this.css.mini);\n }\n return this._widthCache.miniWidth;\n }\n }\n else {\n if (this.width) {\n return parseFloat(this.width);\n }\n else {\n if (this._widthCache.width === null) {\n // force class for width calc. TODO?\n // force class for width calc. TODO?\n this.renderer.addClass(this.styleDummy, this.css.drawer);\n this._widthCache.width = this.styleDummy.offsetWidth;\n this.renderer.removeClass(this.styleDummy, this.css.drawer);\n }\n return this._widthCache.width;\n }\n }\n }\n getWindowWidth() {\n return (window.innerWidth > 0) ? window.innerWidth : screen.width;\n }\n /**\n * Sets the drawer width.\n */\n setDrawerWidth(width) {\n if (this.platformUtil.isBrowser) {\n requestAnimationFrame(() => {\n if (this.drawer) {\n this.renderer.setStyle(this.drawer, 'width', width);\n }\n });\n }\n else {\n this.renderer.setStyle(this.drawer, 'width', width);\n }\n }\n /**\n * Get current Drawer width.\n */\n getDrawerWidth() {\n return this.drawer.offsetWidth;\n }\n ensureEvents() {\n // set listeners for swipe/pan only if needed, but just once\n if (this.enableGestures && !this.pin && !this._gesturesAttached) {\n // Built-in manager handler(L20887) causes endless loop and max stack exception.\n // https://github.com/angular/angular/issues/6993\n // Use ours for now (until beta.10):\n // this.renderer.listen(document, \"swipe\", this.swipe);\n this._touchManager.addGlobalEventListener('document', 'swipe', this.swipe);\n this._gesturesAttached = true;\n // this.renderer.listen(document, \"panstart\", this.panstart);\n // this.renderer.listen(document, \"pan\", this.pan);\n this._touchManager.addGlobalEventListener('document', 'panstart', this.panstart);\n this._touchManager.addGlobalEventListener('document', 'panmove', this.pan);\n this._touchManager.addGlobalEventListener('document', 'panend', this.panEnd);\n }\n if (!this._resizeObserver && this.platformUtil.isBrowser) {\n this._resizeObserver = fromEvent(window, 'resize').pipe(debounce(() => interval(150)))\n .subscribe((value) => {\n this.checkPinThreshold(value);\n });\n }\n }\n updateEdgeZone() {\n let maxValue;\n if (this.miniTemplate) {\n maxValue = Math.max(this._maxEdgeZone, this.getExpectedWidth(true) * 1.1);\n this.set_maxEdgeZone(maxValue);\n }\n }\n resetPan() {\n this._panning = false;\n /* styles fail to apply when set on parent due to extra attributes, prob ng bug */\n /* styles fail to apply when set on parent due to extra attributes, prob ng bug */\n this.renderer.removeClass(this.overlay, 'panning');\n this.renderer.removeClass(this.drawer, 'panning');\n this.setXSize(0, '');\n }\n /**\n * Sets the absolute position or width in case the drawer doesn't change position.\n *\n * @param x the number pixels to translate on the X axis or the width to set. 0 width will clear the style instead.\n * @param opacity optional value to apply to the overlay\n */\n setXSize(x, opacity) {\n // Angular polyfills patches window.requestAnimationFrame, but switch to DomAdapter API (TODO)\n window.requestAnimationFrame(() => {\n if (this.hasAnimateWidth) {\n this.renderer.setStyle(this.drawer, 'width', x ? Math.abs(x) + 'px' : '');\n }\n else {\n this.renderer.setStyle(this.drawer, 'transform', x ? 'translate3d(' + x + 'px,0,0)' : '');\n this.renderer.setStyle(this.drawer, '-webkit-transform', x ? 'translate3d(' + x + 'px,0,0)' : '');\n }\n if (opacity !== undefined) {\n this.renderer.setStyle(this.overlay, 'opacity', opacity);\n }\n });\n }\n}\nIgxNavigationDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationDrawerComponent, deps: [{ token: ElementRef }, { token: IgxNavigationService, optional: true }, { token: i0.Renderer2 }, { token: HammerGesturesManager }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });\nIgxNavigationDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxNavigationDrawerComponent, selector: \"igx-nav-drawer\", inputs: { id: \"id\", position: \"position\", enableGestures: \"enableGestures\", pinThreshold: \"pinThreshold\", pin: \"pin\", width: \"width\", disableAnimation: \"disableAnimation\", miniWidth: \"miniWidth\", isOpen: \"isOpen\" }, outputs: { isOpenChange: \"isOpenChange\", pinChange: \"pinChange\", opening: \"opening\", opened: \"opened\", closing: \"closing\", closed: \"closed\" }, host: { properties: { \"class.igx-nav-drawer\": \"this.cssClass\", \"attr.id\": \"this.id\", \"class.igx-nav-drawer--disable-animation\": \"this.disableAnimation\", \"style.flexBasis\": \"this.flexWidth\", \"style.order\": \"this.isPinnedRight\" } }, providers: [HammerGesturesManager], queries: [{ propertyName: \"contentTemplate\", first: true, predicate: IgxNavDrawerTemplateDirective, descendants: true, read: IgxNavDrawerTemplateDirective }, { propertyName: \"miniTemplate\", first: true, predicate: IgxNavDrawerMiniTemplateDirective, descendants: true, read: IgxNavDrawerMiniTemplateDirective }], viewQueries: [{ propertyName: \"_drawer\", first: true, predicate: [\"aside\"], descendants: true, static: true }, { propertyName: \"_overlay\", first: true, predicate: [\"overlay\"], descendants: true, static: true }, { propertyName: \"_styleDummy\", first: true, predicate: [\"dummy\"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: \"\\n
    Navigation Drawer
    \\n
    Start by adding
    \\n
    <ng-template igxDrawer>
    \\n
    And some items inside
    \\n
    Style with igxDrawerItem
    \\n
    and igxRipple directives
    \\n
    \\n\\n
    \\n
    \\n\\n
    \\n\", styles: [\":host{display:block;height:100%}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: IgxNavDrawerItemDirective, selector: \"[igxDrawerItem]\", inputs: [\"active\", \"isHeader\"], exportAs: [\"igxDrawerItem\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationDrawerComponent, decorators: [{\n type: Component,\n args: [{ providers: [HammerGesturesManager], selector: 'igx-nav-drawer', template: \"\\n
    Navigation Drawer
    \\n
    Start by adding
    \\n
    <ng-template igxDrawer>
    \\n
    And some items inside
    \\n
    Style with igxDrawerItem
    \\n
    and igxRipple directives
    \\n
    \\n\\n
    \\n
    \\n\\n
    \\n\", styles: [\":host{display:block;height:100%}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef, decorators: [{\n type: Inject,\n args: [ElementRef]\n }] }, { type: IgxNavigationService, decorators: [{\n type: Optional\n }] }, { type: i0.Renderer2 }, { type: HammerGesturesManager }, { type: PlatformUtil }];\n }, propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-nav-drawer']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], position: [{\n type: Input\n }], enableGestures: [{\n type: Input\n }], isOpenChange: [{\n type: Output\n }], pinThreshold: [{\n type: Input\n }], pin: [{\n type: Input\n }], width: [{\n type: Input\n }], disableAnimation: [{\n type: HostBinding,\n args: ['class.igx-nav-drawer--disable-animation']\n }, {\n type: Input\n }], miniWidth: [{\n type: Input\n }], pinChange: [{\n type: Output\n }], opening: [{\n type: Output\n }], opened: [{\n type: Output\n }], closing: [{\n type: Output\n }], closed: [{\n type: Output\n }], contentTemplate: [{\n type: ContentChild,\n args: [IgxNavDrawerTemplateDirective, { read: IgxNavDrawerTemplateDirective }]\n }], _drawer: [{\n type: ViewChild,\n args: ['aside', { static: true }]\n }], _overlay: [{\n type: ViewChild,\n args: ['overlay', { static: true }]\n }], _styleDummy: [{\n type: ViewChild,\n args: ['dummy', { static: true }]\n }], isOpen: [{\n type: Input\n }], miniTemplate: [{\n type: ContentChild,\n args: [IgxNavDrawerMiniTemplateDirective, { read: IgxNavDrawerMiniTemplateDirective }]\n }], flexWidth: [{\n type: HostBinding,\n args: ['style.flexBasis']\n }], isPinnedRight: [{\n type: HostBinding,\n args: ['style.order']\n }] } });\n\n/**\n * @hidden\n */\nclass IgxNavigationDrawerModule {\n}\nIgxNavigationDrawerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationDrawerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxNavigationDrawerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationDrawerModule, declarations: [IgxNavigationDrawerComponent,\n IgxNavDrawerItemDirective,\n IgxNavDrawerMiniTemplateDirective,\n IgxNavDrawerTemplateDirective], imports: [CommonModule], exports: [IgxNavigationDrawerComponent,\n IgxNavDrawerItemDirective,\n IgxNavDrawerMiniTemplateDirective,\n IgxNavDrawerTemplateDirective] });\nIgxNavigationDrawerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationDrawerModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxNavigationDrawerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxNavigationDrawerComponent,\n IgxNavDrawerItemDirective,\n IgxNavDrawerMiniTemplateDirective,\n IgxNavDrawerTemplateDirective\n ],\n exports: [\n IgxNavigationDrawerComponent,\n IgxNavDrawerItemDirective,\n IgxNavDrawerMiniTemplateDirective,\n IgxNavDrawerTemplateDirective\n ],\n imports: [CommonModule]\n }]\n }] });\n\n/**\n * Template directive that allows you to set a custom template representing the lower label value of the {@link IgxSliderComponent}\n *\n * ```html\n * \n * {{value}}\n * \n * ```\n *\n * @context {@link IgxSliderComponent.context}\n */\nclass IgxThumbFromTemplateDirective {\n}\nIgxThumbFromTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxThumbFromTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxThumbFromTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxThumbFromTemplateDirective, selector: \"[igxSliderThumbFrom]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxThumbFromTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxSliderThumbFrom]'\n }]\n }] });\n/**\n * Template directive that allows you to set a custom template representing the upper label value of the {@link IgxSliderComponent}\n *\n * ```html\n * \n * {{value}}\n * \n * ```\n *\n * @context {@link IgxSliderComponent.context}\n */\nclass IgxThumbToTemplateDirective {\n}\nIgxThumbToTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxThumbToTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxThumbToTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxThumbToTemplateDirective, selector: \"[igxSliderThumbTo]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxThumbToTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxSliderThumbTo]'\n }]\n }] });\n/**\n * Template directive that allows you to set a custom template, represeting primary/secondary tick labels of the {@link IgxSliderComponent}\n *\n * @context {@link IgxTicksComponent.context}\n */\nclass IgxTickLabelTemplateDirective {\n}\nIgxTickLabelTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTickLabelTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxTickLabelTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTickLabelTemplateDirective, selector: \"[igxSliderTickLabel]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTickLabelTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxSliderTickLabel]'\n }]\n }] });\nconst IgxSliderType = mkenum({\n /**\n * Slider with single thumb.\n */\n SLIDER: 'slider',\n /**\n * Range slider with multiple thumbs, that can mark the range.\n */\n RANGE: 'range'\n});\nconst SliderHandle = mkenum({\n FROM: 'from',\n TO: 'to'\n});\n/**\n * Slider Tick labels Orientation\n */\nconst TickLabelsOrientation = mkenum({\n Horizontal: 'horizontal',\n TopToBottom: 'toptobottom',\n BottomToTop: 'bottomtotop'\n});\n/**\n * Slider Ticks orientation\n */\nconst TicksOrientation = mkenum({\n Top: 'top',\n Bottom: 'bottom',\n Mirror: 'mirror'\n});\n\n/**\n * @hidden\n */\nclass IgxThumbLabelComponent {\n get thumbFromClass() {\n return this.type === SliderHandle.FROM;\n }\n get thumbToClass() {\n return this.type === SliderHandle.TO;\n }\n get thumbFromActiveClass() {\n return this.type === SliderHandle.FROM && this.active;\n }\n get thumbToActiveClass() {\n return this.type === SliderHandle.TO && this.active;\n }\n get labelFromPressedClass() {\n var _a;\n return (_a = this.thumb) === null || _a === void 0 ? void 0 : _a.thumbFromPressedClass;\n }\n get labelToPressedClass() {\n var _a;\n return (_a = this.thumb) === null || _a === void 0 ? void 0 : _a.thumbToPressedClass;\n }\n get getLabelClass() {\n return {\n 'igx-slider-thumb-label-from__container': this.type === SliderHandle.FROM,\n 'igx-slider-thumb-label-to__container': this.type === SliderHandle.TO\n };\n }\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n get nativeElement() {\n return this._elementRef.nativeElement;\n }\n get active() {\n return this._active;\n }\n set active(val) {\n if (this.continuous || this.deactiveState) {\n this._active = false;\n }\n else {\n this._active = val;\n }\n }\n}\nIgxThumbLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxThumbLabelComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxThumbLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxThumbLabelComponent, selector: \"igx-thumb-label\", inputs: { value: \"value\", templateRef: \"templateRef\", context: \"context\", type: \"type\", continuous: \"continuous\", deactiveState: \"deactiveState\", thumb: \"thumb\" }, host: { properties: { \"class.igx-slider-thumb-label-from\": \"this.thumbFromClass\", \"class.igx-slider-thumb-label-to\": \"this.thumbToClass\", \"class.igx-slider-thumb-label-from--active\": \"this.thumbFromActiveClass\", \"class.igx-slider-thumb-label-to--active\": \"this.thumbToActiveClass\", \"class.igx-slider-thumb-label-from--pressed\": \"this.labelFromPressedClass\", \"class.igx-slider-thumb-label-to--pressed\": \"this.labelToPressedClass\" } }, ngImport: i0, template: \"
    \\n \\n
    \\n\\n\\n {{ value }}\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxThumbLabelComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-thumb-label', template: \"
    \\n \\n
    \\n\\n\\n {{ value }}\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { value: [{\n type: Input\n }], templateRef: [{\n type: Input\n }], context: [{\n type: Input\n }], type: [{\n type: Input\n }], continuous: [{\n type: Input\n }], deactiveState: [{\n type: Input\n }], thumb: [{\n type: Input\n }], thumbFromClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-label-from']\n }], thumbToClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-label-to']\n }], thumbFromActiveClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-label-from--active']\n }], thumbToActiveClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-label-to--active']\n }], labelFromPressedClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-label-from--pressed']\n }], labelToPressedClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-label-to--pressed']\n }] } });\n\n/**\n * @hidden\n */\nclass IgxSliderThumbComponent {\n get thumbFromClass() {\n return this.type === SliderHandle.FROM;\n }\n get thumbToClass() {\n return this.type === SliderHandle.TO;\n }\n get thumbFromActiveClass() {\n return this.type === SliderHandle.FROM && this._isActive;\n }\n get thumbToActiveClass() {\n return this.type === SliderHandle.TO && this._isActive;\n }\n get thumbFromDisabledClass() {\n return this.type === SliderHandle.FROM && this.disabled;\n }\n get thumbToDisabledClass() {\n return this.type === SliderHandle.TO && this.disabled;\n }\n get thumbFromPressedClass() {\n return this.type === SliderHandle.FROM && this.isActive && this._isPressed;\n }\n get thumbToPressedClass() {\n return this.type === SliderHandle.TO && this.isActive && this._isPressed;\n }\n get getDotClass() {\n return {\n 'igx-slider-thumb-from__dot': this.type === SliderHandle.FROM,\n 'igx-slider-thumb-to__dot': this.type === SliderHandle.TO\n };\n }\n get nativeElement() {\n return this._elementRef.nativeElement;\n }\n get destroy() {\n return this._destroy$;\n }\n get thumbPositionX() {\n const thumbBounderies = this.nativeElement.getBoundingClientRect();\n const thumbCenter = (thumbBounderies.right - thumbBounderies.left) / 2;\n return thumbBounderies.left + thumbCenter;\n }\n constructor(_elementRef, _dir) {\n this._elementRef = _elementRef;\n this._dir = _dir;\n this.thumbValueChange = new EventEmitter();\n this.thumbChange = new EventEmitter();\n this.hoverChange = new EventEmitter();\n this.tabindex = 0;\n this.zIndex = 0;\n this.focused = false;\n this.isActive = false;\n this._isActive = false;\n this._isPressed = false;\n this._destroy$ = new Subject();\n }\n onPointerEnter() {\n this.focused = false;\n this.hoverChange.emit(true);\n }\n onPointerLeave() {\n this.hoverChange.emit(false);\n }\n onKeyUp(event) {\n event.stopPropagation();\n this.focused = true;\n }\n onKeyDown(event) {\n if (this.disabled) {\n return;\n }\n let increment = 0;\n const stepWithDir = (rtl) => rtl ? this.step * -1 : this.step;\n if (event.key.endsWith('Left')) {\n increment = stepWithDir(!this._dir.rtl);\n }\n else if (event.key.endsWith('Right')) {\n increment = stepWithDir(this._dir.rtl);\n }\n else {\n return;\n }\n this.thumbChange.emit();\n this.thumbValueChange.emit(increment);\n }\n onBlur() {\n this.isActive = false;\n this.zIndex = 0;\n this.focused = false;\n }\n onFocusListener() {\n this.isActive = true;\n this.zIndex = 1;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.onPan\n .pipe(takeUntil(this._destroy$))\n .subscribe(mouseX => this.updateThumbValue(mouseX));\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this._destroy$.next(true);\n this._destroy$.complete();\n }\n /**\n * Show thumb label and ripple.\n */\n showThumbIndicators() {\n this.toggleThumbIndicators(true);\n }\n /**\n * Hide thumb label and ripple.\n */\n hideThumbIndicators() {\n this.toggleThumbIndicators(false);\n }\n updateThumbValue(mouseX) {\n const updateValue = this.calculateTrackUpdate(mouseX);\n if (this.isActive && updateValue !== 0) {\n this.thumbValueChange.emit(updateValue);\n }\n }\n calculateTrackUpdate(mouseX) {\n const scaleX = this._dir.rtl ? this.thumbPositionX - mouseX : mouseX - this.thumbPositionX;\n const stepDistanceCenter = this.stepDistance / 2;\n // If the thumb scale range (slider update) is less thàn a half step,\n // the position stays the same.\n const scaleXPositive = Math.abs(scaleX);\n if (scaleXPositive < stepDistanceCenter) {\n return 0;\n }\n return this.stepToProceed(scaleX, this.stepDistance);\n }\n stepToProceed(scaleX, stepDist) {\n return Math.round(scaleX / stepDist) * this.step;\n }\n toggleThumbIndicators(visible) {\n this._isPressed = visible;\n if (this.continuous || this.deactiveState) {\n this._isActive = false;\n }\n else {\n this._isActive = visible;\n }\n }\n}\nIgxSliderThumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSliderThumbComponent, deps: [{ token: i0.ElementRef }, { token: IgxDirectionality }], target: i0.ɵɵFactoryTarget.Component });\nIgxSliderThumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSliderThumbComponent, selector: \"igx-thumb\", inputs: { value: \"value\", continuous: \"continuous\", thumbLabelVisibilityDuration: \"thumbLabelVisibilityDuration\", disabled: \"disabled\", onPan: \"onPan\", stepDistance: \"stepDistance\", step: \"step\", templateRef: \"templateRef\", context: \"context\", type: \"type\", deactiveState: \"deactiveState\" }, outputs: { thumbValueChange: \"thumbValueChange\", thumbChange: \"thumbChange\", hoverChange: \"hoverChange\" }, host: { listeners: { \"pointerenter\": \"onPointerEnter()\", \"pointerleave\": \"onPointerLeave()\", \"keyup\": \"onKeyUp($event)\", \"keydown\": \"onKeyDown($event)\", \"blur\": \"onBlur()\", \"focus\": \"onFocusListener()\" }, properties: { \"attr.tabindex\": \"this.tabindex\", \"attr.z-index\": \"this.zIndex\", \"class.igx-slider-thumb-to--focused\": \"this.focused\", \"class.igx-slider-thumb-from\": \"this.thumbFromClass\", \"class.igx-slider-thumb-to\": \"this.thumbToClass\", \"class.igx-slider-thumb-from--active\": \"this.thumbFromActiveClass\", \"class.igx-slider-thumb-to--active\": \"this.thumbToActiveClass\", \"class.igx-slider-thumb-from--disabled\": \"this.thumbFromDisabledClass\", \"class.igx-slider-thumb-to--disabled\": \"this.thumbToDisabledClass\", \"class.igx-slider-thumb-from--pressed\": \"this.thumbFromPressedClass\", \"class.igx-slider-thumb-to--pressed\": \"this.thumbToPressedClass\" } }, ngImport: i0, template: \"
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSliderThumbComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-thumb', template: \"
    \\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: IgxDirectionality }]; }, propDecorators: { value: [{\n type: Input\n }], continuous: [{\n type: Input\n }], thumbLabelVisibilityDuration: [{\n type: Input\n }], disabled: [{\n type: Input\n }], onPan: [{\n type: Input\n }], stepDistance: [{\n type: Input\n }], step: [{\n type: Input\n }], templateRef: [{\n type: Input\n }], context: [{\n type: Input\n }], type: [{\n type: Input\n }], deactiveState: [{\n type: Input\n }], thumbValueChange: [{\n type: Output\n }], thumbChange: [{\n type: Output\n }], hoverChange: [{\n type: Output\n }], tabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], zIndex: [{\n type: HostBinding,\n args: ['attr.z-index']\n }], focused: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-to--focused']\n }], thumbFromClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-from']\n }], thumbToClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-to']\n }], thumbFromActiveClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-from--active']\n }], thumbToActiveClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-to--active']\n }], thumbFromDisabledClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-from--disabled']\n }], thumbToDisabledClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-to--disabled']\n }], thumbFromPressedClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-from--pressed']\n }], thumbToPressedClass: [{\n type: HostBinding,\n args: ['class.igx-slider-thumb-to--pressed']\n }], onPointerEnter: [{\n type: HostListener,\n args: ['pointerenter']\n }], onPointerLeave: [{\n type: HostListener,\n args: ['pointerleave']\n }], onKeyUp: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }], onKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], onBlur: [{\n type: HostListener,\n args: ['blur']\n }], onFocusListener: [{\n type: HostListener,\n args: ['focus']\n }] } });\n\n/**\n * @hidden\n */\nclass IgxTickLabelsPipe {\n transform(labels, secondaryTicks) {\n if (!labels) {\n return;\n }\n const result = [];\n labels.forEach(item => {\n result.push(item);\n for (let i = 0; i < secondaryTicks; i++) {\n result.push('');\n }\n });\n return result;\n }\n}\nIgxTickLabelsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTickLabelsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nIgxTickLabelsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTickLabelsPipe, name: \"spreadTickLabels\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTickLabelsPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'spreadTickLabels'\n }]\n }] });\n\n/**\n * @hidden\n */\nclass IgxTicksComponent {\n constructor() {\n /**\n * @hidden\n */\n this.ticksClass = true;\n }\n /**\n * @hidden\n */\n get ticksTopClass() {\n return this.ticksOrientation === TicksOrientation.Top;\n }\n /**\n * @hidden\n */\n get hasPrimaryClass() {\n return this.primaryTicks > 0;\n }\n /**\n * @hidden\n */\n get labelsTopToBottomClass() {\n return this.tickLabelsOrientation === TickLabelsOrientation.TopToBottom;\n }\n /**\n * @hidden\n */\n get labelsBottomToTopClass() {\n return this.tickLabelsOrientation === TickLabelsOrientation.BottomToTop;\n }\n /**\n * Returns the template context corresponding to\n * {@link IgxTickLabelTemplateDirective}\n *\n * ```typescript\n * return {\n * $implicit //returns the value per each tick label.\n * isPrimery //returns if the tick is primary.\n * labels // returns the {@link labels} collection.\n * index // returns the index per each tick of the whole sequence.\n * }\n * ```\n *\n * @param idx the index per each tick label.\n */\n context(idx) {\n return {\n $implicit: this.tickLabel(idx),\n isPrimary: this.isPrimary(idx),\n labels: this.labels,\n index: idx\n };\n }\n /**\n * @hidden\n */\n get ticksLength() {\n return this.primaryTicks > 0 ?\n ((this.primaryTicks - 1) * this.secondaryTicks) + this.primaryTicks :\n this.secondaryTicks > 0 ? this.secondaryTicks : 0;\n }\n hiddenTickLabels(idx) {\n return this.isPrimary(idx) ? this.primaryTickLabels : this.secondaryTickLabels;\n }\n /**\n * @hidden\n */\n isPrimary(idx) {\n return this.primaryTicks <= 0 ? false :\n idx % (this.secondaryTicks + 1) === 0;\n }\n /**\n * @hidden\n */\n tickLabel(idx) {\n if (this.labelsViewEnabled) {\n return this.labels[idx];\n }\n const labelStep = (Math.max(this.minValue, this.maxValue) - Math.min(this.minValue, this.maxValue)) / (this.ticksLength - 1);\n const labelVal = labelStep * idx;\n return (this.minValue + labelVal).toFixed(2);\n }\n}\nIgxTicksComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTicksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxTicksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTicksComponent, selector: \"igx-ticks\", inputs: { primaryTicks: \"primaryTicks\", secondaryTicks: \"secondaryTicks\", primaryTickLabels: \"primaryTickLabels\", secondaryTickLabels: \"secondaryTickLabels\", ticksOrientation: \"ticksOrientation\", tickLabelsOrientation: \"tickLabelsOrientation\", maxValue: \"maxValue\", minValue: \"minValue\", labelsViewEnabled: \"labelsViewEnabled\", labels: \"labels\", tickLabelTemplateRef: \"tickLabelTemplateRef\" }, host: { properties: { \"class.igx-slider__ticks\": \"this.ticksClass\", \"class.igx-slider__ticks--top\": \"this.ticksTopClass\", \"class.igx-slider__ticks--tall\": \"this.hasPrimaryClass\", \"class.igx-slider__tick-labels--top-bottom\": \"this.labelsTopToBottomClass\", \"class.igx-slider__tick-labels--bottom-top\": \"this.labelsBottomToTopClass\" } }, ngImport: i0, template: \"
    \\n
    \\n \\n \\n \\n
    \\n
    \\n\\n\\n {{ value }}\\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTicksComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-ticks', template: \"
    \\n
    \\n \\n \\n \\n
    \\n
    \\n\\n\\n {{ value }}\\n\\n\" }]\n }], propDecorators: { primaryTicks: [{\n type: Input\n }], secondaryTicks: [{\n type: Input\n }], primaryTickLabels: [{\n type: Input\n }], secondaryTickLabels: [{\n type: Input\n }], ticksOrientation: [{\n type: Input\n }], tickLabelsOrientation: [{\n type: Input\n }], maxValue: [{\n type: Input\n }], minValue: [{\n type: Input\n }], labelsViewEnabled: [{\n type: Input\n }], labels: [{\n type: Input\n }], tickLabelTemplateRef: [{\n type: Input\n }], ticksClass: [{\n type: HostBinding,\n args: ['class.igx-slider__ticks']\n }], ticksTopClass: [{\n type: HostBinding,\n args: ['class.igx-slider__ticks--top']\n }], hasPrimaryClass: [{\n type: HostBinding,\n args: ['class.igx-slider__ticks--tall']\n }], labelsTopToBottomClass: [{\n type: HostBinding,\n args: ['class.igx-slider__tick-labels--top-bottom']\n }], labelsBottomToTopClass: [{\n type: HostBinding,\n args: ['class.igx-slider__tick-labels--bottom-top']\n }] } });\n\nlet NEXT_ID$2 = 0;\n/**\n * **Ignite UI for Angular Slider** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/slider/slider)\n *\n * The Ignite UI Slider allows selection in a given range by moving the thumb along the track. The track\n * can be defined as continuous or stepped, and you can choose between single and range slider types.\n *\n * Example:\n * ```html\n * \n * \n * ```\n */\nclass IgxSliderComponent {\n /**\n * @hidden\n */\n get thumbFrom() {\n return this.thumbs.find(thumb => thumb.type === SliderHandle.FROM);\n }\n /**\n * @hidden\n */\n get thumbTo() {\n return this.thumbs.find(thumb => thumb.type === SliderHandle.TO);\n }\n get labelFrom() {\n return this.labelRefs.find(label => label.type === SliderHandle.FROM);\n }\n get labelTo() {\n return this.labelRefs.find(label => label.type === SliderHandle.TO);\n }\n /**\n * @hidden\n */\n get valuemin() {\n return this.minValue;\n }\n /**\n * @hidden\n */\n get valuemax() {\n return this.maxValue;\n }\n /**\n * @hidden\n */\n get readonly() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n get disabledClass() {\n return this.disabled;\n }\n /**\n * An @Input property that gets the type of the `IgxSliderComponent`.\n * The slider can be IgxSliderType.SLIDER(default) or IgxSliderType.RANGE.\n * ```typescript\n * @ViewChild(\"slider2\")\n * public slider: IgxSliderComponent;\n * ngAfterViewInit(){\n * let type = this.slider.type;\n * }\n */\n get type() {\n return this._type;\n }\n /**\n * An @Input property that sets the type of the `IgxSliderComponent`.\n * The slider can be IgxSliderType.SLIDER(default) or IgxSliderType.RANGE.\n * ```typescript\n * sliderType: IgxSliderType = IgxSliderType.RANGE;\n * ```\n * ```html\n * \n * ```\n */\n set type(type) {\n this._type = type;\n if (type === IgxSliderType.SLIDER) {\n this.lowerValue = 0;\n }\n if (this._hasViewInit) {\n this.updateTrack();\n }\n }\n /**\n * Enables `labelView`, by accepting a collection of primitive values with more than one element.\n * Each element will be equally spread over the slider and it will serve as a thumb label.\n * Once the property is set, it will precendence over {@link maxValue}, {@link minValue}, {@link step}.\n * This means that the manipulation for those properties won't be allowed.\n */\n get labels() {\n return this._labels;\n }\n set labels(labels) {\n this._labels = labels;\n this._pMax = this.valueToFraction(this.upperBound, 0, 1);\n this._pMin = this.valueToFraction(this.lowerBound, 0, 1);\n this.positionHandlersAndUpdateTrack();\n if (this._hasViewInit) {\n this.stepDistance = this.calculateStepDistance();\n this.setTickInterval();\n }\n }\n /**\n * Returns the template context corresponding\n * to {@link IgxThumbFromTemplateDirective} and {@link IgxThumbToTemplateDirective} templates.\n *\n * ```typescript\n * return {\n * $implicit // returns the value of the label,\n * labels // returns the labels collection the user has passed.\n * }\n * ```\n */\n get context() {\n return {\n $implicit: this.value,\n labels: this.labels\n };\n }\n /**\n * An @Input property that sets the incremental/decremental step of the value when dragging the thumb.\n * The default step is 1, and step should not be less or equal than 0.\n * ```html\n * \n * ```\n */\n set step(step) {\n this._step = step;\n if (this._hasViewInit) {\n this.stepDistance = this.calculateStepDistance();\n this.normalizeByStep(this._value);\n this.setValue(this._value, true);\n this.positionHandlersAndUpdateTrack();\n this.setTickInterval();\n }\n }\n /**\n * Returns the incremental/decremental dragging step of the {@link IgxSliderComponent}.\n * ```typescript\n * @ViewChild(\"slider2\")\n * public slider: IgxSliderComponent;\n * ngAfterViewInit(){\n * let step = this.slider.step;\n * }\n * ```\n */\n get step() {\n return this.labelsViewEnabled ? 1 : this._step;\n }\n /**\n * Returns if the {@link IgxSliderComponent} is disabled.\n * ```typescript\n * @ViewChild(\"slider2\")\n * public slider: IgxSliderComponent;\n * ngAfterViewInit(){\n * let isDisabled = this.slider.disabled;\n * }\n * ```\n */\n get disabled() {\n return this._disabled;\n }\n /**\n * An @Input property that disables or enables UI interaction.\n * ```html\n * \n * ```\n */\n set disabled(disable) {\n this._disabled = disable;\n if (this._hasViewInit) {\n this.changeThumbFocusableState(disable);\n }\n }\n /**\n * Returns if the {@link IgxSliderComponent} is set as continuous.\n * ```typescript\n * @ViewChild(\"slider2\")\n * public slider: IgxSliderComponent;\n * ngAfterViewInit(){\n * let continuous = this.slider.continuous;\n * }\n * ```\n */\n get continuous() {\n return this._continuous;\n }\n /**\n * An @Input property that marks the {@link IgxSliderComponent} as continuous.\n * By default is considered that the {@link IgxSliderComponent} is discrete.\n * Discrete {@link IgxSliderComponent} slider has step indicators over the track and visible thumb labels during interaction.\n * Continuous {@link IgxSliderComponent} does not have ticks and does not show bubble labels for values.\n * ```html\n * \n * ```\n */\n set continuous(continuous) {\n this._continuous = continuous;\n if (this._hasViewInit) {\n this.setTickInterval();\n }\n }\n /**\n * Returns the minimal displayed track value of the `IgxSliderComponent`.\n * ```typescript\n * @ViewChild(\"slider2\")\n * public slider: IgxSliderComponent;\n * ngAfterViewInit(){\n * let sliderMin = this.slider.minValue;\n * }\n * ```\n */\n get minValue() {\n if (this.labelsViewEnabled) {\n return 0;\n }\n return this._minValue;\n }\n /**\n * Sets the minimal displayed track value for the `IgxSliderComponent`.\n * The default minimal value is 0.\n * ```html\n * \n * ```\n */\n set minValue(value) {\n if (value >= this.maxValue) {\n return;\n }\n else {\n this._minValue = value;\n }\n if (value > this._upperBound) {\n this.updateUpperBoundAndMaxTravelZone();\n this.lowerBound = value;\n }\n // Refresh min travel zone limit.\n this._pMin = 0;\n // Recalculate step distance.\n this.positionHandlersAndUpdateTrack();\n if (this._hasViewInit) {\n this.stepDistance = this.calculateStepDistance();\n this.setTickInterval();\n }\n }\n /**\n * Returns the maximum displayed track value for the {@link IgxSliderComponent}.\n * ```typescript\n * @ViewChild(\"slider\")\n * public slider: IgxSliderComponent;\n * ngAfterViewInit(){\n * let sliderMax = this.slider.maxValue;\n * }\n * ```\n */\n get maxValue() {\n return this.labelsViewEnabled ?\n this.labels.length - 1 :\n this._maxValue;\n }\n /**\n * Sets the maximal displayed track value for the `IgxSliderComponent`.\n * The default maximum value is 100.\n * ```html\n * \n * ```\n */\n set maxValue(value) {\n if (value <= this._minValue) {\n return;\n }\n else {\n this._maxValue = value;\n }\n if (value < this._lowerBound) {\n this.updateLowerBoundAndMinTravelZone();\n this.upperBound = value;\n }\n // refresh max travel zone limits.\n this._pMax = 1;\n // recalculate step distance.\n this.positionHandlersAndUpdateTrack();\n if (this._hasViewInit) {\n this.stepDistance = this.calculateStepDistance();\n this.setTickInterval();\n }\n }\n /**\n * Returns the lower boundary of settable values of the `IgxSliderComponent`.\n * If not set, will return `minValue`.\n * ```typescript\n * @ViewChild(\"slider\")\n * public slider: IgxSliderComponent;\n * ngAfterViewInit(){\n * let sliderLowBound = this.slider.lowerBound;\n * }\n * ```\n */\n get lowerBound() {\n if (!Number.isNaN(this._lowerBound) && this._lowerBound !== undefined) {\n return this.valueInRange(this._lowerBound, this.minValue, this.maxValue);\n }\n return this.minValue;\n }\n /**\n * Sets the lower boundary of settable values of the `IgxSliderComponent`.\n * If not set is the same as min value.\n * ```html\n * \n * ```\n */\n set lowerBound(value) {\n if (value >= this.upperBound || (this.labelsViewEnabled && value < 0)) {\n return;\n }\n this._lowerBound = this.valueInRange(value, this.minValue, this.maxValue);\n // Refresh min travel zone.\n this._pMin = this.valueToFraction(this._lowerBound, 0, 1);\n this.positionHandlersAndUpdateTrack();\n }\n /**\n * Returns the upper boundary of settable values of the `IgxSliderComponent`.\n * If not set, will return `maxValue`\n * ```typescript\n * @ViewChild(\"slider\")\n * public slider: IgxSliderComponent;\n * ngAfterViewInit(){\n * let sliderUpBound = this.slider.upperBound;\n * }\n * ```\n */\n get upperBound() {\n if (!Number.isNaN(this._upperBound) && this._upperBound !== undefined) {\n return this.valueInRange(this._upperBound, this.minValue, this.maxValue);\n }\n return this.maxValue;\n }\n /**\n * Sets the upper boundary of the `IgxSliderComponent`.\n * If not set is the same as max value.\n * ```html\n * \n * ```\n */\n set upperBound(value) {\n if (value <= this.lowerBound || (this.labelsViewEnabled && value > this.labels.length - 1)) {\n return;\n }\n this._upperBound = this.valueInRange(value, this.minValue, this.maxValue);\n // Refresh time travel zone.\n this._pMax = this.valueToFraction(this._upperBound, 0, 1);\n this.positionHandlersAndUpdateTrack();\n }\n /**\n * Returns the slider value. If the slider is of type {@link IgxSliderType.SLIDER} the returned value is number.\n * If the slider type is {@link IgxSliderType.RANGE}.\n * The returned value represents an object of {@link lowerValue} and {@link upperValue}.\n * ```typescript\n * @ViewChild(\"slider2\")\n * public slider: IgxSliderComponent;\n * public sliderValue(event){\n * let sliderVal = this.slider.value;\n * }\n * ```\n */\n get value() {\n if (this.isRange) {\n return {\n lower: this.valueInRange(this.lowerValue, this.lowerBound, this.upperBound),\n upper: this.valueInRange(this.upperValue, this.lowerBound, this.upperBound)\n };\n }\n else {\n return this.valueInRange(this.upperValue, this.lowerBound, this.upperBound);\n }\n }\n /**\n * Sets the slider value.\n * If the slider is of type {@link IgxSliderType.SLIDER}.\n * The argument is number. By default the {@link value} gets the {@link lowerBound}.\n * If the slider type is {@link IgxSliderType.RANGE} the argument\n * represents an object of {@link lowerValue} and {@link upperValue} properties.\n * By default the object is associated with the {@link lowerBound} and {@link upperBound} property values.\n * ```typescript\n * rangeValue = {\n * lower: 30,\n * upper: 60\n * };\n * ```\n * ```html\n * \n * ```\n */\n set value(value) {\n this.normalizeByStep(value);\n if (this._hasViewInit) {\n this.setValue(this._value, true);\n this.positionHandlersAndUpdateTrack();\n }\n }\n /**\n * Returns the number of the presented primary ticks.\n * ```typescript\n * const primaryTicks = this.slider.primaryTicks;\n * ```\n */\n get primaryTicks() {\n if (this.labelsViewEnabled) {\n return this._primaryTicks = this.labels.length;\n }\n return this._primaryTicks;\n }\n /**\n * Sets the number of primary ticks. If {@link @labels} is enabled, this property won't function.\n * Insted enable ticks by {@link showTicks} property.\n * ```typescript\n * this.slider.primaryTicks = 5;\n * ```\n */\n set primaryTicks(val) {\n if (val <= 1) {\n return;\n }\n this._primaryTicks = val;\n }\n /**\n * Returns the number of the presented secondary ticks.\n * ```typescript\n * const secondaryTicks = this.slider.secondaryTicks;\n * ```\n */\n get secondaryTicks() {\n return this._secondaryTicks;\n }\n /**\n * Sets the number of secondary ticks. The property functions even when {@link labels} is enabled,\n * but all secondary ticks won't present any tick labels.\n * ```typescript\n * this.slider.secondaryTicks = 5;\n * ```\n */\n set secondaryTicks(val) {\n if (val < 1) {\n return;\n }\n this._secondaryTicks = val;\n }\n /**\n * @hidden\n */\n get deactivateThumbLabel() {\n return ((this.primaryTicks && this.primaryTickLabels) || (this.secondaryTicks && this.secondaryTickLabels)) &&\n (this.ticksOrientation === TicksOrientation.Top || this.ticksOrientation === TicksOrientation.Mirror);\n }\n constructor(renderer, _el, _cdr, _ngZone, _dir) {\n this.renderer = renderer;\n this._el = _el;\n this._cdr = _cdr;\n this._ngZone = _ngZone;\n this._dir = _dir;\n /**\n * @hidden\n */\n this.role = 'slider';\n /**\n * @hidden\n */\n this.slierClass = true;\n /**\n * An @Input property that sets the value of the `id` attribute.\n * If not provided it will be automatically generated.\n * ```html\n * \n * ```\n */\n this.id = `igx-slider-${NEXT_ID$2++}`;\n /**\n * An @Input property that sets the duration visibility of thumbs labels. The default value is 750 milliseconds.\n * ```html\n * \n * ```\n */\n this.thumbLabelVisibilityDuration = 750;\n /**\n * Show/hide slider ticks\n * ```html\n * \n * ```\n */\n this.showTicks = false;\n /**\n * show/hide primary tick labels\n * ```html\n * \n * ```\n */\n this.primaryTickLabels = true;\n /**\n * show/hide secondary tick labels\n * ```html\n * \n * ```\n */\n this.secondaryTickLabels = true;\n /**\n * Changes ticks orientation:\n * bottom - The default orienation, below the slider track.\n * top - Above the slider track\n * mirror - combines top and bottom orientation.\n * ```html\n * \n * ```\n */\n this.ticksOrientation = TicksOrientation.Bottom;\n /**\n * Changes tick labels rotation:\n * horizontal - The default rotation\n * toptobottom - Rotates tick labels vertically to 90deg\n * bottomtotop - Rotate tick labels vertically to -90deg\n * ```html\n * \n * ```\n */\n this.tickLabelsOrientation = TickLabelsOrientation.Horizontal;\n /**\n * This event is emitted every time the value is changed.\n * ```typescript\n * public change(event){\n * alert(\"The value has been changed!\");\n * }\n * ```\n * ```html\n * \n * ```\n */\n this.valueChange = new EventEmitter();\n /**\n * This event is emitted every time the lower value of a range slider is changed.\n * ```typescript\n * public change(value){\n * alert(`The lower value has been changed to ${value}`);\n * }\n * ```\n * ```html\n * \n * ```\n */\n this.lowerValueChange = new EventEmitter();\n /**\n * This event is emitted every time the upper value of a range slider is changed.\n * ```typescript\n * public change(value){\n * alert(`The upper value has been changed to ${value}`);\n * }\n * ```\n * ```html\n * \n * ```\n */\n this.upperValueChange = new EventEmitter();\n /**\n * This event is emitted at the end of every slide interaction.\n * ```typescript\n * public change(event){\n * alert(\"The value has been changed!\");\n * }\n * ```\n * ```html\n * \n * ```\n */\n this.dragFinished = new EventEmitter();\n /**\n * @hidden\n */\n this.thumbs = new QueryList();\n /**\n * @hidden\n */\n this.labelRefs = new QueryList();\n /**\n * @hidden\n */\n this.onPan = new Subject();\n // Limit handle travel zone\n this._pMin = 0;\n this._pMax = 1;\n // From/upperValue in percent values\n this._hasViewInit = false;\n this._minValue = 0;\n this._maxValue = 100;\n this._continuous = false;\n this._disabled = false;\n this._step = 1;\n this._value = 0;\n // ticks\n this._primaryTicks = 0;\n this._secondaryTicks = 0;\n this._labels = new Array();\n this._type = IgxSliderType.SLIDER;\n this._destroyer$ = new Subject();\n this._indicatorsDestroyer$ = new Subject();\n this._onChangeCallback = noop;\n this._onTouchedCallback = noop;\n this.stepDistance = this._step;\n }\n /**\n * @hidden\n */\n onPointerDown($event) {\n this.findClosestThumb($event);\n if (!this.thumbTo.isActive && this.thumbFrom === undefined) {\n return;\n }\n const activeThumb = this.thumbTo.isActive ? this.thumbTo : this.thumbFrom;\n activeThumb.nativeElement.setPointerCapture($event.pointerId);\n this.showSliderIndicators();\n $event.preventDefault();\n }\n /**\n * @hidden\n */\n onPointerUp($event) {\n if (!this.thumbTo.isActive && this.thumbFrom === undefined) {\n return;\n }\n const activeThumb = this.thumbTo.isActive ? this.thumbTo : this.thumbFrom;\n activeThumb.nativeElement.releasePointerCapture($event.pointerId);\n this.hideSliderIndicators();\n this.dragFinished.emit(this.value);\n }\n /**\n * @hidden\n */\n onFocus() {\n this.toggleSliderIndicators();\n }\n /**\n * @hidden\n */\n onPanListener($event) {\n this.update($event.srcEvent.clientX);\n }\n /**\n * Returns whether the `IgxSliderComponent` type is RANGE.\n * ```typescript\n * @ViewChild(\"slider\")\n * public slider: IgxSliderComponent;\n * ngAfterViewInit(){\n * let sliderRange = this.slider.isRange;\n * }\n * ```\n */\n get isRange() {\n return this.type === IgxSliderType.RANGE;\n }\n /**\n * Returns the lower value of a RANGE `IgxSliderComponent`.\n * ```typescript\n * @ViewChild(\"slider\")\n * public slider: IgxSliderComponent;\n * public lowValue(event){\n * let sliderLowValue = this.slider.lowerValue;\n * }\n * ```\n */\n get lowerValue() {\n if (!Number.isNaN(this._lowerValue) && this._lowerValue !== undefined && this._lowerValue >= this.lowerBound) {\n return this._lowerValue;\n }\n return this.lowerBound;\n }\n /**\n * Sets the lower value of a RANGE `IgxSliderComponent`.\n * ```typescript\n * @ViewChild(\"slider\")\n * public slider: IgxSliderComponent;\n * public lowValue(event){\n * this.slider.lowerValue = value;\n * }\n * ```\n */\n set lowerValue(value) {\n const adjustedValue = this.valueInRange(value, this.lowerBound, this.upperBound);\n if (this._lowerValue !== adjustedValue) {\n this._lowerValue = adjustedValue;\n this.value = { lower: this._lowerValue, upper: this._upperValue };\n }\n }\n /**\n * Returns the upper value of a RANGE `IgxSliderComponent`.\n * Returns `value` of a SLIDER `IgxSliderComponent`\n * ```typescript\n * @ViewChild(\"slider2\")\n * public slider: IgxSliderComponent;\n * public upperValue(event){\n * let upperValue = this.slider.upperValue;\n * }\n * ```\n */\n get upperValue() {\n if (!Number.isNaN(this._upperValue) && this._upperValue !== undefined && this._upperValue <= this.upperBound) {\n return this._upperValue;\n }\n return this.upperBound;\n }\n /**\n * Sets the upper value of a RANGE `IgxSliderComponent`.\n * ```typescript\n * @ViewChild(\"slider2\")\n * public slider: IgxSliderComponent;\n * public upperValue(event){\n * this.slider.upperValue = value;\n * }\n * ```\n */\n set upperValue(value) {\n const adjustedValue = this.valueInRange(value, this.lowerBound, this.upperBound);\n if (this._upperValue !== adjustedValue) {\n this._upperValue = adjustedValue;\n this.value = { lower: this._lowerValue, upper: this._upperValue };\n }\n }\n /**\n * Returns the value corresponding the lower label.\n * ```typescript\n * @ViewChild(\"slider\")\n * public slider: IgxSliderComponent;\n * let label = this.slider.lowerLabel;\n * ```\n */\n get lowerLabel() {\n return this.labelsViewEnabled ? this.labels[this.lowerValue] : this.lowerValue;\n }\n /**\n * Returns the value corresponding the upper label.\n * ```typescript\n * @ViewChild(\"slider\")\n * public slider: IgxSliderComponent;\n * let label = this.slider.upperLabel;\n * ```\n */\n get upperLabel() {\n return this.labelsViewEnabled ? this.labels[this.upperValue] : this.upperValue;\n }\n /**\n * Returns if label view is enabled.\n * If the {@link labels} is set, the view is automatically activated.\n * ```typescript\n * @ViewChild(\"slider\")\n * public slider: IgxSliderComponent;\n * let labelView = this.slider.labelsViewEnabled;\n * ```\n */\n get labelsViewEnabled() {\n return !!(this.labels && this.labels.length > 1);\n }\n /**\n * @hidden\n */\n get showTopTicks() {\n return this.ticksOrientation === TicksOrientation.Top ||\n this.ticksOrientation === TicksOrientation.Mirror;\n }\n /**\n * @hidden\n */\n get showBottomTicks() {\n return this.ticksOrientation === TicksOrientation.Bottom ||\n this.ticksOrientation === TicksOrientation.Mirror;\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (changes.minValue && changes.maxValue &&\n changes.minValue.currentValue < changes.maxValue.currentValue) {\n this._maxValue = changes.maxValue.currentValue;\n this._minValue = changes.minValue.currentValue;\n }\n if (changes.step && changes.step.isFirstChange()) {\n this.normalizeByStep(this._value);\n }\n }\n /**\n * @hidden\n */\n ngOnInit() {\n /**\n * if {@link SliderType.SLIDER} than the initial value shold be the lowest one.\n */\n if (!this.isRange) {\n this._upperValue = this.lowerBound;\n }\n // Set track travel zone\n this._pMin = this.valueToFraction(this.lowerBound) || 0;\n this._pMax = this.valueToFraction(this.upperBound) || 1;\n }\n ngAfterContentInit() {\n this.setValue(this._value, false);\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this._hasViewInit = true;\n this.stepDistance = this.calculateStepDistance();\n this.positionHandlersAndUpdateTrack();\n this.setTickInterval();\n this.changeThumbFocusableState(this.disabled);\n this.subscribeTo(this.thumbFrom, this.thumbChanged.bind(this));\n this.subscribeTo(this.thumbTo, this.thumbChanged.bind(this));\n this.thumbs.changes.pipe(takeUntil(this._destroyer$)).subscribe(change => {\n const thumbFrom = change.find((thumb) => thumb.type === SliderHandle.FROM);\n this.positionHandler(thumbFrom, null, this.lowerValue);\n this.subscribeTo(thumbFrom, this.thumbChanged.bind(this));\n this.changeThumbFocusableState(this.disabled);\n });\n this.labelRefs.changes.pipe(takeUntil(this._destroyer$)).subscribe(() => {\n const labelFrom = this.labelRefs.find((label) => label.type === SliderHandle.FROM);\n this.positionHandler(null, labelFrom, this.lowerValue);\n });\n this._ngZone.runOutsideAngular(() => {\n resizeObservable(this._el.nativeElement).pipe(throttleTime(40), takeUntil(this._destroyer$)).subscribe(() => this._ngZone.run(() => {\n this.stepDistance = this.calculateStepDistance();\n }));\n });\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this._destroyer$.next(true);\n this._destroyer$.complete();\n this._indicatorsDestroyer$.next(true);\n this._indicatorsDestroyer$.complete();\n }\n /**\n * @hidden\n */\n writeValue(value) {\n if (!value) {\n return;\n }\n this.normalizeByStep(value);\n this.setValue(this._value, false);\n this.positionHandlersAndUpdateTrack();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this._onTouchedCallback = fn;\n }\n /** @hidden */\n getEditElement() {\n return this.isRange ? this.thumbFrom.nativeElement : this.thumbTo.nativeElement;\n }\n /**\n *\n * @hidden\n */\n update(mouseX) {\n if (this.disabled) {\n return;\n }\n // Update To/From Values\n this.onPan.next(mouseX);\n // Finally do positionHandlersAndUpdateTrack the DOM\n // based on data values\n this.positionHandlersAndUpdateTrack();\n this._onTouchedCallback();\n }\n /**\n * @hidden\n */\n thumbChanged(value, thumbType) {\n const oldValue = this.value;\n if (this.isRange) {\n if (thumbType === SliderHandle.FROM) {\n const newLower = this.lowerValue + value;\n if (newLower >= this.lowerBound && newLower <= this.upperValue) {\n this._lowerValue = newLower;\n this.lowerValueChange.emit(this._lowerValue);\n }\n }\n else {\n const newUpper = this.upperValue + value;\n if (newUpper <= this.upperBound && newUpper >= this.lowerValue) {\n this._upperValue = newUpper;\n this.upperValueChange.emit(this._upperValue);\n }\n }\n const newVal = {\n lower: this._lowerValue,\n upper: this._upperValue\n };\n // Swap the thumbs if a collision appears.\n if (newVal.lower == newVal.upper) {\n this.toggleThumb();\n }\n this.value = newVal;\n }\n else {\n const newVal = this.value + value;\n if (newVal >= this.lowerBound && newVal <= this.upperBound) {\n this.value = newVal;\n }\n }\n if (this.hasValueChanged(oldValue)) {\n this.emitValueChange(oldValue);\n }\n }\n /**\n * @hidden\n */\n onThumbChange() {\n this.toggleSliderIndicators();\n }\n /**\n * @hidden\n */\n onHoverChange(state) {\n return state ? this.showSliderIndicators() : this.hideSliderIndicators();\n }\n setValue(value, triggerChange) {\n let res;\n if (!this.isRange) {\n value = value;\n if (!isNaN(value)) {\n this._upperValue = value - value % this.step;\n res = this.upperValue;\n }\n }\n else {\n value = this.validateInitialValue(value);\n this._upperValue = value.upper;\n this._lowerValue = value.lower;\n res = { lower: this.lowerValue, upper: this.upperValue };\n }\n if (triggerChange) {\n this._onChangeCallback(res);\n }\n }\n validateInitialValue(value) {\n if (value.upper < value.lower) {\n const temp = value.upper;\n value.upper = value.lower;\n value.lower = temp;\n }\n if (value.lower < this.lowerBound) {\n value.lower = this.lowerBound;\n }\n if (value.upper > this.upperBound) {\n value.upper = this.upperBound;\n }\n return value;\n }\n findClosestThumb(event) {\n if (this.isRange) {\n this.closestHandle(event);\n }\n else {\n this.thumbTo.nativeElement.focus();\n }\n this.update(event.clientX);\n }\n updateLowerBoundAndMinTravelZone() {\n this.lowerBound = this.minValue;\n this._pMin = 0;\n }\n updateUpperBoundAndMaxTravelZone() {\n this.upperBound = this.maxValue;\n this._pMax = 1;\n }\n calculateStepDistance() {\n return this._el.nativeElement.getBoundingClientRect().width / (this.maxValue - this.minValue) * this.step;\n }\n toggleThumb() {\n return this.thumbFrom.isActive ?\n this.thumbTo.nativeElement.focus() :\n this.thumbFrom.nativeElement.focus();\n }\n valueInRange(value, min = 0, max = 100) {\n return Math.max(Math.min(value, max), min);\n }\n positionHandler(thumbHandle, labelHandle, position) {\n const percent = `${this.valueToFraction(position) * 100}%`;\n const dir = this._dir.rtl ? 'right' : 'left';\n if (thumbHandle) {\n thumbHandle.nativeElement.style[dir] = percent;\n }\n if (labelHandle) {\n labelHandle.nativeElement.style[dir] = percent;\n }\n }\n positionHandlersAndUpdateTrack() {\n if (!this.isRange) {\n this.positionHandler(this.thumbTo, this.labelTo, this.value);\n }\n else {\n this.positionHandler(this.thumbTo, this.labelTo, this.value.upper);\n this.positionHandler(this.thumbFrom, this.labelFrom, this.value.lower);\n }\n if (this._hasViewInit) {\n this.updateTrack();\n }\n }\n closestHandle(event) {\n const fromOffset = this.thumbFrom.nativeElement.offsetLeft + this.thumbFrom.nativeElement.offsetWidth / 2;\n const toOffset = this.thumbTo.nativeElement.offsetLeft + this.thumbTo.nativeElement.offsetWidth / 2;\n const xPointer = event.clientX - this._el.nativeElement.getBoundingClientRect().left;\n const match = this.closestTo(xPointer, [fromOffset, toOffset]);\n if (fromOffset === toOffset && toOffset < xPointer) {\n this.thumbTo.nativeElement.focus();\n }\n else if (fromOffset === toOffset && toOffset > xPointer) {\n this.thumbFrom.nativeElement.focus();\n }\n else if (match === fromOffset) {\n this.thumbFrom.nativeElement.focus();\n }\n else {\n this.thumbTo.nativeElement.focus();\n }\n }\n setTickInterval() {\n let interval;\n const trackProgress = 100;\n if (this.labelsViewEnabled) {\n // Calc ticks depending on the labels length;\n interval = ((trackProgress / (this.labels.length - 1) * 10)) / 10;\n }\n else {\n const trackRange = this.maxValue - this.minValue;\n interval = this.step > 1 ?\n (trackProgress / ((trackRange / this.step)) * 10) / 10\n : null;\n }\n this.renderer.setStyle(this.ticks.nativeElement, 'stroke-dasharray', `0, ${interval * Math.sqrt(2)}%`);\n this.renderer.setStyle(this.ticks.nativeElement, 'visibility', this.continuous || interval === null ? 'hidden' : 'visible');\n }\n showSliderIndicators() {\n if (this.disabled) {\n return;\n }\n if (this._indicatorsTimer) {\n this._indicatorsDestroyer$.next(true);\n this._indicatorsTimer = null;\n }\n this.thumbTo.showThumbIndicators();\n this.labelTo.active = true;\n if (this.thumbFrom) {\n this.thumbFrom.showThumbIndicators();\n }\n if (this.labelFrom) {\n this.labelFrom.active = true;\n }\n }\n hideSliderIndicators() {\n if (this.disabled) {\n return;\n }\n this._indicatorsTimer = timer(this.thumbLabelVisibilityDuration);\n this._indicatorsTimer.pipe(takeUntil(this._indicatorsDestroyer$)).subscribe(() => {\n this.thumbTo.hideThumbIndicators();\n this.labelTo.active = false;\n if (this.thumbFrom) {\n this.thumbFrom.hideThumbIndicators();\n }\n if (this.labelFrom) {\n this.labelFrom.active = false;\n }\n });\n }\n toggleSliderIndicators() {\n this.showSliderIndicators();\n this.hideSliderIndicators();\n }\n changeThumbFocusableState(state) {\n const value = state ? -1 : 1;\n if (this.isRange) {\n this.thumbFrom.tabindex = value;\n }\n this.thumbTo.tabindex = value;\n this._cdr.detectChanges();\n }\n closestTo(goal, positions) {\n return positions.reduce((previous, current) => (Math.abs(goal - current) < Math.abs(goal - previous) ? current : previous));\n }\n valueToFraction(value, pMin = this._pMin, pMax = this._pMax) {\n return this.valueInRange((value - this.minValue) / (this.maxValue - this.minValue), pMin, pMax);\n }\n /**\n * @hidden\n * Normalizе the value when two-way data bind is used and {@link this.step} is set.\n * @param value\n */\n normalizeByStep(value) {\n if (this.isRange) {\n this._value = {\n lower: value.lower - (value.lower % this.step),\n upper: value.upper - (value.upper % this.step)\n };\n }\n else {\n this._value = value - (value % this.step);\n }\n }\n updateTrack() {\n const fromPosition = this.valueToFraction(this.lowerValue);\n const toPosition = this.valueToFraction(this.upperValue);\n const positionGap = toPosition - fromPosition;\n let trackLeftIndention = fromPosition;\n if (this.isRange) {\n if (positionGap) {\n trackLeftIndention = Math.round((1 / positionGap * fromPosition) * 100);\n }\n trackLeftIndention = this._dir.rtl ? -trackLeftIndention : trackLeftIndention;\n this.renderer.setStyle(this.trackRef.nativeElement, 'transform', `scaleX(${positionGap}) translateX(${trackLeftIndention}%)`);\n }\n else {\n this.renderer.setStyle(this.trackRef.nativeElement, 'transform', `scaleX(${toPosition})`);\n }\n }\n subscribeTo(thumb, callback) {\n if (!thumb) {\n return;\n }\n thumb.thumbValueChange\n .pipe(takeUntil(this.unsubscriber(thumb)))\n .subscribe(value => callback(value, thumb.type));\n }\n unsubscriber(thumb) {\n return merge(this._destroyer$, thumb.destroy);\n }\n hasValueChanged(oldValue) {\n const isSliderWithDifferentValue = !this.isRange && oldValue !== this.value;\n const isRangeWithOneDifferentValue = this.isRange &&\n (oldValue.lower !== this.value.lower ||\n oldValue.upper !== this.value.upper);\n return isSliderWithDifferentValue || isRangeWithOneDifferentValue;\n }\n emitValueChange(oldValue) {\n this.valueChange.emit({ oldValue, value: this.value });\n }\n}\nIgxSliderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSliderComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: IgxDirectionality }], target: i0.ɵɵFactoryTarget.Component });\nIgxSliderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSliderComponent, selector: \"igx-slider\", inputs: { id: \"id\", thumbLabelVisibilityDuration: \"thumbLabelVisibilityDuration\", type: \"type\", labels: \"labels\", step: \"step\", disabled: \"disabled\", continuous: \"continuous\", minValue: \"minValue\", maxValue: \"maxValue\", lowerBound: \"lowerBound\", upperBound: \"upperBound\", value: \"value\", primaryTicks: \"primaryTicks\", secondaryTicks: \"secondaryTicks\", showTicks: \"showTicks\", primaryTickLabels: \"primaryTickLabels\", secondaryTickLabels: \"secondaryTickLabels\", ticksOrientation: \"ticksOrientation\", tickLabelsOrientation: \"tickLabelsOrientation\", lowerValue: \"lowerValue\", upperValue: \"upperValue\" }, outputs: { valueChange: \"valueChange\", lowerValueChange: \"lowerValueChange\", upperValueChange: \"upperValueChange\", dragFinished: \"dragFinished\" }, host: { listeners: { \"pointerdown\": \"onPointerDown($event)\", \"pointerup\": \"onPointerUp($event)\", \"focus\": \"onFocus()\", \"pan\": \"onPanListener($event)\" }, properties: { \"attr.role\": \"this.role\", \"class.igx-slider\": \"this.slierClass\", \"attr.id\": \"this.id\", \"attr.aria-valuemin\": \"this.valuemin\", \"attr.aria-valuemax\": \"this.valuemax\", \"attr.aria-readonly\": \"this.readonly\", \"class.igx-slider--disabled\": \"this.disabledClass\" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxSliderComponent, multi: true }], queries: [{ propertyName: \"thumbFromTemplateRef\", first: true, predicate: IgxThumbFromTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: \"thumbToTemplateRef\", first: true, predicate: IgxThumbToTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: \"tickLabelTemplateRef\", first: true, predicate: IgxTickLabelTemplateDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: \"trackRef\", first: true, predicate: [\"track\"], descendants: true, static: true }, { propertyName: \"ticks\", first: true, predicate: [\"ticks\"], descendants: true, static: true }, { propertyName: \"thumbs\", predicate: IgxSliderThumbComponent, descendants: true }, { propertyName: \"labelRefs\", predicate: IgxThumbLabelComponent, descendants: true }], usesOnChanges: 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\", dependencies: [{ kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgIf; }), selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxSliderThumbComponent; }), selector: \"igx-thumb\", inputs: [\"value\", \"continuous\", \"thumbLabelVisibilityDuration\", \"disabled\", \"onPan\", \"stepDistance\", \"step\", \"templateRef\", \"context\", \"type\", \"deactiveState\"], outputs: [\"thumbValueChange\", \"thumbChange\", \"hoverChange\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxThumbLabelComponent; }), selector: \"igx-thumb-label\", inputs: [\"value\", \"templateRef\", \"context\", \"type\", \"continuous\", \"deactiveState\", \"thumb\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxTicksComponent; }), selector: \"igx-ticks\", inputs: [\"primaryTicks\", \"secondaryTicks\", \"primaryTickLabels\", \"secondaryTickLabels\", \"ticksOrientation\", \"tickLabelsOrientation\", \"maxValue\", \"minValue\", \"labelsViewEnabled\", \"labels\", \"tickLabelTemplateRef\"] }, { kind: \"pipe\", type: i0.forwardRef(function () { return IgxTickLabelsPipe; }), name: \"spreadTickLabels\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSliderComponent, decorators: [{\n type: Component,\n args: [{ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxSliderComponent, multi: true }], selector: 'igx-slider', template: \"\\n\\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n\\n \\n\\n \\n\\n \\n
    \\n\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: IgxDirectionality }]; }, propDecorators: { trackRef: [{\n type: ViewChild,\n args: ['track', { static: true }]\n }], thumbFromTemplateRef: [{\n type: ContentChild,\n args: [IgxThumbFromTemplateDirective, { read: TemplateRef }]\n }], thumbToTemplateRef: [{\n type: ContentChild,\n args: [IgxThumbToTemplateDirective, { read: TemplateRef }]\n }], tickLabelTemplateRef: [{\n type: ContentChild,\n args: [IgxTickLabelTemplateDirective, { read: TemplateRef, static: false }]\n }], role: [{\n type: HostBinding,\n args: [`attr.role`]\n }], slierClass: [{\n type: HostBinding,\n args: ['class.igx-slider']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], thumbLabelVisibilityDuration: [{\n type: Input\n }], valuemin: [{\n type: HostBinding,\n args: [`attr.aria-valuemin`]\n }], valuemax: [{\n type: HostBinding,\n args: [`attr.aria-valuemax`]\n }], readonly: [{\n type: HostBinding,\n args: [`attr.aria-readonly`]\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.igx-slider--disabled']\n }], type: [{\n type: Input\n }], labels: [{\n type: Input\n }], step: [{\n type: Input\n }], disabled: [{\n type: Input\n }], continuous: [{\n type: Input\n }], minValue: [{\n type: Input\n }], maxValue: [{\n type: Input\n }], lowerBound: [{\n type: Input\n }], upperBound: [{\n type: Input\n }], value: [{\n type: Input\n }], primaryTicks: [{\n type: Input\n }], secondaryTicks: [{\n type: Input\n }], showTicks: [{\n type: Input\n }], primaryTickLabels: [{\n type: Input\n }], secondaryTickLabels: [{\n type: Input\n }], ticksOrientation: [{\n type: Input\n }], tickLabelsOrientation: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], lowerValueChange: [{\n type: Output\n }], upperValueChange: [{\n type: Output\n }], dragFinished: [{\n type: Output\n }], ticks: [{\n type: ViewChild,\n args: ['ticks', { static: true }]\n }], thumbs: [{\n type: ViewChildren,\n args: [IgxSliderThumbComponent]\n }], labelRefs: [{\n type: ViewChildren,\n args: [IgxThumbLabelComponent]\n }], onPointerDown: [{\n type: HostListener,\n args: ['pointerdown', ['$event']]\n }], onPointerUp: [{\n type: HostListener,\n args: ['pointerup', ['$event']]\n }], onFocus: [{\n type: HostListener,\n args: ['focus']\n }], onPanListener: [{\n type: HostListener,\n args: ['pan', ['$event']]\n }], lowerValue: [{\n type: Input\n }], upperValue: [{\n type: Input\n }] } });\n/**\n * @hidden\n */\nclass IgxSliderModule {\n}\nIgxSliderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSliderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxSliderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSliderModule, declarations: [IgxSliderComponent, IgxThumbFromTemplateDirective,\n IgxThumbToTemplateDirective,\n IgxTickLabelTemplateDirective,\n IgxSliderThumbComponent,\n IgxThumbLabelComponent,\n IgxTicksComponent,\n IgxTickLabelsPipe], imports: [CommonModule, FormsModule], exports: [IgxSliderComponent, IgxThumbFromTemplateDirective,\n IgxThumbToTemplateDirective,\n IgxTickLabelTemplateDirective] });\nIgxSliderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSliderModule, imports: [CommonModule, FormsModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSliderModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxSliderComponent,\n IgxThumbFromTemplateDirective,\n IgxThumbToTemplateDirective,\n IgxTickLabelTemplateDirective,\n IgxSliderThumbComponent,\n IgxThumbLabelComponent,\n IgxTicksComponent,\n IgxTickLabelsPipe\n ],\n exports: [\n IgxSliderComponent,\n IgxThumbFromTemplateDirective,\n IgxThumbToTemplateDirective,\n IgxTickLabelTemplateDirective\n ],\n imports: [CommonModule, FormsModule]\n }]\n }] });\n\nconst SwitchLabelPosition = mkenum({\n BEFORE: 'before',\n AFTER: 'after'\n});\nlet nextId = 0;\n/**\n *\n * The Switch component is a binary choice selection component.\n *\n * @igxModule IgxSwitchModule\n *\n * @igxTheme igx-switch-theme, igx-tooltip-theme\n *\n * @igxKeywords switch, states, tooltip\n *\n * @igxGroup Data Entry & Display\n *\n * @remarks\n *\n * The Ignite UI Switch lets the user toggle between on/off or true/false states.\n *\n * @example\n * ```html\n * \n * Simple switch\n * \n * ```\n */\nclass IgxSwitchComponent {\n /**\n * Returns reference to the `nativeElement` of the igx-switch.\n *\n * @example\n * ```typescript\n * let nativeElement = this.switch.nativeElement;\n * ```\n */\n get nativeElement() {\n return this.nativeCheckbox.nativeElement;\n }\n /**\n * Sets/gets whether switch is required.\n * If not set, `required` will have value `false`.\n *\n * @example\n * ```html\n * \n * ```\n */\n get required() {\n return this._required || this.nativeElement.hasAttribute('required');\n }\n set required(value) {\n this._required = (value === '') || value;\n }\n /**\n * Sets/gets whether the switch is on or off.\n * Default value is 'false'.\n *\n * @example\n * ```html\n * \n * ```\n */\n set checked(value) {\n if (this._checked !== value) {\n this._checked = value;\n this._onChangeCallback(this.checked);\n }\n }\n get checked() {\n return this._checked;\n }\n /**\n * Sets/gets the `disabled` attribute.\n * Default value is `false`.\n *\n * @example\n * ```html\n * \n * ```\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = (value === '') || value;\n }\n /**\n * Sets/gets whether the switch component is invalid.\n * Default value is `false`.\n *\n * @example\n * ```html\n * \n * ```\n * ```typescript\n * let isInvalid = this.switch.invalid;\n * ```\n */\n get invalid() {\n return this._invalid || false;\n }\n set invalid(value) {\n this._invalid = !!value;\n }\n constructor(cdr, renderer, ngControl) {\n this.cdr = cdr;\n this.renderer = renderer;\n this.ngControl = ngControl;\n /**\n * @hidden\n * @internal\n */\n this.destroy$ = new Subject();\n /**\n * Sets/gets the `id` of the switch component.\n * If not set, the `id` of the first switch component will be `\"igx-switch-0\"`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.id = `igx-switch-${nextId++}`;\n /**\n * Sets/gets the id of the `label` element of the switch component.\n * If not set, the label of the first switch component will have value `\"igx-switch-0-label\"`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.labelId = `${this.id}-label`;\n /**\n * Sets/gets the value of the `tabindex` attribute.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.tabindex = null;\n /**\n * Sets/gets the position of the `label` in the switch component.\n * If not set, `labelPosition` will have value `\"after\"`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.labelPosition = 'after';\n /**\n * Enables/Disables the ripple effect\n * If not set, `disableRipple` will have value `false`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.disableRipple = false;\n /**\n * Sets/gets the `aria-labelledBy` attribute.\n * If not set, the value of `aria-labelledBy` will be equal to the value of `labelId` attribute.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.ariaLabelledBy = this.labelId;\n /**\n * Sets/gets the value of the `aria-label` attribute.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.ariaLabel = null;\n /**\n * An event that is emitted after the switch state is changed.\n * Provides references to the `IgxSwitchComponent` and the `checked` property as event arguments.\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n this.change = new EventEmitter();\n /**\n * Returns the class of the switch component.\n *\n * @example\n * ```typescript\n * let switchClass = this.switch.cssClass;\n * ```\n */\n this.cssClass = 'igx-switch';\n /**\n * Sets/gets whether the switch component is on focus.\n * Default value is `false`.\n *\n * @example\n * ```typescript\n * this.switch.focused = true;\n * ```\n */\n this.focused = false;\n /**\n * @hidden\n * @internal\n */\n this.inputId = `${this.id}-input`;\n /**\n * @hidden\n * @internal\n */\n this._checked = false;\n /**\n * @hidden\n * @internal\n */\n this._required = false;\n /**\n * @hidden\n * @internal\n */\n this._disabled = false;\n /**\n * @hidden\n * @internal\n */\n this._invalid = false;\n /**\n * @hidden\n * @internal\n */\n this._onTouchedCallback = noop;\n /**\n * @hidden\n * @internal\n */\n this._onChangeCallback = noop;\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n /**\n * @hidden\n * @internal\n */\n ngAfterViewInit() {\n var _a, _b;\n if (this.ngControl) {\n this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.updateValidityState.bind(this));\n if (this.ngControl.control.validator || this.ngControl.control.asyncValidator) {\n this._required = (_b = (_a = this.ngControl) === null || _a === void 0 ? void 0 : _a.control) === null || _b === void 0 ? void 0 : _b.hasValidator(Validators.required);\n this.cdr.detectChanges();\n }\n }\n }\n /**\n * @hidden\n * @internal\n */\n onKeyUp(event) {\n event.stopPropagation();\n this.focused = true;\n }\n /**\n * @hidden\n * @internal\n */\n _onSwitchClick() {\n if (this.disabled) {\n return;\n }\n this.nativeCheckbox.nativeElement.focus();\n this.checked = !this.checked;\n this.updateValidityState();\n // K.D. March 23, 2021 Emitting on click and not on the setter because otherwise every component\n // bound on change would have to perform self checks for weather the value has changed because\n // of the initial set on initialization\n this.change.emit({ checked: this.checked, switch: this });\n }\n /**\n * @hidden\n * @internal\n */\n _onSwitchChange(event) {\n event.stopPropagation();\n }\n /**\n * @hidden\n * @internal\n */\n onBlur() {\n this.focused = false;\n this._onTouchedCallback();\n this.updateValidityState();\n }\n /**\n * @hidden\n * @internal\n */\n writeValue(value) {\n this._checked = value;\n }\n /**\n * @hidden\n * @internal\n */\n getEditElement() {\n return this.nativeCheckbox.nativeElement;\n }\n /**\n * @hidden\n * @internal\n */\n get labelClass() {\n switch (this.labelPosition) {\n case SwitchLabelPosition.BEFORE:\n return `${this.cssClass}__label--before`;\n case SwitchLabelPosition.AFTER:\n default:\n return `${this.cssClass}__label`;\n }\n }\n /**\n * @hidden\n * @internal\n */\n registerOnChange(fn) {\n this._onChangeCallback = fn;\n }\n /**\n * @hidden\n * @internal\n */\n registerOnTouched(fn) {\n this._onTouchedCallback = fn;\n }\n /**\n * @hidden\n * @internal\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n * @internal\n */\n updateValidityState() {\n if (this.ngControl) {\n if (!this.disabled && (this.ngControl.control.touched || this.ngControl.control.dirty)) {\n // the control is not disabled and is touched or dirty\n this._invalid = this.ngControl.invalid;\n }\n else {\n // if the control is untouched, pristine, or disabled, its state is initial. This is when the user did not interact\n // with the switch or when the form/control is reset\n this._invalid = false;\n }\n }\n else {\n this.checkNativeValidity();\n }\n }\n /**\n * A function to assign a native validity property of a swicth.\n * This should be used when there's no ngControl\n *\n * @hidden\n * @internal\n */\n checkNativeValidity() {\n if (!this.disabled && this._required && !this.checked) {\n this._invalid = true;\n }\n else {\n this._invalid = false;\n }\n }\n}\nIgxSwitchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSwitchComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i5.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxSwitchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSwitchComponent, selector: \"igx-switch\", inputs: { id: \"id\", labelId: \"labelId\", value: \"value\", name: \"name\", tabindex: \"tabindex\", labelPosition: \"labelPosition\", disableRipple: \"disableRipple\", required: \"required\", ariaLabelledBy: [\"aria-labelledby\", \"ariaLabelledBy\"], ariaLabel: [\"aria-label\", \"ariaLabel\"], checked: \"checked\", disabled: \"disabled\", invalid: \"invalid\" }, outputs: { change: \"change\" }, host: { listeners: { \"keyup\": \"onKeyUp($event)\", \"click\": \"_onSwitchClick()\", \"blur\": \"onBlur()\" }, properties: { \"attr.id\": \"this.id\", \"class.igx-switch\": \"this.cssClass\", \"class.igx-switch--checked\": \"this.checked\", \"class.igx-switch--disabled\": \"this.disabled\", \"class.igx-switch--invalid\": \"this.invalid\", \"class.igx-switch--focused\": \"this.focused\" } }, providers: [{\n provide: EDITOR_PROVIDER,\n useExisting: IgxSwitchComponent,\n multi: true\n }], viewQueries: [{ propertyName: \"nativeCheckbox\", first: true, predicate: [\"checkbox\"], descendants: true, static: true }, { propertyName: \"nativeLabel\", first: true, predicate: [\"label\"], descendants: true, static: true }, { propertyName: \"placeholderLabel\", first: true, predicate: [\"placeholderLabel\"], descendants: true, static: true }], ngImport: i0, template: \"\\n\\n\\n
    \\n
    \\n
    \\n
    \\n\\n\\n \\n\\n\", dependencies: [{ kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSwitchComponent, decorators: [{\n type: Component,\n args: [{ providers: [{\n provide: EDITOR_PROVIDER,\n useExisting: IgxSwitchComponent,\n multi: true\n }], selector: 'igx-switch', template: \"\\n\\n\\n
    \\n
    \\n
    \\n
    \\n\\n\\n \\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i5.NgControl, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }];\n }, propDecorators: { nativeCheckbox: [{\n type: ViewChild,\n args: ['checkbox', { static: true }]\n }], nativeLabel: [{\n type: ViewChild,\n args: ['label', { static: true }]\n }], placeholderLabel: [{\n type: ViewChild,\n args: ['placeholderLabel', { static: true }]\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], labelId: [{\n type: Input\n }], value: [{\n type: Input\n }], name: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], disableRipple: [{\n type: Input\n }], required: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input,\n args: ['aria-labelledby']\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], change: [{\n type: Output\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-switch']\n }], checked: [{\n type: HostBinding,\n args: ['class.igx-switch--checked']\n }, {\n type: Input\n }], disabled: [{\n type: HostBinding,\n args: ['class.igx-switch--disabled']\n }, {\n type: Input\n }], invalid: [{\n type: HostBinding,\n args: ['class.igx-switch--invalid']\n }, {\n type: Input\n }], focused: [{\n type: HostBinding,\n args: ['class.igx-switch--focused']\n }], onKeyUp: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }], _onSwitchClick: [{\n type: HostListener,\n args: ['click']\n }], onBlur: [{\n type: HostListener,\n args: ['blur']\n }] } });\n/**\n * @hidden\n */\nclass IgxSwitchModule {\n}\nIgxSwitchModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSwitchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxSwitchModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSwitchModule, declarations: [IgxSwitchComponent], imports: [IgxRippleModule], exports: [IgxSwitchComponent] });\nIgxSwitchModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSwitchModule, imports: [IgxRippleModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSwitchModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxSwitchComponent],\n exports: [IgxSwitchComponent],\n imports: [IgxRippleModule]\n }]\n }] });\n\n/** @hidden */\nclass IgxTabsBase {\n}\n/** @hidden */\nclass IgxTabItemBase {\n}\n/** @hidden */\nclass IgxTabHeaderBase {\n}\n/** @hidden */\nclass IgxTabContentBase {\n}\n\nclass IgxTabItemDirective {\n /**\n * An @Input property which determines whether an item is selected.\n */\n get selected() {\n return this._selected;\n }\n ;\n set selected(value) {\n if (this._selected !== value) {\n this._selected = value;\n this.tabs.selectTab(this, this._selected);\n this.selectedChange.emit(this._selected);\n }\n }\n /** @hidden */\n constructor(tabs) {\n this.tabs = tabs;\n /**\n * Output to enable support for two-way binding on [(selected)]\n */\n this.selectedChange = new EventEmitter();\n /**\n * An @Input property that allows you to enable/disable the item.\n */\n this.disabled = false;\n /** @hidden */\n this.direction = Direction.NONE;\n this._selected = false;\n }\n}\nIgxTabItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabItemDirective, deps: [{ token: IgxTabsBase }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTabItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTabItemDirective, inputs: { disabled: \"disabled\", selected: \"selected\" }, outputs: { selectedChange: \"selectedChange\" }, queries: [{ propertyName: \"headerComponent\", first: true, predicate: IgxTabHeaderBase, descendants: true }, { propertyName: \"panelComponent\", first: true, predicate: IgxTabContentBase, descendants: true }], viewQueries: [{ propertyName: \"headerTemplate\", first: true, predicate: [\"headerTemplate\"], descendants: true, static: true }, { propertyName: \"panelTemplate\", first: true, predicate: [\"panelTemplate\"], descendants: true, static: true }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabItemDirective, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: IgxTabsBase }]; }, propDecorators: { headerComponent: [{\n type: ContentChild,\n args: [IgxTabHeaderBase]\n }], panelComponent: [{\n type: ContentChild,\n args: [IgxTabContentBase]\n }], headerTemplate: [{\n type: ViewChild,\n args: ['headerTemplate', { static: true }]\n }], panelTemplate: [{\n type: ViewChild,\n args: ['panelTemplate', { static: true }]\n }], selectedChange: [{\n type: Output\n }], disabled: [{\n type: Input\n }], selected: [{\n type: Input\n }] } });\n\nclass IgxTabHeaderDirective {\n /** @hidden */\n constructor(tabs, tab, elementRef, platform) {\n this.tabs = tabs;\n this.tab = tab;\n this.elementRef = elementRef;\n this.platform = platform;\n /** @hidden */\n this.role = 'tab';\n }\n /** @hidden */\n get tabIndex() {\n return this.tab.selected ? 0 : -1;\n }\n /** @hidden */\n get ariaSelected() {\n return this.tab.selected;\n }\n /** @hidden */\n get ariaDisabled() {\n return this.tab.disabled;\n }\n /** @hidden */\n onClick() {\n if (this.tab.panelComponent) {\n this.tabs.selectTab(this.tab, true);\n }\n }\n /** @hidden */\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n ;\n}\nIgxTabHeaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabHeaderDirective, deps: [{ token: IgxTabsBase }, { token: IgxTabItemDirective }, { token: i0.ElementRef }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTabHeaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTabHeaderDirective, host: { listeners: { \"click\": \"onClick()\" }, properties: { \"attr.role\": \"this.role\", \"attr.tabindex\": \"this.tabIndex\", \"attr.aria-selected\": \"this.ariaSelected\", \"attr.aria-disabled\": \"this.ariaDisabled\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabHeaderDirective, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: IgxTabsBase }, { type: IgxTabItemDirective }, { type: i0.ElementRef }, { type: PlatformUtil }]; }, propDecorators: { role: [{\n type: HostBinding,\n args: ['attr.role']\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], ariaSelected: [{\n type: HostBinding,\n args: ['attr.aria-selected']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }] } });\n\nclass IgxTabContentDirective {\n /** @hidden */\n constructor(tab, elementRef) {\n this.tab = tab;\n this.elementRef = elementRef;\n /** @hidden */\n this.role = 'tabpanel';\n }\n /** @hidden */\n get tabIndex() {\n return this.tab.selected ? 0 : -1;\n }\n /** @hidden */\n get zIndex() {\n return this.tab.selected ? 'auto' : -1;\n }\n /** @hidden */\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n ;\n}\nIgxTabContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabContentDirective, deps: [{ token: IgxTabItemDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTabContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTabContentDirective, host: { properties: { \"attr.role\": \"this.role\", \"attr.tabindex\": \"this.tabIndex\", \"style.z-index\": \"this.zIndex\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabContentDirective, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: IgxTabItemDirective }, { type: i0.ElementRef }]; }, propDecorators: { role: [{\n type: HostBinding,\n args: ['attr.role']\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], zIndex: [{\n type: HostBinding,\n args: ['style.z-index']\n }] } });\n\nclass IgxTabsDirective extends IgxCarouselComponentBase {\n /**\n * An @Input property that gets/sets the index of the selected item.\n * Default value is 0 if contents are defined otherwise defaults to -1.\n */\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(value) {\n if (this._selectedIndex !== value) {\n let newIndex = value;\n const oldIndex = this._selectedIndex;\n const args = {\n owner: this,\n cancel: false,\n oldIndex,\n newIndex\n };\n this.selectedIndexChanging.emit(args);\n if (!args.cancel) {\n newIndex = args.newIndex;\n this._selectedIndex = newIndex;\n this.selectedIndexChange.emit(this._selectedIndex);\n }\n this.updateSelectedTabs(oldIndex);\n }\n }\n /**\n * Enables/disables the transition animation of the contents.\n */\n get disableAnimation() {\n return this._disableAnimation;\n }\n set disableAnimation(value) {\n this._disableAnimation = value;\n }\n /**\n * Gets the selected item.\n */\n get selectedItem() {\n return this.items && this.selectedIndex >= 0 && this.selectedIndex < this.items.length ?\n this.items.get(this.selectedIndex) : null;\n }\n /** @hidden */\n constructor(animationService, cdr, dir) {\n super(animationService, cdr);\n this.dir = dir;\n /**\n * Output to enable support for two-way binding on [(selectedIndex)]\n */\n this.selectedIndexChange = new EventEmitter();\n /**\n * Emitted when the selected index is about to change.\n */\n this.selectedIndexChanging = new EventEmitter();\n /**\n * Emitted when the selected item is changed.\n */\n this.selectedItemChange = new EventEmitter();\n /** @hidden */\n this._disableAnimation = false;\n this._selectedIndex = -1;\n }\n /** @hidden */\n ngAfterViewInit() {\n if (this._selectedIndex === -1) {\n const hasSelectedTab = this.items.some((tab, i) => {\n if (tab.selected) {\n this._selectedIndex = i;\n }\n return tab.selected;\n });\n if (!hasSelectedTab && this.hasPanels) {\n this._selectedIndex = 0;\n }\n }\n // Use promise to avoid expression changed after check error\n Promise.resolve().then(() => {\n this.updateSelectedTabs(null, false);\n });\n this._itemChanges$ = this.items.changes.subscribe(() => {\n this.onItemChanges();\n });\n this.setAttributes();\n }\n /** @hidden */\n ngOnDestroy() {\n if (this._itemChanges$) {\n this._itemChanges$.unsubscribe();\n }\n }\n /** @hidden */\n selectTab(tab, selected) {\n if (!this.items) {\n return;\n }\n const tabs = this.items.toArray();\n if (selected) {\n const index = tabs.indexOf(tab);\n if (index > -1) {\n this.selectedIndex = index;\n }\n }\n else {\n if (tabs.every(t => !t.selected)) {\n this.selectedIndex = -1;\n }\n }\n }\n /** @hidden */\n getPreviousElement() {\n return this.previousItem.panelComponent.nativeElement;\n }\n /** @hidden */\n getCurrentElement() {\n return this.currentItem.panelComponent.nativeElement;\n }\n /** @hidden */\n scrollTabHeaderIntoView() {\n }\n /** @hidden */\n onItemChanges() {\n this.setAttributes();\n // Check if there is selected tab\n let selectedIndex = -1;\n this.items.some((tab, i) => {\n if (tab.selected) {\n selectedIndex = i;\n }\n return tab.selected;\n });\n if (selectedIndex >= 0) {\n // Set the selected index to the tab that has selected=true\n Promise.resolve().then(() => {\n this.selectedIndex = selectedIndex;\n });\n }\n else {\n if (this.selectedIndex >= 0 && this.selectedIndex < this.items.length) {\n // Select the tab on the same index the previous selected tab was\n Promise.resolve().then(() => {\n this.updateSelectedTabs(null);\n });\n }\n else if (this.selectedIndex >= this.items.length) {\n // Select the last tab\n Promise.resolve().then(() => {\n this.selectedIndex = this.items.length - 1;\n });\n }\n }\n }\n setAttributes() {\n this.items.forEach(item => {\n if (item.panelComponent && !item.headerComponent.nativeElement.getAttribute('id')) {\n const id = this.getNextTabId();\n const tabHeaderId = `${this.componentName}-header-${id}`;\n const tabPanelId = `${this.componentName}-content-${id}`;\n this.setHeaderAttribute(item, 'id', tabHeaderId);\n this.setHeaderAttribute(item, 'aria-controls', tabPanelId);\n this.setPanelAttribute(item, 'id', tabPanelId);\n this.setPanelAttribute(item, 'aria-labelledby', tabHeaderId);\n }\n });\n }\n setHeaderAttribute(item, attrName, value) {\n item.headerComponent.nativeElement.setAttribute(attrName, value);\n }\n setPanelAttribute(item, attrName, value) {\n item.panelComponent.nativeElement.setAttribute(attrName, value);\n }\n get hasPanels() {\n return this.panels && this.panels.length;\n }\n updateSelectedTabs(oldSelectedIndex, raiseEvent = true) {\n if (!this.items) {\n return;\n }\n let newTab;\n const oldTab = this.currentItem;\n // First select the new tab\n if (this._selectedIndex >= 0 && this._selectedIndex < this.items.length) {\n newTab = this.items.get(this._selectedIndex);\n newTab.selected = true;\n }\n // Then unselect the other tabs\n this.items.forEach((tab, i) => {\n if (i !== this._selectedIndex) {\n tab.selected = false;\n }\n });\n if (this._selectedIndex !== oldSelectedIndex) {\n this.scrollTabHeaderIntoView();\n this.triggerPanelAnimations(oldSelectedIndex);\n if (raiseEvent && newTab !== oldTab) {\n this.selectedItemChange.emit({\n owner: this,\n newItem: newTab,\n oldItem: oldTab\n });\n }\n }\n }\n triggerPanelAnimations(oldSelectedIndex) {\n const item = this.items.get(this._selectedIndex);\n if (item &&\n !this.disableAnimation &&\n this.hasPanels &&\n this.currentItem &&\n !this.currentItem.selected) {\n item.direction = (!this.dir.rtl && this._selectedIndex > oldSelectedIndex) ||\n (this.dir.rtl && this._selectedIndex < oldSelectedIndex)\n ? Direction.NEXT : Direction.PREV;\n if (this.previousItem && this.previousItem.previous) {\n this.previousItem.previous = false;\n }\n this.currentItem.direction = item.direction;\n this.previousItem = this.currentItem;\n this.currentItem = item;\n this.triggerAnimations();\n }\n else {\n this.currentItem = item;\n }\n }\n}\nIgxTabsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabsDirective, deps: [{ token: IgxAngularAnimationService }, { token: i0.ChangeDetectorRef }, { token: IgxDirectionality }], target: i0.ɵɵFactoryTarget.Directive });\nIgxTabsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTabsDirective, inputs: { selectedIndex: \"selectedIndex\", disableAnimation: \"disableAnimation\" }, outputs: { selectedIndexChange: \"selectedIndexChange\", selectedIndexChanging: \"selectedIndexChanging\", selectedItemChange: \"selectedItemChange\" }, queries: [{ propertyName: \"items\", predicate: IgxTabItemDirective }, { propertyName: \"panels\", predicate: IgxTabContentBase, descendants: true }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabsDirective, decorators: [{\n type: Directive\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IgxAngularAnimationService]\n }] }, { type: i0.ChangeDetectorRef }, { type: IgxDirectionality }];\n }, propDecorators: { selectedIndex: [{\n type: Input\n }], disableAnimation: [{\n type: Input\n }], selectedIndexChange: [{\n type: Output\n }], selectedIndexChanging: [{\n type: Output\n }], selectedItemChange: [{\n type: Output\n }], items: [{\n type: ContentChildren,\n args: [IgxTabItemDirective]\n }], panels: [{\n type: ContentChildren,\n args: [IgxTabContentBase, { descendants: true }]\n }] } });\n\n/** @hidden */\nlet NEXT_BOTTOM_NAV_ITEM_ID = 0;\n/**\n * Bottom Navigation component enables the user to navigate among a number of contents displayed in a single view.\n *\n * @igxModule IgxBottomNavModule\n *\n * @igxTheme igx-bottom-nav-theme\n *\n * @igxKeywords bottom navigation\n *\n * @igxGroup Layouts\n *\n * @remarks\n * The Ignite UI for Angular Bottom Navigation component enables the user to navigate among a number of contents\n * displayed in a single view. The navigation through the contents is accomplished with the tab buttons located at bottom.\n *\n * @example\n * ```html\n * \n * \n * \n * folder\n * Tab 1\n * \n * \n * Content 1\n * \n * \n * ...\n * \n * ```\n */\nclass IgxBottomNavComponent extends IgxTabsDirective {\n constructor() {\n super(...arguments);\n /** @hidden */\n this._disableAnimation = true;\n /** @hidden */\n this.componentName = 'igx-bottom-nav';\n }\n /** @hidden */\n getNextTabId() {\n return NEXT_BOTTOM_NAV_ITEM_ID++;\n }\n}\nIgxBottomNavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxBottomNavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxBottomNavComponent, selector: \"igx-bottom-nav\", providers: [{ provide: IgxTabsBase, useExisting: IgxBottomNavComponent }], usesInheritance: true, ngImport: i0, template: \"\\n \\n\\n\\n\\n \\n \\n \\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-bottom-nav', providers: [{ provide: IgxTabsBase, useExisting: IgxBottomNavComponent }], template: \"\\n \\n\\n\\n\\n \\n \\n \\n\\n\" }]\n }] });\n\nclass IgxBottomNavItemComponent extends IgxTabItemDirective {\n}\nIgxBottomNavItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxBottomNavItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxBottomNavItemComponent, selector: \"igx-bottom-nav-item\", providers: [{ provide: IgxTabItemDirective, useExisting: IgxBottomNavItemComponent }], usesInheritance: true, ngImport: i0, template: \"\\n \\n\\n\\n \\n\\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-bottom-nav-item', providers: [{ provide: IgxTabItemDirective, useExisting: IgxBottomNavItemComponent }], template: \"\\n \\n\\n\\n \\n\\n\" }]\n }] });\n\nclass IgxBottomNavHeaderComponent extends IgxTabHeaderDirective {\n /** @hidden */\n get cssClassSelected() {\n return this.tab.selected;\n }\n /** @hidden */\n get cssClassDisabled() {\n return this.tab.disabled;\n }\n /** @hidden */\n get cssClass() {\n return (!this.tab.disabled && !this.tab.selected);\n }\n}\nIgxBottomNavHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavHeaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxBottomNavHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxBottomNavHeaderComponent, selector: \"igx-bottom-nav-header\", host: { properties: { \"class.igx-bottom-nav__menu-item--selected\": \"this.cssClassSelected\", \"class.igx-bottom-nav__menu-item--disabled\": \"this.cssClassDisabled\", \"class.igx-bottom-nav__menu-item\": \"this.cssClass\" } }, providers: [{ provide: IgxTabHeaderBase, useExisting: IgxBottomNavHeaderComponent }], usesInheritance: true, ngImport: i0, template: \"\\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavHeaderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-bottom-nav-header', providers: [{ provide: IgxTabHeaderBase, useExisting: IgxBottomNavHeaderComponent }], template: \"\\n\" }]\n }], propDecorators: { cssClassSelected: [{\n type: HostBinding,\n args: ['class.igx-bottom-nav__menu-item--selected']\n }], cssClassDisabled: [{\n type: HostBinding,\n args: ['class.igx-bottom-nav__menu-item--disabled']\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-bottom-nav__menu-item']\n }] } });\n\nclass IgxBottomNavHeaderLabelDirective {\n}\nIgxBottomNavHeaderLabelDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavHeaderLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxBottomNavHeaderLabelDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxBottomNavHeaderLabelDirective, selector: \"igx-bottom-nav-header-label,[igxBottomNavHeaderLabel]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavHeaderLabelDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-bottom-nav-header-label,[igxBottomNavHeaderLabel]'\n }]\n }] });\nclass IgxBottomNavHeaderIconDirective {\n}\nIgxBottomNavHeaderIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxBottomNavHeaderIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxBottomNavHeaderIconDirective, selector: \"igx-bottom-nav-header-icon,[igxBottomNavHeaderIcon]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavHeaderIconDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-bottom-nav-header-icon,[igxBottomNavHeaderIcon]'\n }]\n }] });\n\nclass IgxBottomNavContentComponent extends IgxTabContentDirective {\n constructor() {\n super(...arguments);\n /** @hidden */\n this.defaultClass = true;\n }\n}\nIgxBottomNavContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavContentComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxBottomNavContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxBottomNavContentComponent, selector: \"igx-bottom-nav-content\", host: { properties: { \"class.igx-bottom-nav__panel\": \"this.defaultClass\" } }, providers: [{ provide: IgxTabContentBase, useExisting: IgxBottomNavContentComponent }], usesInheritance: true, ngImport: i0, template: \"\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavContentComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-bottom-nav-content', providers: [{ provide: IgxTabContentBase, useExisting: IgxBottomNavContentComponent }], template: \"\\n\" }]\n }], propDecorators: { defaultClass: [{\n type: HostBinding,\n args: ['class.igx-bottom-nav__panel']\n }] } });\n\n/** @hidden */\nclass IgxBottomNavModule {\n}\nIgxBottomNavModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxBottomNavModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavModule, declarations: [IgxBottomNavComponent,\n IgxBottomNavItemComponent,\n IgxBottomNavHeaderComponent,\n IgxBottomNavContentComponent,\n IgxBottomNavHeaderLabelDirective,\n IgxBottomNavHeaderIconDirective], imports: [CommonModule, IgxIconModule, IgxRippleModule], exports: [IgxBottomNavComponent,\n IgxBottomNavItemComponent,\n IgxBottomNavHeaderComponent,\n IgxBottomNavContentComponent,\n IgxBottomNavHeaderLabelDirective,\n IgxBottomNavHeaderIconDirective] });\nIgxBottomNavModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavModule, imports: [CommonModule, IgxIconModule, IgxRippleModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxBottomNavModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxBottomNavComponent,\n IgxBottomNavItemComponent,\n IgxBottomNavHeaderComponent,\n IgxBottomNavContentComponent,\n IgxBottomNavHeaderLabelDirective,\n IgxBottomNavHeaderIconDirective\n ],\n exports: [\n IgxBottomNavComponent,\n IgxBottomNavItemComponent,\n IgxBottomNavHeaderComponent,\n IgxBottomNavContentComponent,\n IgxBottomNavHeaderLabelDirective,\n IgxBottomNavHeaderIconDirective\n ],\n imports: [CommonModule, IgxIconModule, IgxRippleModule]\n }]\n }] });\n\nconst IgxTabsAlignment = mkenum({\n start: 'start',\n end: 'end',\n center: 'center',\n justify: 'justify'\n});\n/** @hidden */\nvar TabScrollButtonStyle;\n(function (TabScrollButtonStyle) {\n TabScrollButtonStyle[\"Enabled\"] = \"enabled\";\n TabScrollButtonStyle[\"Disabled\"] = \"disabled\";\n TabScrollButtonStyle[\"NotDisplayed\"] = \"not_displayed\";\n})(TabScrollButtonStyle || (TabScrollButtonStyle = {}));\n/** @hidden */\nlet NEXT_TAB_ID = 0;\n/**\n * Tabs component is used to organize or switch between similar data sets.\n *\n * @igxModule IgxTabsModule\n *\n * @igxTheme igx-tabs-theme\n *\n * @igxKeywords tabs\n *\n * @igxGroup Layouts\n *\n * @remarks\n * The Ignite UI for Angular Tabs component places tabs at the top and allows for scrolling when there are multiple tab items on the screen.\n *\n * @example\n * ```html\n * \n * \n * \n * folder\n * Tab 1\n * \n * \n * Content 1\n * \n * \n * ...\n * \n * ```\n */\nclass IgxTabsComponent extends IgxTabsDirective {\n /**\n * An @Input property which determines the tab alignment. Defaults to `start`.\n */\n get tabAlignment() {\n return this._tabAlignment;\n }\n ;\n set tabAlignment(value) {\n this._tabAlignment = value;\n requestAnimationFrame(() => {\n this.updateScrollButtons();\n this.realignSelectedIndicator();\n });\n }\n constructor(animationService, cdr, ngZone, dir) {\n super(animationService, cdr, dir);\n this.ngZone = ngZone;\n /** @hidden */\n this.defaultClass = true;\n /** @hidden */\n this.offset = 0;\n /** @hidden */\n this.componentName = 'igx-tabs';\n this._tabAlignment = 'start';\n }\n /** @hidden @internal */\n ngAfterViewInit() {\n super.ngAfterViewInit();\n this.ngZone.runOutsideAngular(() => {\n this._resizeObserver = new (getResizeObserver())(() => {\n this.updateScrollButtons();\n this.realignSelectedIndicator();\n });\n this._resizeObserver.observe(this.headerContainer.nativeElement);\n this._resizeObserver.observe(this.viewPort.nativeElement);\n });\n }\n /** @hidden @internal */\n ngOnDestroy() {\n super.ngOnDestroy();\n this.ngZone.runOutsideAngular(() => {\n var _a;\n (_a = this._resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n });\n }\n /** @hidden */\n scrollPrev() {\n this.scroll(false);\n }\n /** @hidden */\n scrollNext() {\n this.scroll(true);\n }\n /** @hidden */\n realignSelectedIndicator() {\n if (this.selectedIndex >= 0 && this.selectedIndex < this.items.length) {\n const header = this.items.get(this.selectedIndex).headerComponent.nativeElement;\n this.alignSelectedIndicator(header, 0);\n }\n }\n /** @hidden */\n resolveHeaderScrollClasses() {\n return {\n 'igx-tabs__header-scroll--start': this.tabAlignment === 'start',\n 'igx-tabs__header-scroll--end': this.tabAlignment === 'end',\n 'igx-tabs__header-scroll--center': this.tabAlignment === 'center',\n 'igx-tabs__header-scroll--justify': this.tabAlignment === 'justify',\n };\n }\n /** @hidden */\n scrollTabHeaderIntoView() {\n if (this.selectedIndex >= 0) {\n const tabItems = this.items.toArray();\n const tabHeaderNativeElement = tabItems[this.selectedIndex].headerComponent.nativeElement;\n // Scroll left if there is need\n if (this.getElementOffset(tabHeaderNativeElement) < this.offset) {\n this.scrollElement(tabHeaderNativeElement, false);\n }\n // Scroll right if there is need\n const viewPortOffsetWidth = this.viewPort.nativeElement.offsetWidth;\n const delta = (this.getElementOffset(tabHeaderNativeElement) + tabHeaderNativeElement.offsetWidth) - (viewPortOffsetWidth + this.offset);\n // Fix for IE 11, a difference is accumulated from the widths calculations\n if (delta > 1) {\n this.scrollElement(tabHeaderNativeElement, true);\n }\n this.alignSelectedIndicator(tabHeaderNativeElement);\n }\n else {\n this.hideSelectedIndicator();\n }\n }\n /** @hidden */\n getNextTabId() {\n return NEXT_TAB_ID++;\n }\n /** @hidden */\n onItemChanges() {\n super.onItemChanges();\n Promise.resolve().then(() => {\n this.updateScrollButtons();\n });\n }\n alignSelectedIndicator(element, duration = 0.3) {\n if (this.selectedIndicator) {\n this.selectedIndicator.nativeElement.style.visibility = 'visible';\n this.selectedIndicator.nativeElement.style.transitionDuration = duration > 0 ? `${duration}s` : 'initial';\n this.selectedIndicator.nativeElement.style.width = `${element.offsetWidth}px`;\n this.selectedIndicator.nativeElement.style.transform = `translate(${element.offsetLeft}px)`;\n }\n }\n hideSelectedIndicator() {\n if (this.selectedIndicator) {\n this.selectedIndicator.nativeElement.style.visibility = 'hidden';\n }\n }\n scroll(scrollNext) {\n const tabsArray = this.items.toArray();\n for (let index = 0; index < tabsArray.length; index++) {\n const tab = tabsArray[index];\n const element = tab.headerComponent.nativeElement;\n if (scrollNext) {\n if (element.offsetWidth + this.getElementOffset(element) > this.viewPort.nativeElement.offsetWidth + this.offset) {\n this.scrollElement(element, scrollNext);\n break;\n }\n }\n else {\n if (this.getElementOffset(element) >= this.offset) {\n this.scrollElement(tabsArray[index - 1].headerComponent.nativeElement, scrollNext);\n break;\n }\n }\n }\n }\n scrollElement(element, scrollNext) {\n const viewPortWidth = this.viewPort.nativeElement.offsetWidth;\n this.offset = (scrollNext) ? element.offsetWidth + this.getElementOffset(element) - viewPortWidth : this.getElementOffset(element);\n this.viewPort.nativeElement.scrollLeft = this.getOffset(this.offset);\n this.updateScrollButtons();\n }\n updateScrollButtons() {\n const itemsContainerWidth = this.getTabItemsContainerWidth();\n const scrollPrevButtonStyle = this.resolveLeftScrollButtonStyle(itemsContainerWidth);\n this.setScrollButtonStyle(this.scrollPrevButton.nativeElement, scrollPrevButtonStyle);\n const scrollNextButtonStyle = this.resolveRightScrollButtonStyle(itemsContainerWidth);\n this.setScrollButtonStyle(this.scrollNextButton.nativeElement, scrollNextButtonStyle);\n }\n setScrollButtonStyle(button, buttonStyle) {\n if (buttonStyle === TabScrollButtonStyle.Enabled) {\n button.disabled = false;\n button.style.display = '';\n }\n else if (buttonStyle === TabScrollButtonStyle.Disabled) {\n button.disabled = true;\n button.style.display = '';\n }\n else if (buttonStyle === TabScrollButtonStyle.NotDisplayed) {\n button.style.display = 'none';\n }\n }\n resolveLeftScrollButtonStyle(itemsContainerWidth) {\n const headerContainerWidth = this.headerContainer.nativeElement.offsetWidth;\n const offset = this.offset;\n if (offset === 0) {\n // Fix for IE 11, a difference is accumulated from the widths calculations.\n if (itemsContainerWidth - headerContainerWidth <= 1) {\n return TabScrollButtonStyle.NotDisplayed;\n }\n return TabScrollButtonStyle.Disabled;\n }\n else {\n return TabScrollButtonStyle.Enabled;\n }\n }\n resolveRightScrollButtonStyle(itemsContainerWidth) {\n const viewPortWidth = this.viewPort.nativeElement.offsetWidth;\n const headerContainerWidth = this.headerContainer.nativeElement.offsetWidth;\n const offset = this.offset;\n const total = offset + viewPortWidth;\n // Fix for IE 11, a difference is accumulated from the widths calculations.\n if (itemsContainerWidth - headerContainerWidth <= 1 && offset === 0) {\n return TabScrollButtonStyle.NotDisplayed;\n }\n if (itemsContainerWidth > total) {\n return TabScrollButtonStyle.Enabled;\n }\n else {\n return TabScrollButtonStyle.Disabled;\n }\n }\n getTabItemsContainerWidth() {\n // We use this hacky way to get the width of the itemsContainer,\n // because there is inconsistency in IE we cannot use offsetWidth or scrollOffset.\n const itemsContainerChildrenCount = this.itemsContainer.nativeElement.children.length;\n let itemsContainerWidth = 0;\n if (itemsContainerChildrenCount > 1) {\n const lastTab = this.itemsContainer.nativeElement.children[itemsContainerChildrenCount - 1];\n itemsContainerWidth = this.getElementOffset(lastTab) + lastTab.offsetWidth;\n }\n return itemsContainerWidth;\n }\n getOffset(offset) {\n return this.dir.rtl ? -offset : offset;\n }\n getElementOffset(element) {\n return this.dir.rtl ? this.itemsWrapper.nativeElement.offsetWidth - element.offsetLeft - element.offsetWidth : element.offsetLeft;\n }\n}\nIgxTabsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabsComponent, deps: [{ token: IgxAngularAnimationService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: IgxDirectionality }], target: i0.ɵɵFactoryTarget.Component });\nIgxTabsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTabsComponent, selector: \"igx-tabs\", inputs: { tabAlignment: \"tabAlignment\" }, host: { properties: { \"class.igx-tabs\": \"this.defaultClass\" } }, providers: [{ provide: IgxTabsBase, useExisting: IgxTabsComponent }], viewQueries: [{ propertyName: \"headerContainer\", first: true, predicate: [\"headerContainer\"], descendants: true, static: true }, { propertyName: \"viewPort\", first: true, predicate: [\"viewPort\"], descendants: true, static: true }, { propertyName: \"itemsWrapper\", first: true, predicate: [\"itemsWrapper\"], descendants: true, static: true }, { propertyName: \"itemsContainer\", first: true, predicate: [\"itemsContainer\"], descendants: true, static: true }, { propertyName: \"selectedIndicator\", first: true, predicate: [\"selectedIndicator\"], descendants: true }, { propertyName: \"scrollPrevButton\", first: true, predicate: [\"scrollPrevButton\"], descendants: true }, { propertyName: \"scrollNextButton\", first: true, predicate: [\"scrollNextButton\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n
    0\\\" class=\\\"igx-tabs__header-active-indicator\\\">\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-tabs', providers: [{ provide: IgxTabsBase, useExisting: IgxTabsComponent }], template: \"
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n
    0\\\" class=\\\"igx-tabs__header-active-indicator\\\">\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \" }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IgxAngularAnimationService]\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: IgxDirectionality }];\n }, propDecorators: { tabAlignment: [{\n type: Input\n }], headerContainer: [{\n type: ViewChild,\n args: ['headerContainer', { static: true }]\n }], viewPort: [{\n type: ViewChild,\n args: ['viewPort', { static: true }]\n }], itemsWrapper: [{\n type: ViewChild,\n args: ['itemsWrapper', { static: true }]\n }], itemsContainer: [{\n type: ViewChild,\n args: ['itemsContainer', { static: true }]\n }], selectedIndicator: [{\n type: ViewChild,\n args: ['selectedIndicator']\n }], scrollPrevButton: [{\n type: ViewChild,\n args: ['scrollPrevButton']\n }], scrollNextButton: [{\n type: ViewChild,\n args: ['scrollNextButton']\n }], defaultClass: [{\n type: HostBinding,\n args: ['class.igx-tabs']\n }] } });\n\nclass IgxTabItemComponent extends IgxTabItemDirective {\n}\nIgxTabItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxTabItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTabItemComponent, selector: \"igx-tab-item\", providers: [{ provide: IgxTabItemDirective, useExisting: IgxTabItemComponent }], usesInheritance: true, ngImport: i0, template: \"\\n \\n\\n\\n \\n\\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-tab-item', providers: [{ provide: IgxTabItemDirective, useExisting: IgxTabItemComponent }], template: \"\\n \\n\\n\\n \\n\\n\" }]\n }] });\n\nclass IgxTabHeaderComponent extends IgxTabHeaderDirective {\n /** @hidden @internal */\n get provideCssClassSelected() {\n return this.tab.selected;\n }\n /** @hidden @internal */\n get provideCssClassDisabled() {\n return this.tab.disabled;\n }\n /** @hidden @internal */\n constructor(tabs, tab, elementRef, platform, ngZone, dir) {\n super(tabs, tab, elementRef, platform);\n this.tabs = tabs;\n this.ngZone = ngZone;\n this.dir = dir;\n /** @hidden @internal */\n this.cssClass = true;\n }\n /** @hidden @internal */\n keyDown(event) {\n let unsupportedKey = false;\n const itemsArray = this.tabs.items.toArray();\n const previousIndex = itemsArray.indexOf(this.tab);\n let newIndex = previousIndex;\n const hasDisabledItems = itemsArray.some((item) => item.disabled);\n switch (event.key) {\n case this.platform.KEYMAP.ARROW_RIGHT:\n newIndex = this.getNewSelectionIndex(newIndex, itemsArray, event.key, hasDisabledItems);\n break;\n case this.platform.KEYMAP.ARROW_LEFT:\n newIndex = this.getNewSelectionIndex(newIndex, itemsArray, event.key, hasDisabledItems);\n break;\n case this.platform.KEYMAP.HOME:\n event.preventDefault();\n newIndex = 0;\n while (itemsArray[newIndex].disabled && newIndex < itemsArray.length) {\n newIndex = newIndex === itemsArray.length - 1 ? 0 : newIndex + 1;\n }\n break;\n case this.platform.KEYMAP.END:\n event.preventDefault();\n newIndex = itemsArray.length - 1;\n while (hasDisabledItems && itemsArray[newIndex].disabled && newIndex > 0) {\n newIndex = newIndex === 0 ? itemsArray.length - 1 : newIndex - 1;\n }\n break;\n case this.platform.KEYMAP.ENTER:\n if (!this.tab.panelComponent) {\n this.nativeElement.click();\n }\n unsupportedKey = true;\n break;\n case this.platform.KEYMAP.SPACE:\n event.preventDefault();\n if (!this.tab.panelComponent) {\n this.nativeElement.click();\n }\n unsupportedKey = true;\n break;\n default:\n unsupportedKey = true;\n break;\n }\n if (!unsupportedKey) {\n itemsArray[newIndex].headerComponent.nativeElement.focus({ preventScroll: true });\n if (this.tab.panelComponent) {\n this.tabs.selectedIndex = newIndex;\n }\n }\n }\n /** @hidden @internal */\n ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n this._resizeObserver = new (getResizeObserver())(() => {\n this.tabs.realignSelectedIndicator();\n });\n this._resizeObserver.observe(this.nativeElement);\n });\n }\n /** @hidden @internal */\n ngOnDestroy() {\n this.ngZone.runOutsideAngular(() => {\n var _a;\n (_a = this._resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n });\n }\n getNewSelectionIndex(newIndex, itemsArray, key, hasDisabledItems) {\n if ((key === this.platform.KEYMAP.ARROW_RIGHT && !this.dir.rtl) || (key === this.platform.KEYMAP.ARROW_LEFT && this.dir.rtl)) {\n newIndex = newIndex === itemsArray.length - 1 ? 0 : newIndex + 1;\n while (hasDisabledItems && itemsArray[newIndex].disabled && newIndex < itemsArray.length) {\n newIndex = newIndex === itemsArray.length - 1 ? 0 : newIndex + 1;\n }\n }\n else {\n newIndex = newIndex === 0 ? itemsArray.length - 1 : newIndex - 1;\n while (hasDisabledItems && itemsArray[newIndex].disabled && newIndex >= 0) {\n newIndex = newIndex === 0 ? itemsArray.length - 1 : newIndex - 1;\n }\n }\n return newIndex;\n }\n}\nIgxTabHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabHeaderComponent, deps: [{ token: IgxTabsComponent }, { token: IgxTabItemDirective }, { token: i0.ElementRef }, { token: PlatformUtil }, { token: i0.NgZone }, { token: IgxDirectionality }], target: i0.ɵɵFactoryTarget.Component });\nIgxTabHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTabHeaderComponent, selector: \"igx-tab-header\", host: { listeners: { \"keydown\": \"keyDown($event)\" }, properties: { \"class.igx-tabs__header-item--selected\": \"this.provideCssClassSelected\", \"class.igx-tabs__header-item--disabled\": \"this.provideCssClassDisabled\", \"class.igx-tabs__header-item\": \"this.cssClass\" } }, providers: [{ provide: IgxTabHeaderBase, useExisting: IgxTabHeaderComponent }], usesInheritance: true, ngImport: i0, template: \"\\n\\n
    \\n \\n
    \\n\\n\\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabHeaderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-tab-header', providers: [{ provide: IgxTabHeaderBase, useExisting: IgxTabHeaderComponent }], template: \"\\n\\n
    \\n \\n
    \\n\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: IgxTabsComponent }, { type: IgxTabItemDirective }, { type: i0.ElementRef }, { type: PlatformUtil }, { type: i0.NgZone }, { type: IgxDirectionality }]; }, propDecorators: { provideCssClassSelected: [{\n type: HostBinding,\n args: ['class.igx-tabs__header-item--selected']\n }], provideCssClassDisabled: [{\n type: HostBinding,\n args: ['class.igx-tabs__header-item--disabled']\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-tabs__header-item']\n }], keyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n\nclass IgxTabHeaderLabelDirective {\n}\nIgxTabHeaderLabelDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabHeaderLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxTabHeaderLabelDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTabHeaderLabelDirective, selector: \"igx-tab-header-label,[igxTabHeaderLabel]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabHeaderLabelDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-tab-header-label,[igxTabHeaderLabel]'\n }]\n }] });\nclass IgxTabHeaderIconDirective {\n}\nIgxTabHeaderIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxTabHeaderIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTabHeaderIconDirective, selector: \"igx-tab-header-icon,[igxTabHeaderIcon]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabHeaderIconDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'igx-tab-header-icon,[igxTabHeaderIcon]'\n }]\n }] });\n\nclass IgxTabContentComponent extends IgxTabContentDirective {\n constructor() {\n super(...arguments);\n /** @hidden */\n this.cssClass = true;\n }\n}\nIgxTabContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabContentComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxTabContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxTabContentComponent, selector: \"igx-tab-content\", host: { properties: { \"class.igx-tabs__panel\": \"this.cssClass\" } }, providers: [{ provide: IgxTabContentBase, useExisting: IgxTabContentComponent }], usesInheritance: true, ngImport: i0, template: \"\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabContentComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-tab-content', providers: [{ provide: IgxTabContentBase, useExisting: IgxTabContentComponent }], template: \"\\n\" }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-tabs__panel']\n }] } });\n\n/** @hidden */\nclass IgxTabsModule {\n}\nIgxTabsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxTabsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabsModule, declarations: [IgxTabsComponent,\n IgxTabItemComponent,\n IgxTabHeaderComponent,\n IgxTabContentComponent,\n IgxTabHeaderLabelDirective,\n IgxTabHeaderIconDirective], imports: [CommonModule, IgxIconModule, IgxRippleModule, IgxPrefixModule, IgxSuffixModule], exports: [IgxTabsComponent,\n IgxTabItemComponent,\n IgxTabHeaderComponent,\n IgxTabContentComponent,\n IgxTabHeaderLabelDirective,\n IgxTabHeaderIconDirective,\n IgxPrefixModule,\n IgxSuffixModule] });\nIgxTabsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabsModule, imports: [CommonModule, IgxIconModule, IgxRippleModule, IgxPrefixModule, IgxSuffixModule, IgxPrefixModule,\n IgxSuffixModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxTabsModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxTabsComponent,\n IgxTabItemComponent,\n IgxTabHeaderComponent,\n IgxTabContentComponent,\n IgxTabHeaderLabelDirective,\n IgxTabHeaderIconDirective\n ],\n exports: [\n IgxTabsComponent,\n IgxTabItemComponent,\n IgxTabHeaderComponent,\n IgxTabContentComponent,\n IgxTabHeaderLabelDirective,\n IgxTabHeaderIconDirective,\n IgxPrefixModule,\n IgxSuffixModule\n ],\n imports: [CommonModule, IgxIconModule, IgxRippleModule, IgxPrefixModule, IgxSuffixModule]\n }]\n }] });\n\nlet NEXT_ID$1 = 0;\n/**\n * **Ignite UI for Angular Toast** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/toast)\n *\n * The Ignite UI Toast provides information and warning messages that are non-interactive and cannot\n * be dismissed by the user. Toasts can be displayed at the bottom, middle, or top of the page.\n *\n * Example:\n * ```html\n * \n * \n * Notification displayed\n * \n * ```\n */\nclass IgxToastComponent extends IgxNotificationsDirective {\n /**\n * Get the position and animation settings used by the toast.\n * ```typescript\n * @ViewChild('toast', { static: true }) public toast: IgxToastComponent;\n * let currentPosition: PositionSettings = this.toast.positionSettings\n * ```\n */\n get positionSettings() {\n return this._positionSettings;\n }\n /**\n * Set the position and animation settings used by the toast.\n * ```html\n * \n * ```\n * ```typescript\n * import { slideInTop, slideOutBottom } from 'igniteui-angular';\n * ...\n * @ViewChild('toast', { static: true }) public toast: IgxToastComponent;\n * public newPositionSettings: PositionSettings = {\n * openAnimation: useAnimation(slideInTop, { params: { duration: '1000ms', fromPosition: 'translateY(100%)'}}),\n * closeAnimation: useAnimation(slideOutBottom, { params: { duration: '1000ms', fromPosition: 'translateY(0)'}}),\n * horizontalDirection: HorizontalAlignment.Left,\n * verticalDirection: VerticalAlignment.Middle,\n * horizontalStartPoint: HorizontalAlignment.Left,\n * verticalStartPoint: VerticalAlignment.Middle\n * };\n * this.toast.positionSettings = this.newPositionSettings;\n * ```\n */\n set positionSettings(settings) {\n this._positionSettings = settings;\n }\n /**\n * Gets the nativeElement of the toast.\n * ```typescript\n * let nativeElement = this.toast.element;\n * ```\n *\n * @memberof IgxToastComponent\n */\n get element() {\n return this._element.nativeElement;\n }\n constructor(_element, cdr, navService, overlayService) {\n super(_element, cdr, overlayService, navService);\n this._element = _element;\n /**\n * @hidden\n */\n this.cssClass = 'igx-toast';\n /**\n * Sets/gets the `id` of the toast.\n * If not set, the `id` will have value `\"igx-toast-0\"`.\n * ```html\n * \n * ```\n * ```typescript\n * let toastId = this.toast.id;\n * ```\n */\n this.id = `igx-toast-${NEXT_ID$1++}`;\n /**\n * Sets/gets the `role` attribute.\n * If not set, `role` will have value `\"alert\"`.\n * ```html\n * \n * ```\n * ```typescript\n * let toastRole = this.toast.role;\n * ```\n *\n * @memberof IgxToastComponent\n */\n this.role = 'alert';\n /**\n * @hidden\n */\n this.isVisibleChange = new EventEmitter();\n this._positionSettings = {\n horizontalDirection: HorizontalAlignment.Center,\n verticalDirection: VerticalAlignment.Bottom,\n openAnimation: useAnimation(fadeIn),\n closeAnimation: useAnimation(fadeOut),\n };\n }\n /**\n * Shows the toast.\n * If `autoHide` is enabled, the toast will hide after `displayTime` is over.\n *\n * ```typescript\n * this.toast.open();\n * ```\n */\n open(message, settings) {\n if (message !== undefined) {\n this.textMessage = message;\n }\n if (settings !== undefined) {\n this.positionSettings = settings;\n }\n this.strategy = new GlobalPositionStrategy(this.positionSettings);\n super.open();\n }\n /**\n * Opens or closes the toast, depending on its current state.\n *\n * ```typescript\n * this.toast.toggle();\n * ```\n */\n toggle() {\n if (this.collapsed || this.isClosing) {\n this.open();\n }\n else {\n this.close();\n }\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.opened.pipe(takeUntil(this.destroy$)).subscribe(() => {\n const openedEventArgs = { owner: this, id: this._overlayId };\n this.isVisibleChange.emit(openedEventArgs);\n });\n this.closed.pipe(takeUntil(this.destroy$)).subscribe(() => {\n const closedEventArgs = { owner: this, id: this._overlayId };\n this.isVisibleChange.emit(closedEventArgs);\n });\n }\n}\nIgxToastComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToastComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxNavigationService, optional: true }, { token: IgxOverlayService }], target: i0.ɵɵFactoryTarget.Component });\nIgxToastComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxToastComponent, selector: \"igx-toast\", inputs: { id: \"id\", role: \"role\", positionSettings: \"positionSettings\" }, outputs: { isVisibleChange: \"isVisibleChange\" }, host: { properties: { \"class.igx-toast\": \"this.cssClass\", \"attr.id\": \"this.id\", \"attr.role\": \"this.role\" } }, usesInheritance: true, ngImport: i0, template: \"\\n{{ textMessage }}\\n\\n\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToastComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-toast', template: \"\\n{{ textMessage }}\\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxNavigationService, decorators: [{\n type: Optional\n }] }, { type: IgxOverlayService, decorators: [{\n type: Inject,\n args: [IgxOverlayService]\n }] }];\n }, propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-toast']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }, {\n type: Input\n }], isVisibleChange: [{\n type: Output\n }], positionSettings: [{\n type: Input\n }] } });\n/**\n * @hidden\n */\nclass IgxToastModule {\n}\nIgxToastModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToastModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxToastModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToastModule, declarations: [IgxToastComponent], imports: [CommonModule], exports: [IgxToastComponent] });\nIgxToastModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToastModule, imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxToastModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [IgxToastComponent],\n exports: [IgxToastComponent],\n imports: [CommonModule],\n }]\n }] });\n\n/**\n * Represents individual resizable/collapsible panes.\n *\n * @igxModule IgxSplitterModule\n *\n * @igxParent IgxSplitterComponent\n *\n * @igxKeywords pane\n *\n * @igxGroup presentation\n *\n * @remarks\n * Users can control the resize behavior via the min and max size properties.\n */\nclass IgxSplitterPaneComponent {\n /**\n * Gets/Sets the minimum allowed size of the current pane.\n *\n * @example\n * ```html\n * \n * ...\n * \n * ```\n */\n get minSize() {\n return this._minSize;\n }\n ;\n set minSize(value) {\n this._minSize = value;\n if (this.owner) {\n this.owner.panes.notifyOnChanges();\n }\n }\n /**\n * Gets/Set the maximum allowed size of the current pane.\n *\n * @example\n * ```html\n * \n * ...\n * \n * ```\n */\n get maxSize() {\n return this._maxSize;\n }\n ;\n set maxSize(value) {\n this._maxSize = value;\n if (this.owner) {\n this.owner.panes.notifyOnChanges();\n }\n }\n /**\n * Gets/Sets the size of the current pane.\n * * @example\n * ```html\n * \n * ...\n * \n * ```\n */\n get size() {\n return this._size;\n }\n set size(value) {\n this._size = value;\n this.el.nativeElement.style.flex = this.flex;\n }\n /** @hidden @internal */\n get isPercentageSize() {\n return this.size === 'auto' || this.size.indexOf('%') !== -1;\n }\n /** @hidden @internal */\n get dragSize() {\n return this._dragSize;\n }\n set dragSize(val) {\n this._dragSize = val;\n this.el.nativeElement.style.flex = this.flex;\n }\n /**\n *\n * @hidden @internal\n * Gets the host native element.\n */\n get element() {\n return this.el.nativeElement;\n }\n /**\n * @hidden @internal\n * Gets the `flex` property of the current `IgxSplitterPaneComponent`.\n */\n get flex() {\n const isAuto = this.size === 'auto' && !this.dragSize;\n const grow = !isAuto ? 0 : 1;\n const size = this.dragSize || this.size;\n return `${grow} ${grow} ${size}`;\n }\n /**\n * Gets/Sets whether current pane is collapsed.\n *\n * @example\n * ```typescript\n * const isCollapsed = pane.collapsed;\n * ```\n */\n set collapsed(value) {\n if (this.owner) {\n // reset sibling sizes when pane collapse state changes.\n this._getSiblings().forEach(sibling => {\n sibling.size = 'auto';\n sibling.dragSize = null;\n });\n }\n this._collapsed = value;\n this.display = this._collapsed ? 'none' : 'flex';\n this.collapsedChange.emit(this._collapsed);\n }\n get collapsed() {\n return this._collapsed;\n }\n constructor(el) {\n this.el = el;\n /**\n * @hidden @internal\n * Gets/Sets the 'display' property of the current pane.\n */\n this.display = 'flex';\n /**\n * Gets/Sets whether pane is resizable.\n *\n * @example\n * ```html\n * \n * ...\n * \n * ```\n * @remarks\n * If pane is not resizable its related splitter bar cannot be dragged.\n */\n this.resizable = true;\n /**\n * Event fired when collapsed state of pane is changed.\n *\n * @example\n * ```html\n * \n * ...\n * \n * ```\n */\n this.collapsedChange = new EventEmitter();\n /**\n * @hidden @internal\n * Gets/Sets the `overflow`.\n */\n this.overflow = 'auto';\n /**\n * @hidden @internal\n * Get/Sets the `minWidth` properties of the current pane.\n */\n this.minWidth = '0';\n /**\n * @hidden @internal\n * Get/Sets the `maxWidth` properties of the current pane.\n */\n this.maxWidth = '100%';\n /**\n * @hidden @internal\n * Gets/Sets the `minHeight` properties of the current pane.\n */\n this.minHeight = '0';\n /**\n * @hidden @internal\n * Gets/Sets the `maxHeight` properties of the current `IgxSplitterPaneComponent`.\n */\n this.maxHeight = '100%';\n this._size = 'auto';\n this._collapsed = false;\n }\n /**\n * Toggles the collapsed state of the pane.\n *\n * @example\n * ```typescript\n * pane.toggle();\n * ```\n */\n toggle() {\n this.collapsed = !this.collapsed;\n }\n /** @hidden @internal */\n _getSiblings() {\n const panes = this.owner.panes.toArray();\n const index = panes.indexOf(this);\n const siblings = [];\n if (index !== 0) {\n siblings.push(panes[index - 1]);\n }\n if (index !== panes.length - 1) {\n siblings.push(panes[index + 1]);\n }\n return siblings;\n }\n}\nIgxSplitterPaneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSplitterPaneComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxSplitterPaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSplitterPaneComponent, selector: \"igx-splitter-pane\", inputs: { minSize: \"minSize\", maxSize: \"maxSize\", resizable: \"resizable\", size: \"size\", collapsed: \"collapsed\" }, outputs: { collapsedChange: \"collapsedChange\" }, host: { properties: { \"style.display\": \"this.display\", \"style.order\": \"this.order\", \"style.overflow\": \"this.overflow\", \"style.min-width\": \"this.minWidth\", \"style.max-width\": \"this.maxWidth\", \"style.min-height\": \"this.minHeight\", \"style.max-height\": \"this.maxHeight\", \"style.flex\": \"this.flex\" } }, ngImport: i0, template: \"\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSplitterPaneComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-splitter-pane', template: \"\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { display: [{\n type: HostBinding,\n args: ['style.display']\n }], minSize: [{\n type: Input\n }], maxSize: [{\n type: Input\n }], resizable: [{\n type: Input\n }], collapsedChange: [{\n type: Output\n }], order: [{\n type: HostBinding,\n args: ['style.order']\n }], overflow: [{\n type: HostBinding,\n args: ['style.overflow']\n }], minWidth: [{\n type: HostBinding,\n args: ['style.min-width']\n }], maxWidth: [{\n type: HostBinding,\n args: ['style.max-width']\n }], minHeight: [{\n type: HostBinding,\n args: ['style.min-height']\n }], maxHeight: [{\n type: HostBinding,\n args: ['style.max-height']\n }], size: [{\n type: Input\n }], flex: [{\n type: HostBinding,\n args: ['style.flex']\n }], collapsed: [{\n type: Input\n }] } });\n\n/**\n * An enumeration that defines the `SplitterComponent` panes orientation.\n */\nvar SplitterType;\n(function (SplitterType) {\n SplitterType[SplitterType[\"Horizontal\"] = 0] = \"Horizontal\";\n SplitterType[SplitterType[\"Vertical\"] = 1] = \"Vertical\";\n})(SplitterType || (SplitterType = {}));\n/**\n * Provides a framework for a simple layout, splitting the view horizontally or vertically\n * into multiple smaller resizable and collapsible areas.\n *\n * @igxModule IgxSplitterModule\n *\n * @igxParent Layouts\n *\n * @igxTheme igx-splitter-theme\n *\n * @igxKeywords splitter panes layout\n *\n * @igxGroup presentation\n *\n * @example\n * ```html\n * \n * \n * ...\n * \n * \n * ...\n * \n * \n * ```\n */\nclass IgxSplitterComponent {\n /**\n * @hidden\n * @internal\n */\n get orientation() {\n return this.type === SplitterType.Horizontal ? 'horizontal' : 'vertical';\n }\n constructor(document, elementRef) {\n this.document = document;\n this.elementRef = elementRef;\n /**\n * @hidden\n * @internal\n */\n this.cssClass = 'igx-splitter';\n /**\n * @hidden @internal\n * Gets/Sets the `overflow` property of the current splitter.\n */\n this.overflow = 'hidden';\n /**\n * @hidden @internal\n * Sets/Gets the `display` property of the current splitter.\n */\n this.display = 'flex';\n /**\n * Event fired when resizing of panes starts.\n *\n * @example\n * ```html\n * \n * ...\n * \n * ```\n */\n this.resizeStart = new EventEmitter();\n /**\n * Event fired when resizing of panes is in progress.\n *\n * @example\n * ```html\n * \n * ...\n * \n * ```\n */\n this.resizing = new EventEmitter();\n /**\n * Event fired when resizing of panes ends.\n *\n * @example\n * ```html\n * \n * ...\n * \n * ```\n */\n this.resizeEnd = new EventEmitter();\n this._type = SplitterType.Horizontal;\n }\n /**\n * Gets/Sets the splitter orientation.\n *\n * @example\n * ```html\n * ...\n * ```\n */\n get type() {\n return this._type;\n }\n set type(value) {\n var _a;\n this._type = value;\n this.resetPaneSizes();\n (_a = this.panes) === null || _a === void 0 ? void 0 : _a.notifyOnChanges();\n }\n /**\n * @hidden @internal\n * Gets the `flex-direction` property of the current `SplitterComponent`.\n */\n get direction() {\n return this.type === SplitterType.Horizontal ? 'row' : 'column';\n }\n /** @hidden @internal */\n ngAfterContentInit() {\n this.initPanes();\n this.panes.changes.subscribe(() => {\n this.initPanes();\n });\n }\n /**\n * @hidden @internal\n * This method performs initialization logic when the user starts dragging the splitter bar between each pair of panes.\n * @param pane - the main pane associated with the currently dragged bar.\n */\n onMoveStart(pane) {\n const panes = this.panes.toArray();\n this.pane = pane;\n this.sibling = panes[panes.indexOf(this.pane) + 1];\n const paneRect = this.pane.element.getBoundingClientRect();\n this.initialPaneSize = this.type === SplitterType.Horizontal ? paneRect.width : paneRect.height;\n const siblingRect = this.sibling.element.getBoundingClientRect();\n this.initialSiblingSize = this.type === SplitterType.Horizontal ? siblingRect.width : siblingRect.height;\n const args = { pane: this.pane, sibling: this.sibling };\n this.resizeStart.emit(args);\n }\n /**\n * @hidden @internal\n * This method performs calculations concerning the sizes of each pair of panes when the bar between them is dragged.\n * @param delta - The difference along the X (or Y) axis between the initial and the current point when dragging the bar.\n */\n onMoving(delta) {\n const min = parseInt(this.pane.minSize, 10) || 0;\n const max = parseInt(this.pane.maxSize, 10) || this.initialPaneSize + this.initialSiblingSize;\n const minSibling = parseInt(this.sibling.minSize, 10) || 0;\n const maxSibling = parseInt(this.sibling.maxSize, 10) || this.initialPaneSize + this.initialSiblingSize;\n const paneSize = this.initialPaneSize - delta;\n const siblingSize = this.initialSiblingSize + delta;\n if (paneSize < min || paneSize > max || siblingSize < minSibling || siblingSize > maxSibling) {\n return;\n }\n this.pane.dragSize = paneSize + 'px';\n this.sibling.dragSize = siblingSize + 'px';\n const args = { pane: this.pane, sibling: this.sibling };\n this.resizing.emit(args);\n }\n onMoveEnd(delta) {\n const min = parseInt(this.pane.minSize, 10) || 0;\n const max = parseInt(this.pane.maxSize, 10) || this.initialPaneSize + this.initialSiblingSize;\n const minSibling = parseInt(this.sibling.minSize, 10) || 0;\n const maxSibling = parseInt(this.sibling.maxSize, 10) || this.initialPaneSize + this.initialSiblingSize;\n const paneSize = this.initialPaneSize - delta;\n const siblingSize = this.initialSiblingSize + delta;\n if (paneSize < min || paneSize > max || siblingSize < minSibling || siblingSize > maxSibling) {\n return;\n }\n if (this.pane.isPercentageSize) {\n // handle % resizes\n const totalSize = this.getTotalSize();\n const percentPaneSize = (paneSize / totalSize) * 100;\n this.pane.size = percentPaneSize + '%';\n }\n else {\n // px resize\n this.pane.size = paneSize + 'px';\n }\n if (this.sibling.isPercentageSize) {\n // handle % resizes\n const totalSize = this.getTotalSize();\n const percentSiblingPaneSize = (siblingSize / totalSize) * 100;\n this.sibling.size = percentSiblingPaneSize + '%';\n }\n else {\n // px resize\n this.sibling.size = siblingSize + 'px';\n }\n this.pane.dragSize = null;\n this.sibling.dragSize = null;\n const args = { pane: this.pane, sibling: this.sibling };\n this.resizeEnd.emit(args);\n }\n /** @hidden @internal */\n getPaneSiblingsByOrder(order, barIndex) {\n const panes = this.panes.toArray();\n const prevPane = panes[order - barIndex - 1];\n const nextPane = panes[order - barIndex];\n const siblings = [prevPane, nextPane];\n return siblings;\n }\n getTotalSize() {\n const computed = this.document.defaultView.getComputedStyle(this.elementRef.nativeElement);\n const totalSize = this.type === SplitterType.Horizontal ? computed.getPropertyValue('width') : computed.getPropertyValue('height');\n return parseFloat(totalSize);\n }\n /**\n * @hidden @internal\n * This method inits panes with properties.\n */\n initPanes() {\n this.panes.forEach(pane => {\n var _a, _b, _c, _d;\n pane.owner = this;\n if (this.type === SplitterType.Horizontal) {\n pane.minWidth = (_a = pane.minSize) !== null && _a !== void 0 ? _a : '0';\n pane.maxWidth = (_b = pane.maxSize) !== null && _b !== void 0 ? _b : '100%';\n }\n else {\n pane.minHeight = (_c = pane.minSize) !== null && _c !== void 0 ? _c : '0';\n pane.maxHeight = (_d = pane.maxSize) !== null && _d !== void 0 ? _d : '100%';\n }\n });\n this.assignFlexOrder();\n if (this.panes.filter(x => x.collapsed).length > 0) {\n // if any panes are collapsed, reset sizes.\n this.resetPaneSizes();\n }\n }\n /**\n * @hidden @internal\n * This method reset pane sizes.\n */\n resetPaneSizes() {\n if (this.panes) {\n // if type is changed runtime, should reset sizes.\n this.panes.forEach(x => {\n x.size = 'auto';\n x.minWidth = '0';\n x.maxWidth = '100%';\n x.minHeight = '0';\n x.maxHeight = '100%';\n });\n }\n }\n /**\n * @hidden @internal\n * This method assigns the order of each pane.\n */\n assignFlexOrder() {\n let k = 0;\n this.panes.forEach((pane) => {\n pane.order = k;\n k += 2;\n });\n }\n}\nIgxSplitterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSplitterComponent, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxSplitterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSplitterComponent, selector: \"igx-splitter\", inputs: { type: \"type\" }, outputs: { resizeStart: \"resizeStart\", resizing: \"resizing\", resizeEnd: \"resizeEnd\" }, host: { properties: { \"class.igx-splitter\": \"this.cssClass\", \"style.overflow\": \"this.overflow\", \"style.display\": \"this.display\", \"attr.aria-orientation\": \"this.orientation\", \"style.flex-direction\": \"this.direction\" } }, queries: [{ propertyName: \"panes\", predicate: IgxSplitterPaneComponent, read: IgxSplitterPaneComponent }], ngImport: i0, template: \"\\n\\n \\n \\n\\n\", dependencies: [{ kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgForOf; }), selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i0.forwardRef(function () { return i1$1.NgIf; }), selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i0.forwardRef(function () { return IgxSplitBarComponent; }), selector: \"igx-splitter-bar\", inputs: [\"type\", \"order\", \"pane\", \"siblings\"], outputs: [\"moveStart\", \"moving\", \"movingEnd\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSplitterComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-splitter', template: \"\\n\\n \\n \\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i0.ElementRef }];\n }, propDecorators: { panes: [{\n type: ContentChildren,\n args: [IgxSplitterPaneComponent, { read: IgxSplitterPaneComponent }]\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-splitter']\n }], overflow: [{\n type: HostBinding,\n args: ['style.overflow']\n }], display: [{\n type: HostBinding,\n args: ['style.display']\n }], orientation: [{\n type: HostBinding,\n args: ['attr.aria-orientation']\n }], resizeStart: [{\n type: Output\n }], resizing: [{\n type: Output\n }], resizeEnd: [{\n type: Output\n }], type: [{\n type: Input\n }], direction: [{\n type: HostBinding,\n args: ['style.flex-direction']\n }] } });\nconst SPLITTER_INTERACTION_KEYS = new Set('right down left up arrowright arrowdown arrowleft arrowup'.split(' '));\n/**\n * @hidden @internal\n * Represents the draggable bar that visually separates panes and allows for changing their sizes.\n */\nclass IgxSplitBarComponent {\n constructor() {\n /**\n * Set css class to the host element.\n */\n this.cssClass = 'igx-splitter-bar-host';\n /**\n * Gets/Sets the orientation.\n */\n this.type = SplitterType.Horizontal;\n /**\n * An event that is emitted whenever we start dragging the current `SplitBarComponent`.\n */\n this.moveStart = new EventEmitter();\n /**\n * An event that is emitted while we are dragging the current `SplitBarComponent`.\n */\n this.moving = new EventEmitter();\n this.movingEnd = new EventEmitter();\n }\n /**\n * @hidden\n * @internal\n */\n get tabindex() {\n return this.resizeDisallowed ? null : 0;\n }\n /**\n * @hidden\n * @internal\n */\n get orientation() {\n return this.type === SplitterType.Horizontal ? 'horizontal' : 'vertical';\n }\n /**\n * @hidden\n * @internal\n */\n get cursor() {\n if (this.resizeDisallowed) {\n return '';\n }\n return this.type === SplitterType.Horizontal ? 'col-resize' : 'row-resize';\n }\n /**\n * @hidden @internal\n */\n get prevButtonHidden() {\n return this.siblings[0].collapsed && !this.siblings[1].collapsed;\n }\n /**\n * @hidden @internal\n */\n keyEvent(event) {\n const key = event.key.toLowerCase();\n const ctrl = event.ctrlKey;\n event.stopPropagation();\n if (SPLITTER_INTERACTION_KEYS.has(key)) {\n event.preventDefault();\n }\n switch (key) {\n case 'arrowup':\n case 'up':\n if (this.type === SplitterType.Vertical) {\n if (ctrl) {\n this.onCollapsing(false);\n break;\n }\n if (!this.resizeDisallowed) {\n event.preventDefault();\n this.moveStart.emit(this.pane);\n this.moving.emit(10);\n }\n }\n break;\n case 'arrowdown':\n case 'down':\n if (this.type === SplitterType.Vertical) {\n if (ctrl) {\n this.onCollapsing(true);\n break;\n }\n if (!this.resizeDisallowed) {\n event.preventDefault();\n this.moveStart.emit(this.pane);\n this.moving.emit(-10);\n }\n }\n break;\n case 'arrowleft':\n case 'left':\n if (this.type === SplitterType.Horizontal) {\n if (ctrl) {\n this.onCollapsing(false);\n break;\n }\n if (!this.resizeDisallowed) {\n event.preventDefault();\n this.moveStart.emit(this.pane);\n this.moving.emit(10);\n }\n }\n break;\n case 'arrowright':\n case 'right':\n if (this.type === SplitterType.Horizontal) {\n if (ctrl) {\n this.onCollapsing(true);\n break;\n }\n if (!this.resizeDisallowed) {\n event.preventDefault();\n this.moveStart.emit(this.pane);\n this.moving.emit(-10);\n }\n }\n break;\n default:\n break;\n }\n }\n /**\n * @hidden @internal\n */\n get dragDir() {\n return this.type === SplitterType.Horizontal ? DragDirection.VERTICAL : DragDirection.HORIZONTAL;\n }\n /**\n * @hidden @internal\n */\n get nextButtonHidden() {\n return this.siblings[1].collapsed && !this.siblings[0].collapsed;\n }\n /**\n * @hidden @internal\n */\n onDragStart(event) {\n if (this.resizeDisallowed) {\n event.cancel = true;\n return;\n }\n this.startPoint = this.type === SplitterType.Horizontal ? event.startX : event.startY;\n this.moveStart.emit(this.pane);\n }\n /**\n * @hidden @internal\n */\n onDragMove(event) {\n const isHorizontal = this.type === SplitterType.Horizontal;\n const curr = isHorizontal ? event.pageX : event.pageY;\n const delta = this.startPoint - curr;\n if (delta !== 0) {\n this.moving.emit(delta);\n event.cancel = true;\n event.owner.element.nativeElement.style.transform = '';\n }\n }\n onDragEnd(event) {\n const isHorizontal = this.type === SplitterType.Horizontal;\n const curr = isHorizontal ? event.pageX : event.pageY;\n const delta = this.startPoint - curr;\n if (delta !== 0) {\n this.movingEnd.emit(delta);\n }\n }\n get resizeDisallowed() {\n const relatedTabs = this.siblings;\n return !!relatedTabs.find(x => x.resizable === false || x.collapsed === true);\n }\n /**\n * @hidden @internal\n */\n onCollapsing(next) {\n const prevSibling = this.siblings[0];\n const nextSibling = this.siblings[1];\n let target;\n if (next) {\n // if next is clicked when prev pane is hidden, show prev pane, else hide next pane.\n target = prevSibling.collapsed ? prevSibling : nextSibling;\n }\n else {\n // if prev is clicked when next pane is hidden, show next pane, else hide prev pane.\n target = nextSibling.collapsed ? nextSibling : prevSibling;\n }\n target.toggle();\n }\n}\nIgxSplitBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSplitBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nIgxSplitBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxSplitBarComponent, selector: \"igx-splitter-bar\", inputs: { type: \"type\", order: \"order\", pane: \"pane\", siblings: \"siblings\" }, outputs: { moveStart: \"moveStart\", moving: \"moving\", movingEnd: \"movingEnd\" }, host: { listeners: { \"keydown\": \"keyEvent($event)\" }, properties: { \"class.igx-splitter-bar-host\": \"this.cssClass\", \"style.order\": \"this.order\", \"attr.tabindex\": \"this.tabindex\", \"attr.aria-orientation\": \"this.orientation\" } }, ngImport: i0, template: \"
    \\n
    \\n
    \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: IgxDragDirective, selector: \"[igxDrag]\", inputs: [\"igxDrag\", \"dragTolerance\", \"dragDirection\", \"dragChannel\", \"ghost\", \"ghostClass\", \"ghostTemplate\", \"ghostHost\", \"scrollContainer\", \"ghostOffsetX\", \"ghostOffsetY\"], outputs: [\"dragStart\", \"dragMove\", \"dragEnd\", \"dragClick\", \"ghostCreate\", \"ghostDestroy\", \"transitioned\"], exportAs: [\"drag\"] }, { kind: \"directive\", type: IgxDragIgnoreDirective, selector: \"[igxDragIgnore]\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSplitBarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-splitter-bar', template: \"
    \\n
    \\n
    \\n
    \\n
    \\n\" }]\n }], propDecorators: { cssClass: [{\n type: HostBinding,\n args: ['class.igx-splitter-bar-host']\n }], type: [{\n type: Input\n }], order: [{\n type: HostBinding,\n args: ['style.order']\n }, {\n type: Input\n }], tabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], orientation: [{\n type: HostBinding,\n args: ['attr.aria-orientation']\n }], pane: [{\n type: Input\n }], siblings: [{\n type: Input\n }], moveStart: [{\n type: Output\n }], moving: [{\n type: Output\n }], movingEnd: [{\n type: Output\n }], keyEvent: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n\nclass IgxSplitterModule {\n}\nIgxSplitterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSplitterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxSplitterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSplitterModule, declarations: [IgxSplitterComponent,\n IgxSplitterPaneComponent,\n IgxSplitBarComponent], imports: [CommonModule, IgxIconModule, IgxDragDropModule], exports: [IgxSplitterComponent,\n IgxSplitterPaneComponent] });\nIgxSplitterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSplitterModule, imports: [CommonModule, IgxIconModule, IgxDragDropModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxSplitterModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule, IgxIconModule, IgxDragDropModule\n ],\n declarations: [\n IgxSplitterComponent,\n IgxSplitterPaneComponent,\n IgxSplitBarComponent\n ],\n exports: [\n IgxSplitterComponent,\n IgxSplitterPaneComponent\n ]\n }]\n }] });\n\n// Enums\nconst IgxStepperOrientation = {\n Horizontal: 'horizontal',\n Vertical: 'vertical'\n};\nconst IgxStepType = {\n Indicator: 'indicator',\n Title: 'title',\n Full: 'full'\n};\nconst IgxStepperTitlePosition = {\n Bottom: 'bottom',\n Top: 'top',\n End: 'end',\n Start: 'start'\n};\nconst VerticalAnimationType = {\n Grow: 'grow',\n Fade: 'fade',\n None: 'none'\n};\n// Token\nconst IGX_STEPPER_COMPONENT = new InjectionToken('IgxStepperToken');\nconst IGX_STEP_COMPONENT = new InjectionToken('IgxStepToken');\n\n/** @hidden @internal */\nclass IgxStepperService {\n constructor() {\n this.collapsingSteps = new Set();\n this.linearDisabledSteps = new Set();\n this.visitedSteps = new Set();\n }\n /**\n * Activates the step, fires the steps change event and plays animations.\n */\n expand(step) {\n if (this.activeStep === step) {\n return;\n }\n const cancel = this.emitActivatingEvent(step);\n if (cancel) {\n return;\n }\n this.collapsingSteps.delete(step);\n this.previousActiveStep = this.activeStep;\n this.activeStep = step;\n this.activeStep.activeChange.emit(true);\n this.collapsingSteps.add(this.previousActiveStep);\n this.visitedSteps.add(this.activeStep);\n if (this.stepper.orientation === IgxStepperOrientation.Vertical) {\n this.previousActiveStep.playCloseAnimation(this.previousActiveStep.contentContainer);\n this.activeStep.cdr.detectChanges();\n this.activeStep.playOpenAnimation(this.activeStep.contentContainer);\n }\n else {\n this.activeStep.cdr.detectChanges();\n this.stepper.playHorizontalAnimations();\n }\n }\n /**\n * Activates the step and fires the steps change event without playing animations.\n */\n expandThroughApi(step) {\n var _a, _b;\n if (this.activeStep === step) {\n return;\n }\n this.collapsingSteps.clear();\n this.previousActiveStep = this.activeStep;\n this.activeStep = step;\n if (this.previousActiveStep) {\n this.previousActiveStep.tabIndex = -1;\n }\n this.activeStep.tabIndex = 0;\n this.visitedSteps.add(this.activeStep);\n this.activeStep.cdr.detectChanges();\n (_a = this.previousActiveStep) === null || _a === void 0 ? void 0 : _a.cdr.detectChanges();\n this.activeStep.activeChange.emit(true);\n (_b = this.previousActiveStep) === null || _b === void 0 ? void 0 : _b.activeChange.emit(false);\n }\n /**\n * Collapses the currently active step and fires the change event.\n */\n collapse(step) {\n if (this.activeStep === step) {\n return;\n }\n step.activeChange.emit(false);\n this.collapsingSteps.delete(step);\n }\n /**\n * Determines the steps that should be marked as visited based on the active step.\n */\n calculateVisitedSteps() {\n this.stepper.steps.forEach(step => {\n if (step.index <= this.activeStep.index) {\n this.visitedSteps.add(step);\n }\n else {\n this.visitedSteps.delete(step);\n }\n });\n }\n /**\n * Determines the steps that should be disabled in linear mode based on the validity of the active step.\n */\n calculateLinearDisabledSteps() {\n if (!this.activeStep) {\n return;\n }\n if (this.activeStep.isValid) {\n const firstRequiredIndex = this.getNextRequiredStep();\n if (firstRequiredIndex !== -1) {\n this.updateLinearDisabledSteps(firstRequiredIndex);\n }\n else {\n this.linearDisabledSteps.clear();\n }\n }\n else {\n this.stepper.steps.forEach(s => {\n if (s.index > this.activeStep.index) {\n this.linearDisabledSteps.add(s);\n }\n });\n }\n }\n emitActivatingEvent(step) {\n const args = {\n owner: this.stepper,\n newIndex: step.index,\n oldIndex: this.activeStep.index,\n cancel: false\n };\n this.stepper.activeStepChanging.emit(args);\n return args.cancel;\n }\n /**\n * Updates the linearDisabled steps from the current active step to the next required invalid step.\n *\n * @param toIndex the index of the last step that should be enabled.\n */\n updateLinearDisabledSteps(toIndex) {\n this.stepper.steps.forEach(s => {\n if (s.index > this.activeStep.index) {\n if (s.index <= toIndex) {\n this.linearDisabledSteps.delete(s);\n }\n else {\n this.linearDisabledSteps.add(s);\n }\n }\n });\n }\n getNextRequiredStep() {\n if (!this.activeStep) {\n return;\n }\n return this.stepper.steps.findIndex(s => s.index > this.activeStep.index && !s.optional && !s.disabled && !s.isValid);\n }\n}\nIgxStepperService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIgxStepperService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepperService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepperService, decorators: [{\n type: Injectable\n }] });\n\nclass IgxStepActiveIndicatorDirective {\n}\nIgxStepActiveIndicatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepActiveIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxStepActiveIndicatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxStepActiveIndicatorDirective, selector: \"[igxStepActiveIndicator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepActiveIndicatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxStepActiveIndicator]'\n }]\n }] });\nclass IgxStepCompletedIndicatorDirective {\n}\nIgxStepCompletedIndicatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepCompletedIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxStepCompletedIndicatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxStepCompletedIndicatorDirective, selector: \"[igxStepCompletedIndicator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepCompletedIndicatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxStepCompletedIndicator]'\n }]\n }] });\nclass IgxStepInvalidIndicatorDirective {\n}\nIgxStepInvalidIndicatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepInvalidIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxStepInvalidIndicatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxStepInvalidIndicatorDirective, selector: \"[igxStepInvalidIndicator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepInvalidIndicatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxStepInvalidIndicator]'\n }]\n }] });\nclass IgxStepIndicatorDirective {\n}\nIgxStepIndicatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxStepIndicatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxStepIndicatorDirective, selector: \"[igxStepIndicator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepIndicatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxStepIndicator]'\n }]\n }] });\nclass IgxStepTitleDirective {\n constructor() {\n this.defaultClass = true;\n }\n}\nIgxStepTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxStepTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxStepTitleDirective, selector: \"[igxStepTitle]\", host: { properties: { \"class.igx-stepper__step-title\": \"this.defaultClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepTitleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxStepTitle]'\n }]\n }], propDecorators: { defaultClass: [{\n type: HostBinding,\n args: ['class.igx-stepper__step-title']\n }] } });\nclass IgxStepSubTitleDirective {\n constructor() {\n this.defaultClass = true;\n }\n}\nIgxStepSubTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepSubTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxStepSubTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxStepSubTitleDirective, selector: \"[igxStepSubTitle]\", host: { properties: { \"class.igx-stepper__step-subtitle\": \"this.defaultClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepSubTitleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxStepSubTitle]'\n }]\n }], propDecorators: { defaultClass: [{\n type: HostBinding,\n args: ['class.igx-stepper__step-subtitle']\n }] } });\nclass IgxStepContentDirective {\n get target() {\n return this.step;\n }\n get stepId() {\n return this.target.id;\n }\n get tabIndex() {\n if (this._tabIndex !== null) {\n return this._tabIndex;\n }\n return this.stepperService.activeStep === this.target ? 0 : -1;\n }\n set tabIndex(val) {\n this._tabIndex = val;\n }\n constructor(step, stepperService, elementRef) {\n this.step = step;\n this.stepperService = stepperService;\n this.elementRef = elementRef;\n this.defaultClass = true;\n this.role = 'tabpanel';\n this.id = this.target.id.replace('step', 'content');\n this._tabIndex = null;\n }\n}\nIgxStepContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepContentDirective, deps: [{ token: IGX_STEP_COMPONENT }, { token: IgxStepperService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nIgxStepContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxStepContentDirective, selector: \"[igxStepContent]\", inputs: { id: \"id\", tabIndex: \"tabIndex\" }, host: { properties: { \"class.igx-stepper__step-content\": \"this.defaultClass\", \"attr.role\": \"this.role\", \"attr.aria-labelledby\": \"this.stepId\", \"attr.id\": \"this.id\", \"attr.tabindex\": \"this.tabIndex\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepContentDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxStepContent]'\n }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_STEP_COMPONENT]\n }] }, { type: IgxStepperService }, { type: i0.ElementRef }];\n }, propDecorators: { defaultClass: [{\n type: HostBinding,\n args: ['class.igx-stepper__step-content']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], stepId: [{\n type: HostBinding,\n args: ['attr.aria-labelledby']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }, {\n type: Input\n }] } });\n\nlet NEXT_ID = 0;\n/**\n * The IgxStepComponent is used within the `igx-stepper` element and it holds the content of each step.\n * It also supports custom indicators, title and subtitle.\n *\n * @igxModule IgxStepperModule\n *\n * @igxKeywords step\n *\n * @example\n * ```html\n * \n * ...\n * \n * ...\n * \n * ...\n * \n * ```\n */\nclass IgxStepComponent extends ToggleAnimationPlayer {\n /**\n * Get/Set whether the step is interactable.\n *\n * ```html\n * \n * ...\n * \n * ...\n * \n * ```\n *\n * ```typescript\n * this.stepper.steps[1].disabled = true;\n * ```\n */\n set disabled(value) {\n this._disabled = value;\n if (this.stepper.linear) {\n this.stepperService.calculateLinearDisabledSteps();\n }\n }\n get disabled() {\n return this._disabled;\n }\n /**\n * Get/Set whether the step is valid.\n *```html\n * \n * ...\n *
    \n *
    \n * ...\n *
    \n *
    \n *
    \n * ```\n */\n get isValid() {\n return this._valid;\n }\n set isValid(value) {\n this._valid = value;\n if (this.stepper.linear && this.index !== undefined) {\n this.stepperService.calculateLinearDisabledSteps();\n }\n }\n /**\n * Get/Set the active state of the step\n *\n * ```html\n * \n * ```\n *\n * ```typescript\n * this.stepper.steps[1].active = true;\n * ```\n *\n * @param value: boolean\n */\n set active(value) {\n if (value) {\n this.stepperService.expandThroughApi(this);\n }\n else {\n this.stepperService.collapse(this);\n }\n }\n get active() {\n return this.stepperService.activeStep === this;\n }\n /** @hidden @internal */\n set tabIndex(value) {\n this._tabIndex = value;\n }\n get tabIndex() {\n return this._tabIndex;\n }\n /** @hidden @internal */\n get contentId() {\n var _a;\n return (_a = this.content) === null || _a === void 0 ? void 0 : _a.id;\n }\n /** @hidden @internal */\n get generalDisabled() {\n return this.disabled || this.linearDisabled;\n }\n /** @hidden @internal */\n get titlePositionTop() {\n if (this.stepper.stepType !== IgxStepType.Full) {\n return 'igx-stepper__step--simple';\n }\n return `igx-stepper__step--${this.titlePosition}`;\n }\n /**\n * Get the step index inside of the stepper.\n *\n * ```typescript\n * const step = this.stepper.steps[1];\n * const stepIndex: number = step.index;\n * ```\n */\n get index() {\n return this._index;\n }\n /** @hidden @internal */\n get indicatorTemplate() {\n if (this.active && this.stepper.activeIndicatorTemplate) {\n return this.stepper.activeIndicatorTemplate;\n }\n if (!this.isValid && this.stepper.invalidIndicatorTemplate) {\n return this.stepper.invalidIndicatorTemplate;\n }\n if (this.completed && this.stepper.completedIndicatorTemplate) {\n return this.stepper.completedIndicatorTemplate;\n }\n if (this.indicator) {\n return this.customIndicatorTemplate;\n }\n return null;\n }\n /** @hidden @internal */\n get direction() {\n return this.stepperService.previousActiveStep\n && this.stepperService.previousActiveStep.index > this.index\n ? Direction.PREV\n : Direction.NEXT;\n }\n /** @hidden @internal */\n get isAccessible() {\n return !this.disabled && !this.linearDisabled;\n }\n /** @hidden @internal */\n get isHorizontal() {\n return this.stepper.orientation === IgxStepperOrientation.Horizontal;\n }\n /** @hidden @internal */\n get isTitleVisible() {\n return this.stepper.stepType !== IgxStepType.Indicator;\n }\n /** @hidden @internal */\n get isIndicatorVisible() {\n return this.stepper.stepType !== IgxStepType.Title;\n }\n /** @hidden @internal */\n get titlePosition() {\n return this.stepper.titlePosition ? this.stepper.titlePosition : this.stepper._defaultTitlePosition;\n }\n /** @hidden @internal */\n get linearDisabled() {\n return this.stepperService.linearDisabledSteps.has(this);\n }\n /** @hidden @internal */\n get collapsing() {\n return this.stepperService.collapsingSteps.has(this);\n }\n /** @hidden @internal */\n get animationSettings() {\n return this.stepper.verticalAnimationSettings;\n }\n /** @hidden @internal */\n get contentClasses() {\n if (this.isHorizontal) {\n return { 'igx-stepper__body-content': true, 'igx-stepper__body-content--active': this.active };\n }\n else {\n return 'igx-stepper__step-content';\n }\n }\n /** @hidden @internal */\n get stepHeaderClasses() {\n return {\n 'igx-stepper__step--optional': this.optional,\n 'igx-stepper__step-header--current': this.active,\n 'igx-stepper__step-header--invalid': !this.isValid\n && this.stepperService.visitedSteps.has(this) && !this.active && this.isAccessible\n };\n }\n /** @hidden @internal */\n get nativeElement() {\n return this.element.nativeElement;\n }\n constructor(stepper, cdr, renderer, platform, stepperService, animationService, element, dir) {\n super(animationService);\n this.stepper = stepper;\n this.cdr = cdr;\n this.renderer = renderer;\n this.platform = platform;\n this.stepperService = stepperService;\n this.element = element;\n this.dir = dir;\n /**\n * Get/Set the `id` of the step component.\n * Default value is `\"igx-step-0\"`;\n * ```html\n * \n * ```\n * ```typescript\n * const stepId = this.step.id;\n * ```\n */\n this.id = `igx-step-${NEXT_ID++}`;\n /**\n * Get/Set whether the step is completed.\n *\n * @remarks\n * When set to `true` the following separator is styled `solid`.\n *\n * ```html\n * \n * ...\n * \n * ...\n * \n * ```\n *\n * ```typescript\n * this.stepper.steps[1].completed = true;\n * ```\n */\n this.completed = false;\n /**\n * Get/Set whether the step is optional.\n *\n * @remarks\n * Optional steps validity does not affect the default behavior when the stepper is in linear mode i.e.\n * if optional step is invalid the user could still move to the next step.\n *\n * ```html\n * \n * ```\n * ```typescript\n * this.stepper.steps[1].optional = true;\n * ```\n */\n this.optional = false;\n /** @hidden @internal **/\n this.role = 'tab';\n /** @hidden @internal */\n this.cssClass = true;\n /**\n * Emitted when the step's `active` property changes. Can be used for two-way binding.\n *\n * ```html\n * \n * \n * ```\n *\n * ```typescript\n * const step: IgxStepComponent = this.stepper.step[0];\n * step.activeChange.subscribe((e: boolean) => console.log(\"Step active state change to \", e))\n * ```\n */\n this.activeChange = new EventEmitter();\n this._tabIndex = -1;\n this._valid = true;\n this._focused = false;\n this._disabled = false;\n }\n /** @hidden @internal */\n onFocus() {\n this._focused = true;\n this.stepperService.focusedStep = this;\n if (this.stepperService.focusedStep !== this.stepperService.activeStep) {\n this.stepperService.activeStep.tabIndex = -1;\n }\n }\n /** @hidden @internal */\n onBlur() {\n this._focused = false;\n this.stepperService.activeStep.tabIndex = 0;\n }\n /** @hidden @internal */\n handleKeydown(event) {\n if (!this._focused) {\n return;\n }\n const key = event.key;\n if (this.stepper.orientation === IgxStepperOrientation.Horizontal) {\n if (key === this.platform.KEYMAP.ARROW_UP || key === this.platform.KEYMAP.ARROW_DOWN) {\n return;\n }\n }\n if (!(this.platform.isNavigationKey(key) || this.platform.isActivationKey(event))) {\n return;\n }\n event.preventDefault();\n this.handleNavigation(key);\n }\n /** @hidden @internal */\n ngAfterViewInit() {\n this.openAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (this.stepperService.activeStep === this) {\n this.stepper.activeStepChanged.emit({ owner: this.stepper, index: this.index });\n }\n });\n this.closeAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.stepperService.collapse(this);\n this.cdr.markForCheck();\n });\n }\n /** @hidden @internal */\n onPointerDown(event) {\n event.stopPropagation();\n if (this.isHorizontal) {\n this.changeHorizontalActiveStep();\n }\n else {\n this.changeVerticalActiveStep();\n }\n }\n /** @hidden @internal */\n handleNavigation(key) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n switch (key) {\n case this.platform.KEYMAP.HOME:\n (_a = this.stepper.steps.filter(s => s.isAccessible)[0]) === null || _a === void 0 ? void 0 : _a.nativeElement.focus();\n break;\n case this.platform.KEYMAP.END:\n (_b = this.stepper.steps.filter(s => s.isAccessible).pop()) === null || _b === void 0 ? void 0 : _b.nativeElement.focus();\n break;\n case this.platform.KEYMAP.ARROW_UP:\n (_c = this.previousStep) === null || _c === void 0 ? void 0 : _c.nativeElement.focus();\n break;\n case this.platform.KEYMAP.ARROW_LEFT:\n if (this.dir.rtl && this.stepper.orientation === IgxStepperOrientation.Horizontal) {\n (_d = this.nextStep) === null || _d === void 0 ? void 0 : _d.nativeElement.focus();\n }\n else {\n (_e = this.previousStep) === null || _e === void 0 ? void 0 : _e.nativeElement.focus();\n }\n break;\n case this.platform.KEYMAP.ARROW_DOWN:\n (_f = this.nextStep) === null || _f === void 0 ? void 0 : _f.nativeElement.focus();\n break;\n case this.platform.KEYMAP.ARROW_RIGHT:\n if (this.dir.rtl && this.stepper.orientation === IgxStepperOrientation.Horizontal) {\n (_g = this.previousStep) === null || _g === void 0 ? void 0 : _g.nativeElement.focus();\n }\n else {\n (_h = this.nextStep) === null || _h === void 0 ? void 0 : _h.nativeElement.focus();\n }\n break;\n case this.platform.KEYMAP.SPACE:\n case this.platform.KEYMAP.ENTER:\n if (this.isHorizontal) {\n this.changeHorizontalActiveStep();\n }\n else {\n this.changeVerticalActiveStep();\n }\n break;\n default:\n return;\n }\n }\n /** @hidden @internal */\n changeHorizontalActiveStep() {\n if (this.stepper.animationType === HorizontalAnimationType.none && this.stepperService.activeStep !== this) {\n const argsCanceled = this.stepperService.emitActivatingEvent(this);\n if (argsCanceled) {\n return;\n }\n this.active = true;\n this.stepper.activeStepChanged.emit({ owner: this.stepper, index: this.index });\n return;\n }\n this.stepperService.expand(this);\n if (this.stepper.animationType === HorizontalAnimationType.fade) {\n if (this.stepperService.collapsingSteps.has(this.stepperService.previousActiveStep)) {\n this.stepperService.previousActiveStep.active = false;\n }\n }\n }\n get nextStep() {\n const focusedStep = this.stepperService.focusedStep;\n if (focusedStep) {\n if (focusedStep.index === this.stepper.steps.length - 1) {\n return this.stepper.steps.find(s => s.isAccessible);\n }\n const nextAccessible = this.stepper.steps.find((s, i) => i > focusedStep.index && s.isAccessible);\n return nextAccessible ? nextAccessible : this.stepper.steps.find(s => s.isAccessible);\n }\n return null;\n }\n get previousStep() {\n const focusedStep = this.stepperService.focusedStep;\n if (focusedStep) {\n if (focusedStep.index === 0) {\n return this.stepper.steps.filter(s => s.isAccessible).pop();\n }\n let prevStep;\n for (let i = focusedStep.index - 1; i >= 0; i--) {\n const step = this.stepper.steps[i];\n if (step.isAccessible) {\n prevStep = step;\n break;\n }\n }\n return prevStep ? prevStep : this.stepper.steps.filter(s => s.isAccessible).pop();\n }\n return null;\n }\n changeVerticalActiveStep() {\n var _a, _b;\n this.stepperService.expand(this);\n if (!this.animationSettings.closeAnimation) {\n (_a = this.stepperService.previousActiveStep.openAnimationPlayer) === null || _a === void 0 ? void 0 : _a.finish();\n }\n if (!this.animationSettings.openAnimation) {\n (_b = this.stepperService.activeStep.closeAnimationPlayer) === null || _b === void 0 ? void 0 : _b.finish();\n }\n }\n}\nIgxStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepComponent, deps: [{ token: IGX_STEPPER_COMPONENT }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: PlatformUtil }, { token: IgxStepperService }, { token: IgxAngularAnimationService }, { token: i0.ElementRef }, { token: IgxDirectionality }], target: i0.ɵɵFactoryTarget.Component });\nIgxStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxStepComponent, selector: \"igx-step\", inputs: { id: \"id\", disabled: \"disabled\", completed: \"completed\", isValid: \"isValid\", optional: \"optional\", active: \"active\", tabIndex: \"tabIndex\" }, outputs: { activeChange: \"activeChange\" }, host: { listeners: { \"focus\": \"onFocus()\", \"blur\": \"onBlur()\", \"keydown\": \"handleKeydown($event)\" }, properties: { \"attr.id\": \"this.id\", \"class.igx-stepper__step--completed\": \"this.completed\", \"attr.aria-selected\": \"this.active\", \"attr.tabindex\": \"this.tabIndex\", \"attr.role\": \"this.role\", \"attr.aria-controls\": \"this.contentId\", \"class.igx-stepper__step\": \"this.cssClass\", \"class.igx-stepper__step--disabled\": \"this.generalDisabled\", \"class\": \"this.titlePositionTop\" } }, providers: [\n { provide: IGX_STEP_COMPONENT, useExisting: IgxStepComponent }\n ], queries: [{ propertyName: \"indicator\", first: true, predicate: i0.forwardRef(function () { return IgxStepIndicatorDirective; }), descendants: true }, { propertyName: \"content\", first: true, predicate: i0.forwardRef(function () { return IgxStepContentDirective; }), descendants: true }], viewQueries: [{ propertyName: \"contentTemplate\", first: true, predicate: [\"contentTemplate\"], descendants: true, static: true }, { propertyName: \"customIndicatorTemplate\", first: true, predicate: [\"customIndicator\"], descendants: true, static: true }, { propertyName: \"contentContainer\", first: true, predicate: [\"contentContainer\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n\\n\\n\\n
    \\n \\n
    \\n
    \\n\\n\\n {{ index + 1 }}\\n\\n\\n\\n \\n\\n\\n
    \\n\\n
    \\n \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\\n\\n
    \\n \\n
    \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: IgxRippleDirective, selector: \"[igxRipple]\", inputs: [\"igxRippleTarget\", \"igxRipple\", \"igxRippleDuration\", \"igxRippleCentered\", \"igxRippleDisabled\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-step', providers: [\n { provide: IGX_STEP_COMPONENT, useExisting: IgxStepComponent }\n ], template: \"\\n \\n \\n\\n\\n\\n
    \\n \\n
    \\n
    \\n\\n\\n {{ index + 1 }}\\n\\n\\n\\n \\n\\n\\n
    \\n\\n
    \\n \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\\n\\n
    \\n \\n
    \\n
    \\n\" }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [IGX_STEPPER_COMPONENT]\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: PlatformUtil }, { type: IgxStepperService }, { type: undefined, decorators: [{\n type: Inject,\n args: [IgxAngularAnimationService]\n }] }, { type: i0.ElementRef }, { type: IgxDirectionality }];\n }, propDecorators: { id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], disabled: [{\n type: Input\n }], completed: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.igx-stepper__step--completed']\n }], isValid: [{\n type: Input\n }], optional: [{\n type: Input\n }], active: [{\n type: HostBinding,\n args: ['attr.aria-selected']\n }, {\n type: Input\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }, {\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], contentId: [{\n type: HostBinding,\n args: ['attr.aria-controls']\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-stepper__step']\n }], generalDisabled: [{\n type: HostBinding,\n args: ['class.igx-stepper__step--disabled']\n }], titlePositionTop: [{\n type: HostBinding,\n args: ['class']\n }], activeChange: [{\n type: Output\n }], contentTemplate: [{\n type: ViewChild,\n args: ['contentTemplate', { static: true }]\n }], customIndicatorTemplate: [{\n type: ViewChild,\n args: ['customIndicator', { static: true }]\n }], contentContainer: [{\n type: ViewChild,\n args: ['contentContainer']\n }], indicator: [{\n type: ContentChild,\n args: [forwardRef(() => IgxStepIndicatorDirective)]\n }], content: [{\n type: ContentChild,\n args: [forwardRef(() => IgxStepContentDirective)]\n }], onFocus: [{\n type: HostListener,\n args: ['focus']\n }], onBlur: [{\n type: HostListener,\n args: ['blur']\n }], handleKeydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n\n// TODO: common interface between IgxCarouselComponentBase and ToggleAnimationPlayer?\n/**\n * IgxStepper provides a wizard-like workflow by dividing content into logical steps.\n *\n * @igxModule IgxStepperModule\n *\n * @igxKeywords stepper\n *\n * @igxGroup Layouts\n *\n * @remarks\n * The Ignite UI for Angular Stepper component allows the user to navigate between multiple steps.\n * It supports horizontal and vertical orientation as well as keyboard navigation and provides API methods to control the active step.\n * The component offers keyboard navigation and API to control the active step.\n *\n * @example\n * ```html\n * \n * \n * home\n *

    Home

    \n *
    \n * ...\n *
    \n *
    \n * \n *
    \n * ...\n *
    \n *
    \n * \n *
    \n * ...\n *
    \n *
    \n *
    \n * ```\n */\nclass IgxStepperComponent extends IgxCarouselComponentBase {\n /**\n * Get/Set the animation type of the stepper when the orientation direction is vertical.\n *\n * @remarks\n * Default value is `grow`. Other possible values are `fade` and `none`.\n *\n * ```html\n * \n * \n * ```\n */\n get verticalAnimationType() {\n return this._verticalAnimationType;\n }\n set verticalAnimationType(value) {\n // TODO: activeChange event is not emitted for the collapsing steps (loop through collapsing steps and emit)\n this.stepperService.collapsingSteps.clear();\n this._verticalAnimationType = value;\n switch (value) {\n case 'grow':\n this.verticalAnimationSettings = this.updateVerticalAnimationSettings(growVerIn, growVerOut);\n break;\n case 'fade':\n this.verticalAnimationSettings = this.updateVerticalAnimationSettings(fadeIn, null);\n break;\n case 'none':\n this.verticalAnimationSettings = this.updateVerticalAnimationSettings(null, null);\n break;\n }\n }\n /**\n * Get/Set the animation type of the stepper when the orientation direction is horizontal.\n *\n * @remarks\n * Default value is `grow`. Other possible values are `fade` and `none`.\n *\n * ```html\n * \n * \n * ```\n */\n get horizontalAnimationType() {\n return this.animationType;\n }\n set horizontalAnimationType(value) {\n // TODO: activeChange event is not emitted for the collapsing steps (loop through collapsing steps and emit)\n this.stepperService.collapsingSteps.clear();\n this.animationType = value;\n }\n /**\n * Get/Set the animation duration.\n * ```html\n * \n * \n * ```\n */\n get animationDuration() {\n return this.defaultAnimationDuration;\n }\n set animationDuration(value) {\n if (value && value > 0) {\n this.defaultAnimationDuration = value;\n return;\n }\n this.defaultAnimationDuration = this._defaultAnimationDuration;\n }\n /**\n * Get/Set whether the stepper is linear.\n *\n * @remarks\n * If the stepper is in linear mode and if the active step is valid only then the user is able to move forward.\n *\n * ```html\n * \n * ```\n */\n get linear() {\n return this._linear;\n }\n set linear(value) {\n this._linear = value;\n if (this._linear && this.steps.length > 0) {\n // when the stepper is in linear mode we should calculate which steps should be disabled\n // and which are visited i.e. their validity should be correctly displayed.\n this.stepperService.calculateVisitedSteps();\n this.stepperService.calculateLinearDisabledSteps();\n }\n else {\n this.stepperService.linearDisabledSteps.clear();\n }\n }\n /**\n * Get/Set the stepper orientation.\n *\n * ```typescript\n * this.stepper.orientation = IgxStepperOrientation.Vertical;\n * ```\n */\n get orientation() {\n return this._orientation;\n }\n set orientation(value) {\n if (this._orientation === value) {\n return;\n }\n // TODO: activeChange event is not emitted for the collapsing steps\n this.stepperService.collapsingSteps.clear();\n this._orientation = value;\n this._defaultTitlePosition = this._orientation === IgxStepperOrientation.Horizontal ?\n IgxStepperTitlePosition.Bottom : IgxStepperTitlePosition.End;\n }\n /** @hidden @internal **/\n get directionClass() {\n return this.orientation === IgxStepperOrientation.Horizontal;\n }\n /**\n * Get all steps.\n *\n * ```typescript\n * const steps: IgxStepComponent[] = this.stepper.steps;\n * ```\n */\n get steps() {\n var _a;\n return ((_a = this._steps) === null || _a === void 0 ? void 0 : _a.toArray()) || [];\n }\n /** @hidden @internal */\n get nativeElement() {\n return this.element.nativeElement;\n }\n constructor(cdr, animationService, stepperService, element) {\n super(animationService, cdr);\n this.stepperService = stepperService;\n this.element = element;\n /**\n * Get/Set the type of the steps.\n *\n * ```typescript\n * this.stepper.stepType = IgxStepType.Indicator;\n * ```\n */\n this.stepType = IgxStepType.Full;\n /**\n * Get/Set whether the content is displayed above the steps.\n *\n * @remarks\n * Default value is `false` and the content is below the steps.\n *\n * ```typescript\n * this.stepper.contentTop = true;\n * ```\n */\n this.contentTop = false;\n /**\n * Get/Set the position of the steps title.\n *\n * @remarks\n * The default value when the stepper is horizontally orientated is `bottom`.\n * In vertical layout the default title position is `end`.\n *\n * ```typescript\n * this.stepper.titlePosition = IgxStepperTitlePosition.Top;\n * ```\n */\n this.titlePosition = null;\n /** @hidden @internal **/\n this.cssClass = 'igx-stepper';\n /** @hidden @internal **/\n this.role = 'tablist';\n /**\n * Emitted when the stepper's active step is changing.\n *\n *```html\n * \n * \n * ```\n *\n *```typescript\n * public handleActiveStepChanging(event: IStepChangingEventArgs) {\n * if (event.newIndex < event.oldIndex) {\n * event.cancel = true;\n * }\n * }\n *```\n */\n this.activeStepChanging = new EventEmitter();\n /**\n * Emitted when the active step is changed.\n *\n * @example\n * ```\n * \n * ```\n */\n this.activeStepChanged = new EventEmitter();\n /** @hidden @internal */\n this.verticalAnimationSettings = {\n openAnimation: growVerIn,\n closeAnimation: growVerOut,\n };\n /** @hidden @internal */\n this._defaultTitlePosition = IgxStepperTitlePosition.Bottom;\n this.destroy$ = new Subject();\n this._orientation = IgxStepperOrientation.Horizontal;\n this._verticalAnimationType = VerticalAnimationType.Grow;\n this._linear = false;\n this._defaultAnimationDuration = 350;\n this.stepperService.stepper = this;\n }\n /** @hidden @internal */\n ngOnChanges(changes) {\n if (changes['animationDuration']) {\n this.verticalAnimationType = this._verticalAnimationType;\n }\n }\n /** @hidden @internal */\n ngOnInit() {\n this.enterAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.activeStepChanged.emit({ owner: this, index: this.stepperService.activeStep.index });\n });\n this.leaveAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (this.stepperService.collapsingSteps.size === 1) {\n this.stepperService.collapse(this.stepperService.previousActiveStep);\n }\n else {\n Array.from(this.stepperService.collapsingSteps).slice(0, this.stepperService.collapsingSteps.size - 1)\n .forEach(step => this.stepperService.collapse(step));\n }\n });\n }\n /** @hidden @internal */\n ngAfterContentInit() {\n let activeStep;\n this.steps.forEach((step, index) => {\n this.updateStepAria(step, index);\n if (!activeStep && step.active) {\n activeStep = step;\n }\n });\n if (!activeStep) {\n this.activateFirstStep(true);\n }\n if (this.linear) {\n this.stepperService.calculateLinearDisabledSteps();\n }\n this.handleStepChanges();\n }\n /** @hidden @internal */\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n /**\n * Activates the step at a given index.\n *\n *```typescript\n * this.stepper.navigateTo(1);\n *```\n */\n navigateTo(index) {\n const step = this.steps[index];\n if (!step || this.stepperService.activeStep === step) {\n return;\n }\n this.activateStep(step);\n }\n /**\n * Activates the next enabled step.\n *\n *```typescript\n * this.stepper.next();\n *```\n */\n next() {\n this.moveToNextStep();\n }\n /**\n * Activates the previous enabled step.\n *\n *```typescript\n * this.stepper.prev();\n *```\n */\n prev() {\n this.moveToNextStep(false);\n }\n /**\n * Resets the stepper to its initial state i.e. activates the first step.\n *\n * @remarks\n * The steps' content will not be automatically reset.\n *```typescript\n * this.stepper.reset();\n *```\n */\n reset() {\n this.stepperService.visitedSteps.clear();\n const activeStep = this.steps.find(s => !s.disabled);\n if (activeStep) {\n this.activateStep(activeStep);\n }\n }\n /** @hidden @internal */\n playHorizontalAnimations() {\n this.previousItem = this.stepperService.previousActiveStep;\n this.currentItem = this.stepperService.activeStep;\n this.triggerAnimations();\n }\n getPreviousElement() {\n var _a;\n return (_a = this.stepperService.previousActiveStep) === null || _a === void 0 ? void 0 : _a.contentContainer.nativeElement;\n }\n getCurrentElement() {\n return this.stepperService.activeStep.contentContainer.nativeElement;\n }\n updateVerticalAnimationSettings(openAnimation, closeAnimation) {\n const customCloseAnimation = useAnimation(closeAnimation, {\n params: {\n duration: this.animationDuration + 'ms'\n }\n });\n const customOpenAnimation = useAnimation(openAnimation, {\n params: {\n duration: this.animationDuration + 'ms'\n }\n });\n return {\n openAnimation: openAnimation ? customOpenAnimation : null,\n closeAnimation: closeAnimation ? customCloseAnimation : null\n };\n }\n updateStepAria(step, index) {\n step._index = index;\n step.renderer.setAttribute(step.nativeElement, 'aria-setsize', (this.steps.length).toString());\n step.renderer.setAttribute(step.nativeElement, 'aria-posinset', (index + 1).toString());\n }\n handleStepChanges() {\n this._steps.changes.pipe(takeUntil(this.destroy$)).subscribe(steps => {\n Promise.resolve().then(() => {\n steps.forEach((step, index) => {\n this.updateStepAria(step, index);\n });\n // when the active step is removed\n const hasActiveStep = this.steps.find(s => s === this.stepperService.activeStep);\n if (!hasActiveStep) {\n this.activateFirstStep();\n }\n // TO DO: mark step added before the active as visited?\n if (this.linear) {\n this.stepperService.calculateLinearDisabledSteps();\n }\n });\n });\n }\n activateFirstStep(activateInitially = false) {\n const firstEnabledStep = this.steps.find(s => !s.disabled);\n if (firstEnabledStep) {\n firstEnabledStep.active = true;\n if (activateInitially) {\n firstEnabledStep.activeChange.emit(true);\n this.activeStepChanged.emit({ owner: this, index: firstEnabledStep.index });\n }\n }\n }\n activateStep(step) {\n if (this.orientation === IgxStepperOrientation.Horizontal) {\n step.changeHorizontalActiveStep();\n }\n else {\n this.stepperService.expand(step);\n }\n }\n moveToNextStep(next = true) {\n let steps = this.steps;\n let activeStepIndex = this.stepperService.activeStep.index;\n if (!next) {\n steps = this.steps.reverse();\n activeStepIndex = steps.findIndex(s => s === this.stepperService.activeStep);\n }\n const nextStep = steps.find((s, i) => i > activeStepIndex && s.isAccessible);\n if (nextStep) {\n this.activateStep(nextStep);\n }\n }\n}\nIgxStepperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepperComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: IgxAngularAnimationService }, { token: IgxStepperService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxStepperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxStepperComponent, selector: \"igx-stepper\", inputs: { verticalAnimationType: \"verticalAnimationType\", horizontalAnimationType: \"horizontalAnimationType\", animationDuration: \"animationDuration\", linear: \"linear\", orientation: \"orientation\", stepType: \"stepType\", contentTop: \"contentTop\", titlePosition: \"titlePosition\" }, outputs: { activeStepChanging: \"activeStepChanging\", activeStepChanged: \"activeStepChanged\" }, host: { properties: { \"attr.aria-orientation\": \"this.orientation\", \"class.igx-stepper\": \"this.cssClass\", \"attr.role\": \"this.role\", \"class.igx-stepper--horizontal\": \"this.directionClass\" } }, providers: [\n IgxStepperService,\n { provide: IGX_STEPPER_COMPONENT, useExisting: IgxStepperComponent },\n ], queries: [{ propertyName: \"invalidIndicatorTemplate\", first: true, predicate: IgxStepInvalidIndicatorDirective, descendants: true, read: TemplateRef }, { propertyName: \"completedIndicatorTemplate\", first: true, predicate: IgxStepCompletedIndicatorDirective, descendants: true, read: TemplateRef }, { propertyName: \"activeIndicatorTemplate\", first: true, predicate: IgxStepActiveIndicatorDirective, descendants: true, read: TemplateRef }, { propertyName: \"_steps\", predicate: IgxStepComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"
    \\n \\n
    \\n\\n
    \\n \\n \\n \\n
    \\n\\n
    \\n \\n
    \\n\\n\\n \\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepperComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-stepper', providers: [\n IgxStepperService,\n { provide: IGX_STEPPER_COMPONENT, useExisting: IgxStepperComponent },\n ], template: \"
    \\n \\n
    \\n\\n
    \\n \\n \\n \\n
    \\n\\n
    \\n \\n
    \\n\\n\\n \\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [IgxAngularAnimationService]\n }] }, { type: IgxStepperService }, { type: i0.ElementRef }];\n }, propDecorators: { verticalAnimationType: [{\n type: Input\n }], horizontalAnimationType: [{\n type: Input\n }], animationDuration: [{\n type: Input\n }], linear: [{\n type: Input\n }], orientation: [{\n type: HostBinding,\n args: ['attr.aria-orientation']\n }, {\n type: Input\n }], stepType: [{\n type: Input\n }], contentTop: [{\n type: Input\n }], titlePosition: [{\n type: Input\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-stepper']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], directionClass: [{\n type: HostBinding,\n args: ['class.igx-stepper--horizontal']\n }], activeStepChanging: [{\n type: Output\n }], activeStepChanged: [{\n type: Output\n }], invalidIndicatorTemplate: [{\n type: ContentChild,\n args: [IgxStepInvalidIndicatorDirective, { read: TemplateRef }]\n }], completedIndicatorTemplate: [{\n type: ContentChild,\n args: [IgxStepCompletedIndicatorDirective, { read: TemplateRef }]\n }], activeIndicatorTemplate: [{\n type: ContentChild,\n args: [IgxStepActiveIndicatorDirective, { read: TemplateRef }]\n }], _steps: [{\n type: ContentChildren,\n args: [IgxStepComponent, { descendants: false }]\n }] } });\nclass IgxStepperModule {\n}\nIgxStepperModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxStepperModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepperModule, declarations: [IgxStepComponent, IgxStepperComponent, IgxStepTitleDirective,\n IgxStepSubTitleDirective,\n IgxStepIndicatorDirective,\n IgxStepContentDirective,\n IgxStepActiveIndicatorDirective,\n IgxStepCompletedIndicatorDirective,\n IgxStepInvalidIndicatorDirective], imports: [CommonModule,\n IgxRippleModule], exports: [IgxStepComponent, IgxStepperComponent, IgxStepTitleDirective,\n IgxStepSubTitleDirective,\n IgxStepIndicatorDirective,\n IgxStepContentDirective,\n IgxStepActiveIndicatorDirective,\n IgxStepCompletedIndicatorDirective,\n IgxStepInvalidIndicatorDirective] });\nIgxStepperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepperModule, imports: [CommonModule,\n IgxRippleModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxStepperModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n IgxRippleModule\n ],\n declarations: [\n IgxStepComponent,\n IgxStepperComponent,\n IgxStepTitleDirective,\n IgxStepSubTitleDirective,\n IgxStepIndicatorDirective,\n IgxStepContentDirective,\n IgxStepActiveIndicatorDirective,\n IgxStepCompletedIndicatorDirective,\n IgxStepInvalidIndicatorDirective,\n ],\n exports: [\n IgxStepComponent,\n IgxStepperComponent,\n IgxStepTitleDirective,\n IgxStepSubTitleDirective,\n IgxStepIndicatorDirective,\n IgxStepContentDirective,\n IgxStepActiveIndicatorDirective,\n IgxStepCompletedIndicatorDirective,\n IgxStepInvalidIndicatorDirective,\n ]\n }]\n }] });\n\n/** @hidden @internal */\nclass DateRangePickerFormatPipe {\n transform(values, appliedFormat, locale, formatter) {\n if (!values || !values.start && !values.end) {\n return '';\n }\n if (formatter) {\n return formatter(values);\n }\n let { start, end } = values;\n if (!isDate(start)) {\n start = DateTimeUtil.parseIsoDate(start);\n }\n if (!isDate(end)) {\n end = DateTimeUtil.parseIsoDate(end);\n }\n const startDate = appliedFormat ? DateTimeUtil.formatDate(start, appliedFormat, locale || 'en') : start === null || start === void 0 ? void 0 : start.toLocaleDateString();\n const endDate = appliedFormat ? DateTimeUtil.formatDate(end, appliedFormat, locale || 'en') : end === null || end === void 0 ? void 0 : end.toLocaleDateString();\n let formatted;\n if (start) {\n formatted = `${startDate} - `;\n if (end) {\n formatted += endDate;\n }\n }\n return formatted ? formatted : '';\n }\n}\nDateRangePickerFormatPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: DateRangePickerFormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nDateRangePickerFormatPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: DateRangePickerFormatPipe, name: \"dateRange\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: DateRangePickerFormatPipe, decorators: [{\n type: Pipe,\n args: [{ name: 'dateRange' }]\n }] });\n/** @hidden @internal */\nclass IgxDateRangeInputsBaseComponent extends IgxInputGroupComponent {\n /** @hidden @internal */\n get nativeElement() {\n return this.element.nativeElement;\n }\n /** @hidden @internal */\n setFocus() {\n this.input.focus();\n }\n /** @hidden @internal */\n updateInputValue(value) {\n if (this.ngControl) {\n this.ngControl.control.setValue(value);\n }\n else {\n this.dateTimeEditor.value = value;\n }\n }\n /** @hidden @internal */\n updateInputValidity(state) {\n this.inputDirective.valid = state;\n }\n}\nIgxDateRangeInputsBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangeInputsBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxDateRangeInputsBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDateRangeInputsBaseComponent, selector: \"igx-date-range-base\", providers: [{ provide: IgxInputGroupBase, useExisting: IgxDateRangeInputsBaseComponent }], queries: [{ propertyName: \"dateTimeEditor\", first: true, predicate: IgxDateTimeEditorDirective, descendants: true }, { propertyName: \"inputDirective\", first: true, predicate: IgxInputDirective, descendants: true }, { propertyName: \"ngControl\", first: true, predicate: NgControl, descendants: true }], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangeInputsBaseComponent, decorators: [{\n type: Component,\n args: [{\n template: ``,\n selector: `igx-date-range-base`,\n providers: [{ provide: IgxInputGroupBase, useExisting: IgxDateRangeInputsBaseComponent }]\n }]\n }], propDecorators: { dateTimeEditor: [{\n type: ContentChild,\n args: [IgxDateTimeEditorDirective]\n }], inputDirective: [{\n type: ContentChild,\n args: [IgxInputDirective]\n }], ngControl: [{\n type: ContentChild,\n args: [NgControl]\n }] } });\n/**\n * Defines the start input for a date range picker\n *\n * @igxModule IgxDateRangePickerModule\n *\n * @igxTheme igx-input-group-theme, igx-calendar-theme, igx-date-range-picker-theme\n *\n * @igxKeywords date, range, date range, date picker\n *\n * @igxGroup scheduling\n *\n * @remarks\n * When templating, start input has to be templated separately\n *\n * @example\n * ```html\n * \n * \n * \n * \n * ...\n * \n * ```\n */\nclass IgxDateRangeStartComponent extends IgxDateRangeInputsBaseComponent {\n}\nIgxDateRangeStartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangeStartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxDateRangeStartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDateRangeStartComponent, selector: \"igx-date-range-start\", providers: [\n { provide: IgxInputGroupBase, useExisting: IgxDateRangeStartComponent },\n { provide: IgxDateRangeInputsBaseComponent, useExisting: IgxDateRangeStartComponent }\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 {{ resourceStrings.igx_input_upload_button }}\\n \\n \\n\\n\\n\\n \\n {{ fileNames }}\\n \\n\\n\\n\\n \\n clear\\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
    \\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 \\n \\n \\n \\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1$1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1$1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i1$1.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"directive\", type: IgxPrefixDirective, selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"directive\", type: IgxSuffixDirective, selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangeStartComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-date-range-start', providers: [\n { provide: IgxInputGroupBase, useExisting: IgxDateRangeStartComponent },\n { provide: IgxDateRangeInputsBaseComponent, useExisting: IgxDateRangeStartComponent }\n ], template: \"
    \\n \\n
    \\n\\n
    \\n \\n
    \\n\\n\\n \\n\\n\\n\\n \\n\\n\\n\\n \\n\\n\\n\\n \\n \\n {{ resourceStrings.igx_input_upload_button }}\\n \\n \\n\\n\\n\\n \\n {{ fileNames }}\\n \\n\\n\\n\\n \\n clear\\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
    \\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 \\n \\n \\n \\n\\n\" }]\n }] });\n/**\n * Defines the end input for a date range picker\n *\n * @igxModule IgxDateRangePickerModule\n *\n * @igxTheme igx-input-group-theme, igx-calendar-theme, igx-date-range-picker-theme\n *\n * @igxKeywords date, range, date range, date picker\n *\n * @igxGroup scheduling\n *\n * @remarks\n * When templating, end input has to be template separately\n *\n * @example\n * ```html\n * \n * ...\n * \n * \n * \n * \n * ```\n */\nclass IgxDateRangeEndComponent extends IgxDateRangeInputsBaseComponent {\n}\nIgxDateRangeEndComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangeEndComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\nIgxDateRangeEndComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDateRangeEndComponent, selector: \"igx-date-range-end\", providers: [\n { provide: IgxInputGroupBase, useExisting: IgxDateRangeEndComponent },\n { provide: IgxDateRangeInputsBaseComponent, useExisting: IgxDateRangeEndComponent }\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 {{ resourceStrings.igx_input_upload_button }}\\n \\n \\n\\n\\n\\n \\n {{ fileNames }}\\n \\n\\n\\n\\n \\n clear\\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
    \\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 \\n \\n \\n \\n\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1$1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1$1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i1$1.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"directive\", type: IgxButtonDirective, selector: \"[igxButton]\", inputs: [\"selected\", \"igxButton\", \"igxButtonColor\", \"igxButtonBackground\", \"igxLabel\", \"disabled\"], outputs: [\"buttonClick\", \"buttonSelected\"] }, { kind: \"directive\", type: IgxPrefixDirective, selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"directive\", type: IgxSuffixDirective, selector: \"igx-suffix,[igxSuffix],[igxEnd]\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangeEndComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-date-range-end', providers: [\n { provide: IgxInputGroupBase, useExisting: IgxDateRangeEndComponent },\n { provide: IgxDateRangeInputsBaseComponent, useExisting: IgxDateRangeEndComponent }\n ], template: \"
    \\n \\n
    \\n\\n
    \\n \\n
    \\n\\n\\n \\n\\n\\n\\n \\n\\n\\n\\n \\n\\n\\n\\n \\n \\n {{ resourceStrings.igx_input_upload_button }}\\n \\n \\n\\n\\n\\n \\n {{ fileNames }}\\n \\n\\n\\n\\n \\n clear\\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
    \\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 \\n \\n \\n \\n\\n\" }]\n }] });\n/**\n * Replaces the default separator `to` with the provided value\n *\n * @igxModule IgxDateRangePickerModule\n *\n * @igxTheme igx-date-range-picker-theme\n *\n * @igxKeywords date, range, date range, date picker\n *\n * @igxGroup scheduling\n *\n * @example\n * ```html\n * \n * \n * \n * \n *\n * -\n *\n * \n * \n * \n * ...\n * \n * ```\n */\nclass IgxDateRangeSeparatorDirective {\n}\nIgxDateRangeSeparatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangeSeparatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nIgxDateRangeSeparatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDateRangeSeparatorDirective, selector: \"[igxDateRangeSeparator]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangeSeparatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[igxDateRangeSeparator]'\n }]\n }] });\n\nconst SingleInputDatesConcatenationString = ' - ';\n/**\n * Provides the ability to select a range of dates from a calendar UI or editable inputs.\n *\n * @igxModule IgxDateRangeModule\n *\n * @igxTheme igx-input-group-theme, igx-calendar-theme, igx-date-range-picker-theme\n *\n * @igxKeywords date, range, date range, date picker\n *\n * @igxGroup scheduling\n *\n * @remarks\n * It displays the range selection in a single or two input fields.\n * The default template displays a single *readonly* input field\n * while projecting `igx-date-range-start` and `igx-date-range-end`\n * displays two *editable* input fields.\n *\n * @example\n * ```html\n * \n * ```\n */\nclass IgxDateRangePickerComponent extends PickerBaseDirective {\n /**\n * The default text of the calendar dialog `done` button.\n *\n * @remarks\n * Default value is `Done`.\n * An @Input property that renders Done button with custom text. By default `doneButtonText` is set to Done.\n * The button will only show up in `dialog` mode.\n *\n * @example\n * ```html\n * \n * ```\n */\n set doneButtonText(value) {\n this._doneButtonText = value;\n }\n get doneButtonText() {\n if (this._doneButtonText === null) {\n return this.resourceStrings.igx_date_range_picker_done_button;\n }\n return this._doneButtonText;\n }\n /**\n * The minimum value in a valid range.\n *\n * @example\n * \n */\n set minValue(value) {\n this._minValue = value;\n this.onValidatorChange();\n }\n get minValue() {\n return this._minValue;\n }\n /**\n * The maximum value in a valid range.\n *\n * @example\n * \n */\n set maxValue(value) {\n this._maxValue = value;\n this.onValidatorChange();\n }\n get maxValue() {\n return this._maxValue;\n }\n /**\n * An accessor that sets the resource strings.\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /**\n * An accessor that returns the resource strings.\n */\n get resourceStrings() {\n return this._resourceStrings;\n }\n /** @hidden @internal */\n get dateSeparator() {\n if (this._dateSeparator === null) {\n return this.resourceStrings.igx_date_range_picker_date_separator;\n }\n return this._dateSeparator;\n }\n /** @hidden @internal */\n get appliedFormat() {\n return DateTimeUtil.getLocaleDateFormat(this.locale, this.displayFormat)\n || DateTimeUtil.DEFAULT_INPUT_FORMAT;\n }\n /** @hidden @internal */\n get singleInputFormat() {\n if (this.placeholder !== '') {\n return this.placeholder;\n }\n const format = this.appliedFormat;\n return `${format}${SingleInputDatesConcatenationString}${format}`;\n }\n /**\n * Gets calendar state.\n *\n * ```typescript\n * let state = this.dateRange.collapsed;\n * ```\n */\n get collapsed() {\n return this._collapsed;\n }\n /**\n * The currently selected value / range from the calendar\n *\n * @remarks\n * The current value is of type `DateRange`\n *\n * @example\n * ```typescript\n * const newValue: DateRange = { start: new Date(\"2/2/2012\"), end: new Date(\"3/3/2013\")};\n * this.dateRangePicker.value = newValue;\n * ```\n */\n get value() {\n return this._value;\n }\n set value(value) {\n this.updateValue(value);\n this.onChangeCallback(value);\n this.valueChange.emit(value);\n }\n /** @hidden @internal */\n get hasProjectedInputs() {\n var _a;\n return ((_a = this.projectedInputs) === null || _a === void 0 ? void 0 : _a.length) > 0;\n }\n /** @hidden @internal */\n get separatorClass() {\n return this.getComponentDensityClass('igx-date-range-picker__label');\n }\n get required() {\n if (this._ngControl && this._ngControl.control && this._ngControl.control.validator) {\n const error = this._ngControl.control.validator({});\n return (error && error.required) ? true : false;\n }\n return false;\n }\n get calendar() {\n return this._calendar;\n }\n get dropdownOverlaySettings() {\n return Object.assign({}, this._dropDownOverlaySettings, this.overlaySettings);\n }\n get dialogOverlaySettings() {\n return Object.assign({}, this._dialogOverlaySettings, this.overlaySettings);\n }\n constructor(element, _localeId, platform, _injector, _cdr, _overlayService, _displayDensityOptions, _inputGroupType) {\n super(element, _localeId, _displayDensityOptions, _inputGroupType);\n this.platform = platform;\n this._injector = _injector;\n this._cdr = _cdr;\n this._overlayService = _overlayService;\n /**\n * The number of displayed month views.\n *\n * @remarks\n * Default is `2`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.displayMonthsCount = 2;\n /**\n * Sets the `placeholder` for single-input `IgxDateRangePickerComponent`.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.placeholder = '';\n /**\n * Emitted when the picker's value changes. Used for two-way binding.\n *\n * @example\n * ```html\n * \n * ```\n */\n this.valueChange = new EventEmitter();\n /** @hidden @internal */\n this.cssClass = 'igx-date-range-picker';\n this._resourceStrings = CurrentResourceStrings.DateRangePickerResStrings;\n this._doneButtonText = null;\n this._dateSeparator = null;\n this._overlaySubFilter = [\n filter(x => x.id === this._overlayId),\n takeUntil(merge(this._destroy$, this.closed))\n ];\n this._dialogOverlaySettings = {\n closeOnOutsideClick: true,\n modal: true,\n closeOnEscape: true\n };\n this._dropDownOverlaySettings = {\n closeOnOutsideClick: true,\n modal: false,\n closeOnEscape: true\n };\n this.onChangeCallback = noop;\n this.onTouchCallback = noop;\n this.onValidatorChange = noop;\n this.onStatusChanged = () => {\n if (this.inputGroup) {\n this.inputDirective.valid = this.isTouchedOrDirty && !this._ngControl.disabled\n ? this.getInputState(this.inputGroup.isFocused)\n : IgxInputState.INITIAL;\n }\n else if (this.hasProjectedInputs) {\n this.projectedInputs\n .forEach(i => {\n i.inputDirective.valid = this.isTouchedOrDirty && !this._ngControl.disabled\n ? this.getInputState(i.isFocused)\n : IgxInputState.INITIAL;\n ;\n });\n }\n this.setRequiredToInputs();\n };\n this.locale = this.locale || this._localeId;\n }\n /** @hidden @internal */\n onKeyDown(event) {\n switch (event.key) {\n case this.platform.KEYMAP.ARROW_UP:\n if (event.altKey) {\n this.close();\n }\n break;\n case this.platform.KEYMAP.ARROW_DOWN:\n if (event.altKey) {\n this.open();\n }\n break;\n }\n }\n /**\n * Opens the date range picker's dropdown or dialog.\n *\n * @example\n * ```html\n * \n *\n * \n * ```\n */\n close() {\n if (!this.collapsed) {\n this._overlayService.hide(this._overlayId);\n }\n }\n /**\n * Toggles the date range picker's dropdown or dialog\n *\n * @example\n * ```html\n * \n *\n * \n * ```\n */\n toggle(overlaySettings) {\n if (!this.collapsed) {\n this.close();\n }\n else {\n this.open(overlaySettings);\n }\n }\n /**\n * Selects a range of dates. If no `endDate` is passed, range is 1 day (only `startDate`)\n *\n * @example\n * ```typescript\n * public selectFiveDayRange() {\n * const today = new Date();\n * const inFiveDays = new Date(new Date().setDate(today.getDate() + 5));\n * this.dateRange.select(today, inFiveDays);\n * }\n * ```\n */\n select(startDate, endDate) {\n endDate = endDate !== null && endDate !== void 0 ? endDate : startDate;\n const dateRange = [startDate, endDate];\n this.handleSelection(dateRange);\n }\n /** @hidden @internal */\n writeValue(value) {\n this.updateValue(value);\n }\n /** @hidden @internal */\n registerOnChange(fn) {\n this.onChangeCallback = fn;\n }\n /** @hidden @internal */\n registerOnTouched(fn) {\n this.onTouchCallback = fn;\n }\n /** @hidden @internal */\n validate(control) {\n const value = control.value;\n const errors = {};\n if (value) {\n if (this.hasProjectedInputs) {\n const startInput = this.projectedInputs.find(i => i instanceof IgxDateRangeStartComponent);\n const endInput = this.projectedInputs.find(i => i instanceof IgxDateRangeEndComponent);\n if (!startInput.dateTimeEditor.value) {\n Object.assign(errors, { startValue: true });\n }\n if (!endInput.dateTimeEditor.value) {\n Object.assign(errors, { endValue: true });\n }\n }\n const min = parseDate(this.minValue);\n const max = parseDate(this.maxValue);\n const start = parseDate(value.start);\n const end = parseDate(value.end);\n if ((min && start && DateTimeUtil.lessThanMinValue(start, min, false))\n || (min && end && DateTimeUtil.lessThanMinValue(end, min, false))) {\n Object.assign(errors, { minValue: true });\n }\n if ((max && start && DateTimeUtil.greaterThanMaxValue(start, max, false))\n || (max && end && DateTimeUtil.greaterThanMaxValue(end, max, false))) {\n Object.assign(errors, { maxValue: true });\n }\n }\n return Object.keys(errors).length > 0 ? errors : null;\n }\n /** @hidden @internal */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /** @hidden @internal */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /** @hidden */\n ngOnInit() {\n this._ngControl = this._injector.get(NgControl, null);\n this.locale = this.locale || this._localeId;\n super.ngOnInit();\n }\n /** @hidden */\n ngAfterViewInit() {\n super.ngAfterViewInit();\n this.subscribeToDateEditorEvents();\n this.configPositionStrategy();\n this.configOverlaySettings();\n this.cacheFocusedInput();\n this.attachOnTouched();\n this.setRequiredToInputs();\n if (this._ngControl) {\n this._statusChanges$ = this._ngControl.statusChanges.subscribe(this.onStatusChanged.bind(this));\n }\n // delay invocations until the current change detection cycle has completed\n Promise.resolve().then(() => {\n this.updateDisabledState();\n this.initialSetValue();\n this.updateInputs();\n // B.P. 07 July 2021 - IgxDateRangePicker not showing initial disabled state with ChangeDetectionStrategy.OnPush #9776\n /**\n * if disabled is placed on the range picker element and there are projected inputs\n * run change detection since igxInput will initially set the projected inputs' disabled to false\n */\n if (this.hasProjectedInputs && this.disabled) {\n this._cdr.markForCheck();\n }\n });\n this.updateDisplayFormat();\n this.updateInputFormat();\n }\n /** @hidden @internal */\n ngOnChanges(changes) {\n if (changes['displayFormat'] && this.hasProjectedInputs) {\n this.updateDisplayFormat();\n }\n if (changes['inputFormat'] && this.hasProjectedInputs) {\n this.updateInputFormat();\n }\n if (changes['disabled']) {\n this.updateDisabledState();\n }\n }\n /** @hidden @internal */\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this._statusChanges$) {\n this._statusChanges$.unsubscribe();\n }\n if (this._overlayId) {\n this._overlayService.detach(this._overlayId);\n }\n }\n /** @hidden @internal */\n getEditElement() {\n return this.inputDirective.nativeElement;\n }\n get isTouchedOrDirty() {\n return (this._ngControl.control.touched || this._ngControl.control.dirty)\n && (!!this._ngControl.control.validator || !!this._ngControl.control.asyncValidator);\n }\n handleSelection(selectionData) {\n let newValue = this.extractRange(selectionData);\n if (!newValue.start && !newValue.end) {\n newValue = null;\n }\n this.value = newValue;\n if (this.isDropdown && (selectionData === null || selectionData === void 0 ? void 0 : selectionData.length) > 1) {\n this.close();\n }\n }\n handleClosing(e) {\n const args = { owner: this, cancel: e === null || e === void 0 ? void 0 : e.cancel, event: e === null || e === void 0 ? void 0 : e.event };\n this.closing.emit(args);\n e.cancel = args.cancel;\n if (args.cancel) {\n return;\n }\n if (this.isDropdown && (e === null || e === void 0 ? void 0 : e.event) && !this.element.nativeElement.contains(e.event.target)) {\n // outside click\n this.updateValidityOnBlur();\n }\n else {\n this.onTouchCallback();\n // input click\n if (this.hasProjectedInputs && this._focusedInput) {\n this._focusedInput.setFocus();\n this._focusedInput = null;\n }\n if (this.inputDirective) {\n this.inputDirective.focus();\n }\n }\n }\n subscribeToOverlayEvents() {\n this._overlayService.opening.pipe(...this._overlaySubFilter).subscribe((e) => {\n const overlayEvent = e;\n const args = { owner: this, cancel: overlayEvent === null || overlayEvent === void 0 ? void 0 : overlayEvent.cancel, event: e.event };\n this.opening.emit(args);\n if (args.cancel) {\n this._overlayService.detach(this._overlayId);\n overlayEvent.cancel = true;\n return;\n }\n this._initializeCalendarContainer(e.componentRef.instance);\n this._collapsed = false;\n this.updateCalendar();\n });\n this._overlayService.opened.pipe(...this._overlaySubFilter).subscribe(() => {\n var _a, _b;\n (_b = (_a = this.calendar) === null || _a === void 0 ? void 0 : _a.daysView) === null || _b === void 0 ? void 0 : _b.focusActiveDate();\n this.opened.emit({ owner: this });\n });\n this._overlayService.closing.pipe(...this._overlaySubFilter).subscribe((e) => {\n this.handleClosing(e);\n });\n this._overlayService.closed.pipe(...this._overlaySubFilter).subscribe(() => {\n this._overlayService.detach(this._overlayId);\n this._collapsed = true;\n this._overlayId = null;\n this.closed.emit({ owner: this });\n });\n }\n updateValue(value) {\n this._value = value ? value : null;\n this.updateInputs();\n this.updateCalendar();\n }\n updateValidityOnBlur() {\n this.onTouchCallback();\n if (this._ngControl) {\n if (this.hasProjectedInputs) {\n this.projectedInputs.forEach(i => {\n if (!this._ngControl.valid) {\n i.updateInputValidity(IgxInputState.INVALID);\n }\n else {\n i.updateInputValidity(IgxInputState.INITIAL);\n }\n });\n }\n if (this.inputDirective) {\n if (!this._ngControl.valid) {\n this.inputDirective.valid = IgxInputState.INVALID;\n }\n else {\n this.inputDirective.valid = IgxInputState.INITIAL;\n }\n }\n }\n }\n updateDisabledState() {\n if (this.hasProjectedInputs) {\n const start = this.projectedInputs.find(i => i instanceof IgxDateRangeStartComponent);\n const end = this.projectedInputs.find(i => i instanceof IgxDateRangeEndComponent);\n start.inputDirective.disabled = this.disabled;\n end.inputDirective.disabled = this.disabled;\n return;\n }\n }\n getInputState(focused) {\n if (focused) {\n return this._ngControl.valid ? IgxInputState.VALID : IgxInputState.INVALID;\n }\n else {\n return this._ngControl.valid ? IgxInputState.INITIAL : IgxInputState.INVALID;\n }\n }\n setRequiredToInputs() {\n // workaround for igxInput setting required\n Promise.resolve().then(() => {\n const isRequired = this.required;\n if (this.inputGroup && this.inputGroup.isRequired !== isRequired) {\n this.inputGroup.isRequired = isRequired;\n }\n else if (this.hasProjectedInputs && this._ngControl) {\n this.projectedInputs.forEach(i => i.isRequired = isRequired);\n }\n });\n }\n parseMinValue(value) {\n let minValue = parseDate(value);\n if (!minValue && this.hasProjectedInputs) {\n const start = this.projectedInputs.filter(i => i instanceof IgxDateRangeStartComponent)[0];\n if (start) {\n minValue = parseDate(start.dateTimeEditor.minValue);\n }\n }\n return minValue;\n }\n parseMaxValue(value) {\n let maxValue = parseDate(value);\n if (!maxValue && this.projectedInputs) {\n const end = this.projectedInputs.filter(i => i instanceof IgxDateRangeEndComponent)[0];\n if (end) {\n maxValue = parseDate(end.dateTimeEditor.maxValue);\n }\n }\n return maxValue;\n }\n updateCalendar() {\n var _a, _b;\n if (!this.calendar) {\n return;\n }\n this.calendar.disabledDates = [];\n const minValue = this.parseMinValue(this.minValue);\n if (minValue) {\n this.calendar.disabledDates.push({ type: DateRangeType.Before, dateRange: [minValue] });\n }\n const maxValue = this.parseMaxValue(this.maxValue);\n if (maxValue) {\n this.calendar.disabledDates.push({ type: DateRangeType.After, dateRange: [maxValue] });\n }\n const range = [];\n if (((_a = this.value) === null || _a === void 0 ? void 0 : _a.start) && ((_b = this.value) === null || _b === void 0 ? void 0 : _b.end)) {\n const _value = this.toRangeOfDates(this.value);\n if (DateTimeUtil.greaterThanMaxValue(_value.start, _value.end)) {\n this.swapEditorDates();\n }\n if (this.valueInRange(this.value, minValue, maxValue)) {\n range.push(_value.start, _value.end);\n }\n }\n if (range.length > 0) {\n this.calendar.selectDate(range);\n }\n else if (range.length === 0 && this.calendar.monthViews) {\n this.calendar.deselectDate();\n }\n this.calendar.viewDate = range[0] || new Date();\n }\n swapEditorDates() {\n if (this.hasProjectedInputs) {\n const start = this.projectedInputs.find(i => i instanceof IgxDateRangeStartComponent);\n const end = this.projectedInputs.find(i => i instanceof IgxDateRangeEndComponent);\n [start.dateTimeEditor.value, end.dateTimeEditor.value] = [end.dateTimeEditor.value, start.dateTimeEditor.value];\n [this.value.start, this.value.end] = [this.value.end, this.value.start];\n }\n }\n valueInRange(value, minValue, maxValue) {\n const _value = this.toRangeOfDates(value);\n if (minValue && DateTimeUtil.lessThanMinValue(_value.start, minValue, false)) {\n return false;\n }\n if (maxValue && DateTimeUtil.greaterThanMaxValue(_value.end, maxValue, false)) {\n return false;\n }\n return true;\n }\n extractRange(selection) {\n return {\n start: selection[0] || null,\n end: selection.length > 0 ? selection[selection.length - 1] : null\n };\n }\n toRangeOfDates(range) {\n let start;\n let end;\n if (!isDate(range.start)) {\n start = DateTimeUtil.parseIsoDate(range.start);\n }\n if (!isDate(range.end)) {\n end = DateTimeUtil.parseIsoDate(range.end);\n }\n if (start || end) {\n return { start, end };\n }\n return { start: range.start, end: range.end };\n }\n subscribeToDateEditorEvents() {\n if (this.hasProjectedInputs) {\n const start = this.projectedInputs.find(i => i instanceof IgxDateRangeStartComponent);\n const end = this.projectedInputs.find(i => i instanceof IgxDateRangeEndComponent);\n if (start && end) {\n start.dateTimeEditor.valueChange\n .pipe(takeUntil(this._destroy$))\n .subscribe(value => {\n if (this.value) {\n this.value = { start: value, end: this.value.end };\n }\n else {\n this.value = { start: value, end: null };\n }\n });\n end.dateTimeEditor.valueChange\n .pipe(takeUntil(this._destroy$))\n .subscribe(value => {\n if (this.value) {\n this.value = { start: this.value.start, end: value };\n }\n else {\n this.value = { start: null, end: value };\n }\n });\n }\n }\n }\n attachOnTouched() {\n if (this.hasProjectedInputs) {\n this.projectedInputs.forEach(i => {\n fromEvent(i.dateTimeEditor.nativeElement, 'blur')\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (this.collapsed) {\n this.updateValidityOnBlur();\n }\n });\n });\n }\n else {\n fromEvent(this.inputDirective.nativeElement, 'blur')\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (this.collapsed) {\n this.updateValidityOnBlur();\n }\n });\n }\n }\n cacheFocusedInput() {\n if (this.hasProjectedInputs) {\n this.projectedInputs.forEach(i => {\n fromEvent(i.dateTimeEditor.nativeElement, 'focus')\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => this._focusedInput = i);\n });\n }\n }\n configPositionStrategy() {\n this._positionSettings = {\n openAnimation: fadeIn,\n closeAnimation: fadeOut\n };\n this._dropDownOverlaySettings.positionStrategy = new AutoPositionStrategy(this._positionSettings);\n this._dropDownOverlaySettings.target = this.element.nativeElement;\n }\n configOverlaySettings() {\n if (this.overlaySettings !== null) {\n this._dropDownOverlaySettings = Object.assign({}, this._dropDownOverlaySettings, this.overlaySettings);\n this._dialogOverlaySettings = Object.assign({}, this._dialogOverlaySettings, this.overlaySettings);\n }\n }\n initialSetValue() {\n // if there is no value and no ngControl on the picker but we have inputs we may have value set through\n // their ngModels - we should generate our initial control value\n if ((!this.value || (!this.value.start && !this.value.end)) && this.hasProjectedInputs && !this._ngControl) {\n const start = this.projectedInputs.find(i => i instanceof IgxDateRangeStartComponent);\n const end = this.projectedInputs.find(i => i instanceof IgxDateRangeEndComponent);\n this._value = {\n start: start.dateTimeEditor.value,\n end: end.dateTimeEditor.value\n };\n }\n }\n updateInputs() {\n var _a, _b;\n const start = (_a = this.projectedInputs) === null || _a === void 0 ? void 0 : _a.find(i => i instanceof IgxDateRangeStartComponent);\n const end = (_b = this.projectedInputs) === null || _b === void 0 ? void 0 : _b.find(i => i instanceof IgxDateRangeEndComponent);\n if (start && end) {\n const _value = this.value ? this.toRangeOfDates(this.value) : null;\n start.updateInputValue((_value === null || _value === void 0 ? void 0 : _value.start) || null);\n end.updateInputValue((_value === null || _value === void 0 ? void 0 : _value.end) || null);\n }\n }\n updateDisplayFormat() {\n this.projectedInputs.forEach(i => {\n const input = i;\n input.dateTimeEditor.displayFormat = this.displayFormat;\n });\n }\n updateInputFormat() {\n this.projectedInputs.forEach(i => {\n const input = i;\n if (input.dateTimeEditor.inputFormat !== this.inputFormat) {\n input.dateTimeEditor.inputFormat = this.inputFormat;\n }\n });\n }\n _initializeCalendarContainer(componentInstance) {\n this._calendar = componentInstance.calendar;\n this.calendar.hasHeader = false;\n this.calendar.locale = this.locale;\n this.calendar.selection = CalendarSelection.RANGE;\n this.calendar.weekStart = this.weekStart;\n this.calendar.hideOutsideDays = this.hideOutsideDays;\n this.calendar.monthsViewNumber = this.displayMonthsCount;\n this.calendar.selected.pipe(takeUntil(this._destroy$)).subscribe((ev) => this.handleSelection(ev));\n componentInstance.mode = this.mode;\n componentInstance.closeButtonLabel = !this.isDropdown ? this.doneButtonText : null;\n componentInstance.pickerActions = this.pickerActions;\n componentInstance.calendarClose.pipe(takeUntil(this._destroy$)).subscribe(() => this.close());\n }\n}\nIgxDateRangePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangePickerComponent, deps: [{ token: i0.ElementRef }, { token: LOCALE_ID }, { token: PlatformUtil }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: IgxOverlayService }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nIgxDateRangePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxDateRangePickerComponent, selector: \"igx-date-range-picker\", inputs: { displayMonthsCount: \"displayMonthsCount\", hideOutsideDays: \"hideOutsideDays\", formatter: \"formatter\", doneButtonText: \"doneButtonText\", overlaySettings: \"overlaySettings\", displayFormat: \"displayFormat\", inputFormat: \"inputFormat\", minValue: \"minValue\", maxValue: \"maxValue\", resourceStrings: \"resourceStrings\", placeholder: \"placeholder\", outlet: \"outlet\", value: \"value\" }, outputs: { valueChange: \"valueChange\" }, host: { listeners: { \"keydown\": \"onKeyDown($event)\" }, properties: { \"class.igx-date-range-picker\": \"this.cssClass\" } }, providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxDateRangePickerComponent, multi: true },\n { provide: NG_VALIDATORS, useExisting: IgxDateRangePickerComponent, multi: true }\n ], queries: [{ propertyName: \"label\", first: true, predicate: IgxLabelDirective, descendants: true }, { propertyName: \"pickerActions\", first: true, predicate: IgxPickerActionsDirective, descendants: true }, { propertyName: \"dateSeparatorTemplate\", first: true, predicate: IgxDateRangeSeparatorDirective, descendants: true, read: TemplateRef }, { propertyName: \"projectedInputs\", predicate: IgxDateRangeInputsBaseComponent }], viewQueries: [{ propertyName: \"viewContainerRef\", first: true, predicate: IgxInputGroupComponent, descendants: true, read: ViewContainerRef }, { propertyName: \"inputDirective\", first: true, predicate: IgxInputDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"\\n\\n\\n
    \\n \\n
    \\n
    \\n\\n\\n \\n
    \\n \\n \\n
    \\n \\n
    \\n\\n\\n \\n date_range\\n \\n\\n\\n{{ dateSeparator }}\\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\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"component\", type: IgxInputGroupComponent, selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: IgxInputDirective, selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: IgxPrefixDirective, selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"pipe\", type: DateRangePickerFormatPipe, name: \"dateRange\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangePickerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'igx-date-range-picker', providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxDateRangePickerComponent, multi: true },\n { provide: NG_VALIDATORS, useExisting: IgxDateRangePickerComponent, multi: true }\n ], template: \"\\n\\n\\n
    \\n \\n
    \\n
    \\n\\n\\n \\n
    \\n \\n \\n
    \\n \\n
    \\n\\n\\n \\n date_range\\n \\n\\n\\n{{ dateSeparator }}\\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 }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: PlatformUtil }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: IgxOverlayService, decorators: [{\n type: Inject,\n args: [IgxOverlayService]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DisplayDensityToken]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [IGX_INPUT_GROUP_TYPE]\n }] }];\n }, propDecorators: { displayMonthsCount: [{\n type: Input\n }], hideOutsideDays: [{\n type: Input\n }], formatter: [{\n type: Input\n }], doneButtonText: [{\n type: Input\n }], overlaySettings: [{\n type: Input\n }], displayFormat: [{\n type: Input\n }], inputFormat: [{\n type: Input\n }], minValue: [{\n type: Input\n }], maxValue: [{\n type: Input\n }], resourceStrings: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], outlet: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], cssClass: [{\n type: HostBinding,\n args: ['class.igx-date-range-picker']\n }], viewContainerRef: [{\n type: ViewChild,\n args: [IgxInputGroupComponent, { read: ViewContainerRef }]\n }], inputDirective: [{\n type: ViewChild,\n args: [IgxInputDirective]\n }], projectedInputs: [{\n type: ContentChildren,\n args: [IgxDateRangeInputsBaseComponent]\n }], label: [{\n type: ContentChild,\n args: [IgxLabelDirective]\n }], pickerActions: [{\n type: ContentChild,\n args: [IgxPickerActionsDirective]\n }], dateSeparatorTemplate: [{\n type: ContentChild,\n args: [IgxDateRangeSeparatorDirective, { read: TemplateRef }]\n }], value: [{\n type: Input\n }], onKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n\n/** @hidden */\nclass IgxDateRangePickerModule {\n}\nIgxDateRangePickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxDateRangePickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangePickerModule, declarations: [IgxDateRangePickerComponent,\n IgxDateRangeStartComponent,\n IgxDateRangeEndComponent,\n IgxDateRangeInputsBaseComponent,\n DateRangePickerFormatPipe,\n IgxDateRangeSeparatorDirective], imports: [CommonModule,\n IgxIconModule,\n IgxButtonModule,\n IgxToggleModule,\n IgxCalendarModule,\n IgxInputGroupModule,\n IgxPickersCommonModule,\n IgxDateTimeEditorModule,\n IgxCalendarContainerModule], exports: [IgxDateRangePickerComponent,\n IgxDateRangeStartComponent,\n IgxDateRangeEndComponent,\n IgxDateRangeSeparatorDirective,\n IgxDateTimeEditorModule,\n IgxPickersCommonModule,\n IgxInputGroupModule] });\nIgxDateRangePickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangePickerModule, imports: [CommonModule,\n IgxIconModule,\n IgxButtonModule,\n IgxToggleModule,\n IgxCalendarModule,\n IgxInputGroupModule,\n IgxPickersCommonModule,\n IgxDateTimeEditorModule,\n IgxCalendarContainerModule, IgxDateTimeEditorModule,\n IgxPickersCommonModule,\n IgxInputGroupModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxDateRangePickerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxDateRangePickerComponent,\n IgxDateRangeStartComponent,\n IgxDateRangeEndComponent,\n IgxDateRangeInputsBaseComponent,\n DateRangePickerFormatPipe,\n IgxDateRangeSeparatorDirective,\n ],\n imports: [\n CommonModule,\n IgxIconModule,\n IgxButtonModule,\n IgxToggleModule,\n IgxCalendarModule,\n IgxInputGroupModule,\n IgxPickersCommonModule,\n IgxDateTimeEditorModule,\n IgxCalendarContainerModule\n ],\n exports: [\n IgxDateRangePickerComponent,\n IgxDateRangeStartComponent,\n IgxDateRangeEndComponent,\n IgxDateRangeSeparatorDirective,\n IgxDateTimeEditorModule,\n IgxPickersCommonModule,\n IgxInputGroupModule\n ]\n }]\n }] });\n\n/**\n * Pivot Data Selector provides means to configure the pivot state of the Pivot Grid via a vertical panel UI\n *\n * @igxModule IgxPivotGridModule\n * @igxGroup Grids & Lists\n * @igxKeywords data selector, pivot, grid\n * @igxTheme pivot-data-selector-theme\n * @remarks\n * The Ignite UI Data Selector has a searchable list with the grid data columns,\n * there are also four expandable areas underneath for filters, rows, columns, and values\n * is used for grouping and aggregating simple flat data into a pivot table.\n * @example\n * ```html\n * \n * \n * \n * ```\n */\nclass IgxPivotDataSelectorComponent {\n /** @hidden @internal */\n get dims() {\n var _a;\n return ((_a = this._grid) === null || _a === void 0 ? void 0 : _a.allDimensions) || [];\n }\n ;\n /** @hidden @internal */\n get values() {\n var _a;\n return ((_a = this._grid) === null || _a === void 0 ? void 0 : _a.pivotConfiguration.values) || [];\n }\n ;\n constructor(renderer, cdr) {\n this.renderer = renderer;\n this.cdr = cdr;\n /**\n * Gets/sets whether the columns panel is expanded\n * Get\n * ```typescript\n * const columnsPanelState: boolean = this.dataSelector.columnsExpanded;\n * ```\n * Set\n * ```html\n * \n * ```\n *\n * Two-way data binding:\n * ```html\n * \n * ```\n */\n this.columnsExpanded = true;\n /**\n * @hidden\n */\n this.columnsExpandedChange = new EventEmitter();\n /**\n * Gets/sets whether the rows panel is expanded\n * Get\n * ```typescript\n * const rowsPanelState: boolean = this.dataSelector.rowsExpanded;\n * ```\n * Set\n * ```html\n * \n * ```\n *\n * Two-way data binding:\n * ```html\n * \n * ```\n */\n this.rowsExpanded = true;\n /**\n * @hidden\n */\n this.rowsExpandedChange = new EventEmitter();\n /**\n * Gets/sets whether the filters panel is expanded\n * Get\n * ```typescript\n * const filtersPanelState: boolean = this.dataSelector.filtersExpanded;\n * ```\n * Set\n * ```html\n * \n * ```\n *\n * Two-way data binding:\n * ```html\n * \n * ```\n */\n this.filtersExpanded = true;\n /**\n * @hidden\n */\n this.filtersExpandedChange = new EventEmitter();\n /**\n * Gets/sets whether the values panel is expanded\n * Get\n * ```typescript\n * const valuesPanelState: boolean = this.dataSelector.valuesExpanded;\n * ```\n * Set\n * ```html\n * \n * ```\n *\n * Two-way data binding:\n * ```html\n * \n * ```\n */\n this.valuesExpanded = true;\n /**\n * @hidden\n */\n this.valuesExpandedChange = new EventEmitter();\n this._dropDelta = 0;\n /** @hidden @internal **/\n this.cssClass = \"igx-pivot-data-selector\";\n this._subMenuPositionSettings = {\n verticalStartPoint: VerticalAlignment.Bottom,\n closeAnimation: undefined,\n };\n this._subMenuOverlaySettings = {\n closeOnOutsideClick: true,\n modal: false,\n positionStrategy: new AutoPositionStrategy(this._subMenuPositionSettings),\n scrollStrategy: new AbsoluteScrollStrategy(),\n };\n this.animationSettings = {\n closeAnimation: useAnimation(fadeOut, {\n params: {\n duration: \"0ms\",\n },\n }),\n openAnimation: useAnimation(fadeIn, {\n params: {\n duration: \"0ms\",\n },\n }),\n };\n /** @hidden @internal */\n this.aggregateList = [];\n /**\n * @hidden @internal\n */\n this._panels = [\n {\n name: \"Filters\",\n i18n: 'igx_grid_pivot_selector_filters',\n type: PivotDimensionType.Filter,\n dataKey: \"filterDimensions\",\n icon: \"filter_list\",\n itemKey: \"memberName\",\n sortable: false,\n dragChannels: [\"Filters\", \"Columns\", \"Rows\"]\n },\n {\n name: \"Columns\",\n i18n: 'igx_grid_pivot_selector_columns',\n type: PivotDimensionType.Column,\n dataKey: \"columnDimensions\",\n icon: \"view_column\",\n itemKey: \"memberName\",\n sortable: true,\n dragChannels: [\"Filters\", \"Columns\", \"Rows\"]\n },\n {\n name: \"Rows\",\n i18n: 'igx_grid_pivot_selector_rows',\n type: PivotDimensionType.Row,\n dataKey: \"rowDimensions\",\n icon: \"table_rows\",\n itemKey: \"memberName\",\n sortable: true,\n dragChannels: [\"Filters\", \"Columns\", \"Rows\"]\n },\n {\n name: \"Values\",\n i18n: 'igx_grid_pivot_selector_values',\n type: null,\n dataKey: \"values\",\n icon: \"functions\",\n itemKey: \"member\",\n displayKey: 'displayName',\n sortable: false,\n dragChannels: [\"Values\"]\n },\n ];\n }\n /**\n * @hidden @internal\n */\n get displayDensity() {\n var _a;\n return (_a = this.grid) === null || _a === void 0 ? void 0 : _a.displayDensity;\n }\n /**\n * An @Input property that sets the grid.\n */\n set grid(value) {\n this._grid = value;\n }\n /**\n * Returns the grid.\n */\n get grid() {\n return this._grid;\n }\n /**\n * @hidden\n * @internal\n */\n onItemSort(_, dimension, dimensionType) {\n if (!this._panels.find((panel) => panel.type === dimensionType).sortable)\n return;\n const startDirection = dimension.sortDirection || SortingDirection.None;\n const direction = startDirection + 1 > SortingDirection.Desc ?\n SortingDirection.None : startDirection + 1;\n this.grid.sortDimension(dimension, direction);\n }\n /**\n * @hidden\n * @internal\n */\n onFilteringIconPointerDown(event) {\n event.stopPropagation();\n event.preventDefault();\n }\n /**\n * @hidden\n * @internal\n */\n onFilteringIconClick(event, dimension) {\n event.stopPropagation();\n event.preventDefault();\n let dim = dimension;\n let col;\n while (dim) {\n col = this.grid.dimensionDataColumns.find((x) => x.field === dim.memberName);\n if (col) {\n break;\n }\n else {\n dim = dim.childLevel;\n }\n }\n this.grid.filteringService.toggleFilterDropdown(event.target, col);\n }\n /**\n * @hidden\n * @internal\n */\n getDimensionState(dimensionType) {\n switch (dimensionType) {\n case PivotDimensionType.Row:\n return this.grid.rowDimensions;\n case PivotDimensionType.Column:\n return this.grid.columnDimensions;\n case PivotDimensionType.Filter:\n return this.grid.filterDimensions;\n default:\n return null;\n }\n }\n /**\n * @hidden\n * @internal\n */\n moveValueItem(itemId) {\n const aggregation = this.grid.pivotConfiguration.values;\n const valueIndex = aggregation.findIndex((x) => x.member === itemId) !== -1\n ? aggregation === null || aggregation === void 0 ? void 0 : aggregation.findIndex((x) => x.member === itemId)\n : aggregation.length;\n const newValueIndex = valueIndex + this._dropDelta < 0 ? 0 : valueIndex + this._dropDelta;\n const aggregationItem = aggregation.find((x) => x.member === itemId || x.displayName === itemId);\n if (aggregationItem) {\n this.grid.moveValue(aggregationItem, newValueIndex);\n this.grid.valuesChange.emit({\n values: this.grid.pivotConfiguration.values,\n });\n }\n }\n /**\n * @hidden\n * @internal\n */\n onItemDropped(event, dimensionType) {\n if (!this.dropAllowed) {\n return;\n }\n const dimension = this.grid.getDimensionsByType(dimensionType);\n const dimensionState = this.getDimensionState(dimensionType);\n const itemId = event.drag.element.nativeElement.id;\n const targetId = event.owner.element.nativeElement.id;\n const dimensionItem = dimension === null || dimension === void 0 ? void 0 : dimension.find((x) => x.memberName === itemId);\n const itemIndex = (dimension === null || dimension === void 0 ? void 0 : dimension.findIndex((x) => (x === null || x === void 0 ? void 0 : x.memberName) === itemId)) !== -1\n ? dimension === null || dimension === void 0 ? void 0 : dimension.findIndex((x) => x.memberName === itemId)\n : dimension === null || dimension === void 0 ? void 0 : dimension.length;\n const dimensions = this.grid.allDimensions.filter((x) => x && x.memberName === itemId);\n const reorder = (dimensionState === null || dimensionState === void 0 ? void 0 : dimensionState.findIndex((item) => item.memberName === itemId)) !==\n -1;\n let targetIndex = targetId !== \"\"\n ? dimension === null || dimension === void 0 ? void 0 : dimension.findIndex((x) => x.memberName === targetId)\n : dimension === null || dimension === void 0 ? void 0 : dimension.length;\n if (!dimension) {\n this.moveValueItem(itemId);\n }\n if (reorder) {\n targetIndex =\n itemIndex + this._dropDelta < 0\n ? 0\n : itemIndex + this._dropDelta;\n }\n if (dimensionItem) {\n this.grid.moveDimension(dimensionItem, dimensionType, targetIndex);\n }\n else {\n const newDim = dimensions.find((x) => x.memberName === itemId);\n this.grid.moveDimension(newDim, dimensionType, targetIndex);\n }\n this.grid.dimensionsChange.emit({\n dimensions: dimension,\n dimensionCollectionType: dimensionType,\n });\n }\n /**\n * @hidden\n * @internal\n */\n updateDropDown(value, dropdown) {\n this.value = value;\n dropdown.width = \"200px\";\n this.aggregateList = PivotUtil.getAggregateList(value, this.grid);\n this.cdr.detectChanges();\n dropdown.open(this._subMenuOverlaySettings);\n }\n /**\n * @hidden\n * @internal\n */\n onSummaryClick(event, value, dropdown) {\n this._subMenuOverlaySettings.target =\n event.currentTarget;\n if (dropdown.collapsed) {\n this.updateDropDown(value, dropdown);\n }\n else {\n // close for previous chip\n dropdown.close();\n dropdown.closed.pipe(first$1()).subscribe(() => {\n this.updateDropDown(value, dropdown);\n });\n }\n }\n /**\n * @hidden\n * @internal\n */\n onAggregationChange(event) {\n if (!this.isSelected(event.newSelection.value)) {\n this.value.aggregate = event.newSelection.value;\n this.grid.pipeTrigger++;\n this.grid.cdr.markForCheck();\n }\n }\n /**\n * @hidden\n * @internal\n */\n isSelected(val) {\n return this.value.aggregate.key === val.key;\n }\n /**\n * @hidden\n * @internal\n */\n ghostCreated(event, value) {\n const { width: itemWidth } = event.owner.element.nativeElement.getBoundingClientRect();\n this.ghostWidth = itemWidth;\n this.ghostText = value;\n this.renderer.setStyle(event.owner.element.nativeElement, \"position\", \"absolute\");\n this.renderer.setStyle(event.owner.element.nativeElement, \"visibility\", \"hidden\");\n }\n /**\n * @hidden\n * @internal\n */\n toggleItem(item) {\n if (item) {\n this.grid.toggleValue(item);\n }\n if (item) {\n this.grid.toggleDimension(item);\n }\n }\n /**\n * @hidden\n * @internal\n */\n onPanelEntry(event, panel) {\n var _a;\n this.dropAllowed = event.dragData.gridID === this.grid.id && ((_a = event.dragData.selectorChannels) === null || _a === void 0 ? void 0 : _a.some((channel) => channel === panel));\n }\n /**\n * @hidden\n * @internal\n */\n onItemDragMove(event) {\n const clientRect = event.owner.element.nativeElement.getBoundingClientRect();\n this._dropDelta = Math.round((event.nextPageY - event.startY) / clientRect.height);\n }\n /**\n * @hidden\n * @internal\n */\n onItemDragEnd(event) {\n this.renderer.setStyle(event.owner.element.nativeElement, \"position\", \"static\");\n this.renderer.setStyle(event.owner.element.nativeElement, \"visibility\", \"visible\");\n }\n /**\n * @hidden\n * @internal\n */\n onItemDragOver(event) {\n if (this.dropAllowed) {\n this.renderer.addClass(event.owner.element.nativeElement, \"igx-drag--push\");\n }\n }\n /**\n * @hidden\n * @internal\n */\n onItemDragLeave(event) {\n if (this.dropAllowed) {\n this.renderer.removeClass(event.owner.element.nativeElement, \"igx-drag--push\");\n }\n }\n /**\n * @hidden\n * @internal\n */\n getPanelCollapsed(panelType) {\n switch (panelType) {\n case PivotDimensionType.Column:\n return !this.columnsExpanded;\n case PivotDimensionType.Filter:\n return !this.filtersExpanded;\n case PivotDimensionType.Row:\n return !this.rowsExpanded;\n default:\n return !this.valuesExpanded;\n }\n }\n /**\n * @hidden\n * @internal\n */\n onCollapseChange(value, panelType) {\n switch (panelType) {\n case PivotDimensionType.Column:\n this.columnsExpanded = !value;\n this.columnsExpandedChange.emit(this.columnsExpanded);\n break;\n case PivotDimensionType.Filter:\n this.filtersExpanded = !value;\n this.filtersExpandedChange.emit(this.filtersExpanded);\n break;\n case PivotDimensionType.Row:\n this.rowsExpanded = !value;\n this.rowsExpandedChange.emit(this.rowsExpanded);\n break;\n default:\n this.valuesExpanded = !value;\n this.valuesExpandedChange.emit(this.valuesExpanded);\n }\n }\n}\nIgxPivotDataSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPivotDataSelectorComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nIgxPivotDataSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0\", type: IgxPivotDataSelectorComponent, selector: \"igx-pivot-data-selector\", inputs: { columnsExpanded: \"columnsExpanded\", rowsExpanded: \"rowsExpanded\", filtersExpanded: \"filtersExpanded\", valuesExpanded: \"valuesExpanded\", grid: \"grid\" }, outputs: { columnsExpandedChange: \"columnsExpandedChange\", rowsExpandedChange: \"rowsExpandedChange\", filtersExpandedChange: \"filtersExpandedChange\", valuesExpandedChange: \"valuesExpandedChange\" }, host: { properties: { \"class.igx-pivot-data-selector\": \"this.cssClass\" } }, ngImport: i0, template: \"
    \\n \\n search\\n \\n \\n \\n \\n \\n {{ item.memberName }}\\n \\n \\n \\n {{ item.displayName || item.member }}\\n \\n \\n
    \\n\\n\\n \\n \\n \\n
    \\n {{ grid?.resourceStrings[panel.i18n] }}\\n
    \\n
    \\n {{ panel.icon }}\\n {{ this.grid ? this.grid[panel.dataKey].length : 0 }}\\n
    \\n
    \\n \\n \\n 0\\\"\\n [displayDensity]=\\\"displayDensity\\\"\\n >\\n \\n
    \\n \\n
    \\n {{\\n item.aggregate.key\\n }}\\n (\\n {{ item[panel.displayKey] || item[panel.itemKey] }}\\n )\\n
    \\n \\n {{\\n item.sortDirection < 2\\n ? \\\"arrow_upward\\\"\\n : \\\"arrow_downward\\\"\\n }}\\n \\n
    \\n
    \\n filter_list\\n \\n \\n functions\\n \\n 0\\\"\\n >drag_handle\\n
    \\n \\n \\n \\n \\n {{ grid?.resourceStrings.igx_grid_pivot_selector_panel_empty }}\\n \\n \\n \\n
    \\n\\n\\n \\n {{ item.label }}\\n
    \\n\\n\\n\\n \\n
    \\n unfold_more\\n {{ ghostText }}\\n
    \\n drag_handle\\n \\n
    \\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: IgxInputGroupComponent, selector: \"igx-input-group\", inputs: [\"resourceStrings\", \"suppressInputAutofocus\", \"type\", \"theme\"] }, { kind: \"directive\", type: IgxInputDirective, selector: \"[igxInput]\", inputs: [\"value\", \"disabled\", \"required\"], exportAs: [\"igxInput\"] }, { kind: \"directive\", type: IgxPrefixDirective, selector: \"igx-prefix,[igxPrefix],[igxStart]\" }, { kind: \"component\", type: IgxIconComponent, selector: \"igx-icon\", inputs: [\"family\", \"active\", \"name\"] }, { kind: \"component\", type: IgxCheckboxComponent, selector: \"igx-checkbox\", inputs: [\"id\", \"labelId\", \"value\", \"name\", \"tabindex\", \"labelPosition\", \"disableRipple\", \"required\", \"aria-labelledby\", \"aria-label\", \"indeterminate\", \"checked\", \"disabled\", \"invalid\", \"readonly\", \"disableTransitions\"], outputs: [\"change\"] }, { kind: \"component\", type: IgxChipComponent, selector: \"igx-chip\", inputs: [\"id\", \"tabIndex\", \"data\", \"draggable\", \"animateOnRelease\", \"hideBaseOnDrag\", \"removable\", \"removeIcon\", \"selectable\", \"selectIcon\", \"disabled\", \"selected\", \"color\", \"resourceStrings\"], outputs: [\"selectedChange\", \"moveStart\", \"moveEnd\", \"remove\", \"chipClick\", \"selectedChanging\", \"selectedChanged\", \"keyDown\", \"dragEnter\", \"dragLeave\", \"dragOver\", \"dragDrop\"] }, { kind: \"directive\", type: IgxDragDirective, selector: \"[igxDrag]\", inputs: [\"igxDrag\", \"dragTolerance\", \"dragDirection\", \"dragChannel\", \"ghost\", \"ghostClass\", \"ghostTemplate\", \"ghostHost\", \"scrollContainer\", \"ghostOffsetX\", \"ghostOffsetY\"], outputs: [\"dragStart\", \"dragMove\", \"dragEnd\", \"dragClick\", \"ghostCreate\", \"ghostDestroy\", \"transitioned\"], exportAs: [\"drag\"] }, { kind: \"directive\", type: IgxDropDirective, selector: \"[igxDrop]\", inputs: [\"igxDrop\", \"dropChannel\", \"dropStrategy\"], outputs: [\"enter\", \"over\", \"leave\", \"dropped\"], exportAs: [\"drop\"] }, { kind: \"directive\", type: IgxDragHandleDirective, selector: \"[igxDragHandle]\" }, { kind: \"component\", type: IgxDropDownComponent, selector: \"igx-drop-down\", inputs: [\"allowItemsFocus\", \"labelledBy\"], outputs: [\"opening\", \"opened\", \"closing\", \"closed\"] }, { kind: \"component\", type: IgxDropDownItemComponent, selector: \"igx-drop-down-item\" }, { kind: \"directive\", type: IgxDropDownItemNavigationDirective, selector: \"[igxDropDownItemNavigation]\", inputs: [\"igxDropDownItemNavigation\"] }, { kind: \"component\", type: IgxExpansionPanelComponent, selector: \"igx-expansion-panel\", inputs: [\"animationSettings\", \"id\", \"collapsed\"], outputs: [\"collapsedChange\", \"contentCollapsing\", \"contentCollapsed\", \"contentExpanding\", \"contentExpanded\"] }, { kind: \"component\", type: IgxExpansionPanelHeaderComponent, selector: \"igx-expansion-panel-header\", inputs: [\"lv\", \"role\", \"iconPosition\", \"disabled\"], outputs: [\"interaction\"] }, { kind: \"component\", type: IgxExpansionPanelBodyComponent, selector: \"igx-expansion-panel-body\", inputs: [\"role\", \"label\", \"labelledBy\"] }, { kind: \"directive\", type: IgxExpansionPanelTitleDirective, selector: \"igx-expansion-panel-title\" }, { kind: \"component\", type: IgxListComponent, selector: \"igx-list\", inputs: [\"panEndTriggeringThreshold\", \"id\", \"allowLeftPanning\", \"allowRightPanning\", \"isLoading\", \"resourceStrings\"], outputs: [\"leftPan\", \"rightPan\", \"startPan\", \"endPan\", \"resetPan\", \"panStateChange\", \"itemClicked\"] }, { kind: \"component\", type: IgxListItemComponent, selector: \"igx-list-item\", inputs: [\"isHeader\", \"hidden\", \"index\"] }, { kind: \"component\", type: IgxAccordionComponent, selector: \"igx-accordion\", inputs: [\"id\", \"animationSettings\", \"singleBranchExpand\"], outputs: [\"panelExpanding\", \"panelExpanded\", \"panelCollapsing\", \"panelCollapsed\"] }, { kind: \"pipe\", type: IgxFilterPivotItemsPipe, name: \"filterPivotItems\" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPivotDataSelectorComponent, decorators: [{\n type: Component,\n args: [{ selector: \"igx-pivot-data-selector\", template: \"
    \\n \\n search\\n \\n \\n \\n \\n \\n {{ item.memberName }}\\n \\n \\n \\n {{ item.displayName || item.member }}\\n \\n \\n
    \\n\\n\\n \\n \\n \\n
    \\n {{ grid?.resourceStrings[panel.i18n] }}\\n
    \\n
    \\n {{ panel.icon }}\\n {{ this.grid ? this.grid[panel.dataKey].length : 0 }}\\n
    \\n
    \\n \\n \\n 0\\\"\\n [displayDensity]=\\\"displayDensity\\\"\\n >\\n \\n
    \\n \\n
    \\n {{\\n item.aggregate.key\\n }}\\n (\\n {{ item[panel.displayKey] || item[panel.itemKey] }}\\n )\\n
    \\n \\n {{\\n item.sortDirection < 2\\n ? \\\"arrow_upward\\\"\\n : \\\"arrow_downward\\\"\\n }}\\n \\n
    \\n
    \\n filter_list\\n \\n \\n functions\\n \\n 0\\\"\\n >drag_handle\\n
    \\n \\n \\n \\n \\n {{ grid?.resourceStrings.igx_grid_pivot_selector_panel_empty }}\\n \\n \\n \\n
    \\n\\n\\n \\n {{ item.label }}\\n \\n\\n\\n\\n \\n
    \\n unfold_more\\n {{ ghostText }}\\n
    \\n drag_handle\\n \\n
    \\n\" }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { columnsExpanded: [{\n type: Input\n }], columnsExpandedChange: [{\n type: Output\n }], rowsExpanded: [{\n type: Input\n }], rowsExpandedChange: [{\n type: Output\n }], filtersExpanded: [{\n type: Input\n }], filtersExpandedChange: [{\n type: Output\n }], valuesExpanded: [{\n type: Input\n }], valuesExpandedChange: [{\n type: Output\n }], cssClass: [{\n type: HostBinding,\n args: [\"class.igx-pivot-data-selector\"]\n }], grid: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass IgxPivotGridModule {\n}\nIgxPivotGridModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPivotGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIgxPivotGridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPivotGridModule, declarations: [IgxPivotGridComponent,\n IgxPivotRowComponent,\n IgxPivotHeaderRowComponent,\n IgxPivotRowDimensionContentComponent,\n IgxPivotRowDimensionHeaderComponent,\n IgxPivotRowDimensionHeaderGroupComponent,\n IgxPivotRowPipe,\n IgxPivotRowExpansionPipe,\n IgxPivotAutoTransform,\n IgxPivotColumnPipe,\n IgxPivotGridFilterPipe,\n IgxPivotGridSortingPipe,\n IgxPivotGridColumnSortingPipe,\n IgxPivotCellMergingPipe,\n IgxFilterPivotItemsPipe,\n IgxPivotGridCellStyleClassesPipe,\n IgxPivotDataSelectorComponent,\n IgxPivotValueChipTemplateDirective], imports: [IgxGridModule, IgxExpansionPanelModule, IgxDragDropModule, IgxListModule, IgxAccordionModule], exports: [IgxGridModule,\n IgxPivotGridComponent,\n IgxPivotRowComponent,\n IgxPivotHeaderRowComponent,\n IgxPivotRowDimensionContentComponent,\n IgxPivotRowDimensionHeaderComponent,\n IgxPivotRowDimensionHeaderGroupComponent,\n IgxPivotRowExpansionPipe,\n IgxPivotAutoTransform,\n IgxPivotRowPipe,\n IgxPivotColumnPipe,\n IgxPivotGridFilterPipe,\n IgxPivotGridSortingPipe,\n IgxPivotGridColumnSortingPipe,\n IgxPivotCellMergingPipe,\n IgxFilterPivotItemsPipe,\n IgxPivotGridCellStyleClassesPipe,\n IgxPivotDataSelectorComponent,\n IgxPivotValueChipTemplateDirective] });\nIgxPivotGridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPivotGridModule, imports: [IgxGridModule, IgxExpansionPanelModule, IgxDragDropModule, IgxListModule, IgxAccordionModule, IgxGridModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0\", ngImport: i0, type: IgxPivotGridModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n IgxPivotGridComponent,\n IgxPivotRowComponent,\n IgxPivotHeaderRowComponent,\n IgxPivotRowDimensionContentComponent,\n IgxPivotRowDimensionHeaderComponent,\n IgxPivotRowDimensionHeaderGroupComponent,\n IgxPivotRowPipe,\n IgxPivotRowExpansionPipe,\n IgxPivotAutoTransform,\n IgxPivotColumnPipe,\n IgxPivotGridFilterPipe,\n IgxPivotGridSortingPipe,\n IgxPivotGridColumnSortingPipe,\n IgxPivotCellMergingPipe,\n IgxFilterPivotItemsPipe,\n IgxPivotGridCellStyleClassesPipe,\n IgxPivotDataSelectorComponent,\n IgxPivotValueChipTemplateDirective,\n ],\n exports: [\n IgxGridModule,\n IgxPivotGridComponent,\n IgxPivotRowComponent,\n IgxPivotHeaderRowComponent,\n IgxPivotRowDimensionContentComponent,\n IgxPivotRowDimensionHeaderComponent,\n IgxPivotRowDimensionHeaderGroupComponent,\n IgxPivotRowExpansionPipe,\n IgxPivotAutoTransform,\n IgxPivotRowPipe,\n IgxPivotColumnPipe,\n IgxPivotGridFilterPipe,\n IgxPivotGridSortingPipe,\n IgxPivotGridColumnSortingPipe,\n IgxPivotCellMergingPipe,\n IgxFilterPivotItemsPipe,\n IgxPivotGridCellStyleClassesPipe,\n IgxPivotDataSelectorComponent,\n IgxPivotValueChipTemplateDirective,\n ],\n imports: [IgxGridModule, IgxExpansionPanelModule, IgxDragDropModule, IgxListModule, IgxAccordionModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n }]\n }] });\n\n/*\n * Public API Surface of igniteui-angular\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AbsolutePosition, AbsoluteScrollStrategy, AutoPositionStrategy, BaseFilteringStrategy, BaseProgressDirective, BlockScrollStrategy, ButtonGroupAlignment, Calendar, CalendarHammerConfig, CalendarSelection, CalendarView, CarouselHammerConfig, CarouselIndicatorsOrientation, CloseScrollStrategy, ColumnDisplayOrder, ColumnPinningPosition, ConnectedPositioningStrategy, ContainerPositionStrategy, CsvFileTypes, DEFAULT_OWNER, DEFAULT_PIVOT_KEYS, DataType, DataUtil, DatePart, DateRangePickerFormatPipe, DateRangeType, DefaultDataCloneStrategy, DefaultPivotGridRecordSortingStrategy, DefaultPivotSortingStrategy, DefaultSortingStrategy, DimensionValuesFilteringStrategy, Direction, DisplayDensity, DisplayDensityBase, DisplayDensityToken, DragDirection, DropPosition, ElasticPositionStrategy, ExpansionPanelHeaderIconPosition, ExportRecordType, FilterMode, FilterUtil, FilteringExpressionsTree, FilteringExpressionsTreeType, FilteringLogic, FilteringStrategy, FormattedValuesFilteringStrategy, GRID_LEVEL_COL, GRID_PARENT, GRID_ROOT_SUMMARY, GlobalPositionStrategy, GridBaseAPIService, GridColumnDataType, GridInstanceType, GridPagingMode, GridSelectionMode, GridSummaryCalculationMode, GridSummaryPosition, GroupMemberCountSortingStrategy, GroupedRecords, HeaderType, HorizontalAlignment, HorizontalAnimationType, IGX_GRID_BASE, IGX_INPUT_GROUP_TYPE, IGX_STEPPER_COMPONENT, IGX_STEP_COMPONENT, ITreeGridAggregation, IgcFormControlDirective, IgcFormsModule, IgxAccordionComponent, IgxAccordionModule, IgxActionStripComponent, IgxActionStripMenuItemDirective, IgxActionStripModule, IgxAdvancedFilteringDialogComponent, IgxAppendDropStrategy, IgxAutocompleteDirective, IgxAutocompleteModule, IgxAvatarComponent, IgxAvatarModule, IgxAvatarSize, IgxAvatarType, IgxBadgeComponent, IgxBadgeModule, IgxBadgeType, IgxBannerActionsDirective, IgxBannerComponent, IgxBannerModule, IgxBaseExporter, IgxBaseTransactionService, IgxBooleanFilteringOperand, IgxBottomNavComponent, IgxBottomNavContentComponent, IgxBottomNavHeaderComponent, IgxBottomNavHeaderIconDirective, IgxBottomNavHeaderLabelDirective, IgxBottomNavItemComponent, IgxBottomNavModule, IgxButtonDirective, IgxButtonGroupComponent, IgxButtonGroupModule, IgxButtonModule, IgxCSVTextDirective, IgxCalendarBaseDirective, IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarModule, IgxCalendarMonthDirective, IgxCalendarScrollMonthDirective, IgxCalendarSubheaderTemplateDirective, IgxCalendarView, IgxCalendarYearDirective, IgxCardActionsComponent, IgxCardActionsLayout, IgxCardComponent, IgxCardContentDirective, IgxCardFooterDirective, IgxCardHeaderComponent, IgxCardHeaderSubtitleDirective, IgxCardHeaderTitleDirective, IgxCardMediaDirective, IgxCardModule, IgxCardThumbnailDirective, IgxCardType, IgxCarouselComponent, IgxCarouselComponentBase, IgxCarouselIndicatorDirective, IgxCarouselModule, IgxCarouselNextButtonDirective, IgxCarouselPrevButtonDirective, IgxCellEditorTemplateDirective, IgxCellFooterTemplateDirective, IgxCellHeaderTemplateDirective, IgxCellTemplateDirective, IgxCellValidationErrorDirective, IgxCheckboxComponent, IgxCheckboxModule, IgxChildGridRowComponent, IgxChipComponent, IgxChipsAreaComponent, IgxChipsModule, IgxCircularProgressBarComponent, IgxCollapsibleIndicatorTemplateDirective, IgxColumMaxLengthValidatorDirective, IgxColumPatternValidatorDirective, IgxColumnActionEnabledPipe, IgxColumnActionsBaseDirective, IgxColumnActionsComponent, IgxColumnActionsModule, IgxColumnComponent, IgxColumnEmailValidatorDirective, IgxColumnFormatterPipe, IgxColumnGroupComponent, IgxColumnHidingDirective, IgxColumnLayoutComponent, IgxColumnMaxValidatorDirective, IgxColumnMinLengthValidatorDirective, IgxColumnMinValidatorDirective, IgxColumnMovingDragDirective, IgxColumnMovingDropDirective, IgxColumnMovingModule, IgxColumnPinningDirective, IgxColumnRequiredValidatorDirective, IgxColumnResizerDirective, IgxComboAddItemComponent, IgxComboAddItemDirective, IgxComboClearIconDirective, IgxComboComponent, IgxComboDropDownComponent, IgxComboEmptyDirective, IgxComboFilteringPipe, IgxComboFooterDirective, IgxComboGroupingPipe, IgxComboHeaderDirective, IgxComboHeaderItemDirective, IgxComboItemComponent, IgxComboItemDirective, IgxComboModule, IgxComboToggleIconDirective, IgxCsvExporterOptions, IgxCsvExporterService, IgxDataLoadingTemplateDirective, IgxDataRecordSorting, IgxDateFilteringOperand, IgxDatePickerComponent, IgxDatePickerModule, IgxDateRangeEndComponent, IgxDateRangeInputsBaseComponent, IgxDateRangePickerComponent, IgxDateRangePickerModule, IgxDateRangeSeparatorDirective, IgxDateRangeStartComponent, IgxDateSummaryOperand, IgxDateTimeEditorDirective, IgxDateTimeEditorModule, IgxDateTimeFilteringOperand, IgxDaysViewComponent, IgxDefaultDropStrategy, IgxDialogActionsDirective, IgxDialogComponent, IgxDialogModule, IgxDialogTitleDirective, IgxDisplayDensityModule, IgxDividerDirective, IgxDividerModule, IgxDividerType, IgxDragDirective, IgxDragDropModule, IgxDragHandleDirective, IgxDragIgnoreDirective, IgxDragIndicatorIconDirective, IgxDragLocation, IgxDropDirective, IgxDropDownBaseDirective, IgxDropDownComponent, IgxDropDownGroupComponent, IgxDropDownItemBaseDirective, IgxDropDownItemComponent, IgxDropDownItemNavigationDirective, IgxDropDownModule, IgxEmptyListTemplateDirective, IgxExcelExporterOptions, IgxExcelExporterService, IgxExcelStyleClearFiltersComponent, IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleConditionalFilterComponent, IgxExcelStyleDateExpressionComponent, IgxExcelStyleFilterOperationsTemplateDirective, IgxExcelStyleHeaderComponent, IgxExcelStyleHeaderIconDirective, IgxExcelStyleHidingComponent, IgxExcelStyleLoadingValuesTemplateDirective, IgxExcelStyleMovingComponent, IgxExcelStylePinningComponent, IgxExcelStyleSearchComponent, IgxExcelStyleSelectingComponent, IgxExcelStyleSortingComponent, IgxExcelTextDirective, IgxExpansionPanelBodyComponent, IgxExpansionPanelComponent, IgxExpansionPanelDescriptionDirective, IgxExpansionPanelHeaderComponent, IgxExpansionPanelIconDirective, IgxExpansionPanelModule, IgxExpansionPanelTitleDirective, IgxExporterOptionsBase, IgxFieldFormatterPipe, IgxFilterActionColumnsPipe, IgxFilterCellTemplateDirective, IgxFilterDirective, IgxFilterModule, IgxFilterOptions, IgxFilterPipe, IgxFilterPivotItemsPipe, IgxFilteringOperand, IgxFlatTransactionFactory, IgxFlexDirective, IgxFocusDirective, IgxFocusModule, IgxFocusTrapDirective, IgxFocusTrapModule, IgxForOfContext, IgxForOfDirective, IgxForOfModule, IgxGridAPIService, IgxGridActionButtonComponent, IgxGridActionsBaseDirective, IgxGridAddRowPipe, IgxGridBaseDirective, IgxGridBodyDirective, IgxGridCell, IgxGridCellImageAltPipe, IgxGridCellStyleClassesPipe, IgxGridCellStylesPipe, IgxGridColumnModule, IgxGridColumnResizerComponent, IgxGridCommonModule, IgxGridComponent, IgxGridDataMapperPipe, IgxGridDetailTemplateDirective, IgxGridDetailsPipe, IgxGridDragSelectDirective, IgxGridEditingActionsComponent, IgxGridExcelStyleFilteringComponent, IgxGridExcelStyleFilteringModule, IgxGridExpandableCellComponent, IgxGridFilterConditionPipe, IgxGridFilteringModule, IgxGridFilteringPipe, IgxGridFooterComponent, IgxGridForOfDirective, IgxGridGroupByAreaComponent, IgxGridGroupByRowComponent, IgxGridGroupingPipe, IgxGridHeaderComponent, IgxGridHeaderGroupComponent, IgxGridHeaderRowComponent, IgxGridHeadersModule, IgxGridHierarchicalPagingPipe, IgxGridHierarchicalPipe, IgxGridModule, IgxGridNotGroupedPipe, IgxGridPaginatorOptionsPipe, IgxGridPagingPipe, IgxGridPinningActionsComponent, IgxGridPipesModule, IgxGridResizingModule, IgxGridRow, IgxGridRowClassesPipe, IgxGridRowPinningPipe, IgxGridRowStylesPipe, IgxGridSelectionModule, IgxGridSharedModules, IgxGridSortingPipe, IgxGridStateDirective, IgxGridStateModule, IgxGridSummaryModule, IgxGridSummaryPipe, IgxGridToolbarActionsComponent, IgxGridToolbarAdvancedFilteringComponent, IgxGridToolbarComponent, IgxGridToolbarDirective, IgxGridToolbarExporterComponent, IgxGridToolbarHidingComponent, IgxGridToolbarModule, IgxGridToolbarPinningComponent, IgxGridToolbarTitleComponent, IgxGridTopLevelColumns, IgxGridTransactionPipe, IgxGridTransactionStatePipe, IgxGridValidationService, IgxGroupAreaDropDirective, IgxGroupByAreaDirective, IgxGroupByMetaPipe, IgxGroupByRow, IgxGroupByRowSelectorDirective, IgxGroupByRowTemplateDirective, IgxGroupedTreeGridSorting, IgxGrouping, IgxHasVisibleColumnsPipe, IgxHeadSelectorDirective, IgxHeaderCollapseIndicatorDirective, IgxHeaderExpandIndicatorDirective, IgxHeaderGroupStylePipe, IgxHeaderGroupWidthPipe, IgxHierarchicalGridAPIService, IgxHierarchicalGridBaseDirective, IgxHierarchicalGridComponent, IgxHierarchicalGridModule, IgxHierarchicalGridRow, IgxHierarchicalRowComponent, IgxHierarchicalTransactionFactory, IgxHierarchicalTransactionService, IgxHierarchicalTransactionServiceFactory, IgxHintDirective, IgxIconComponent, IgxIconModule, IgxIconService, IgxInputDirective, IgxInputGroupComponent, IgxInputGroupModule, IgxInputState, IgxInsertDropStrategy, IgxItemListDirective, IgxLabelDirective, IgxLayoutDirective, IgxLayoutModule, IgxLinearProgressBarComponent, IgxListActionDirective, IgxListBaseDirective, IgxListComponent, IgxListItemComponent, IgxListItemLeftPanningTemplateDirective, IgxListItemRightPanningTemplateDirective, IgxListLineDirective, IgxListLineSubTitleDirective, IgxListLineTitleDirective, IgxListModule, IgxListPanState, IgxListThumbnailDirective, IgxMaskDirective, IgxMaskModule, IgxMonthPickerBaseDirective, IgxMonthPickerComponent, IgxMonthsViewComponent, IgxNavDrawerItemDirective, IgxNavDrawerMiniTemplateDirective, IgxNavDrawerTemplateDirective, IgxNavbarActionDirective, IgxNavbarComponent, IgxNavbarModule, IgxNavbarTitleDirective, IgxNavigationCloseDirective, IgxNavigationDrawerComponent, IgxNavigationDrawerModule, IgxNavigationModule, IgxNavigationService, IgxNavigationToggleDirective, IgxNumberFilteringOperand, IgxNumberSummaryOperand, IgxOverlayOutletDirective, IgxOverlayService, IgxPageNavigationComponent, IgxPageSizeSelectorComponent, IgxPaginatorComponent, IgxPaginatorDirective, IgxPaginatorModule, IgxPaginatorTemplateDirective, IgxPickerActionsDirective, IgxPickerClearComponent, IgxPickerToggleComponent, IgxPickersCommonModule, IgxPivotAggregate, IgxPivotAutoTransform, IgxPivotCellMergingPipe, IgxPivotColumnPipe, IgxPivotDataSelectorComponent, IgxPivotDateAggregate, IgxPivotDateDimension, IgxPivotGridCellStyleClassesPipe, IgxPivotGridColumnResizerComponent, IgxPivotGridColumnSortingPipe, IgxPivotGridComponent, IgxPivotGridFilterPipe, IgxPivotGridModule, IgxPivotGridSortingPipe, IgxPivotHeaderRowComponent, IgxPivotNumericAggregate, IgxPivotResizeHandleDirective, IgxPivotRowComponent, IgxPivotRowDimensionContentComponent, IgxPivotRowDimensionHeaderComponent, IgxPivotRowDimensionHeaderGroupComponent, IgxPivotRowExpansionPipe, IgxPivotRowPipe, IgxPivotTimeAggregate, IgxPivotValueChipTemplateDirective, IgxPrefixDirective, IgxPrefixModule, IgxPrependDropStrategy, IgxProcessBarTextTemplateDirective, IgxProgressBarGradientDirective, IgxProgressBarModule, IgxProgressType, IgxQueryBuilderComponent, IgxQueryBuilderHeaderComponent, IgxQueryBuilderModule, IgxRadioComponent, IgxRadioGroupDirective, IgxRadioModule, IgxResizeHandleDirective, IgxRippleDirective, IgxRippleModule, IgxRowAddTextDirective, IgxRowCollapsedIndicatorDirective, IgxRowDragDirective, IgxRowDragGhostDirective, IgxRowDragModule, IgxRowEditActionsDirective, IgxRowEditTabStopDirective, IgxRowEditTemplateDirective, IgxRowEditTextDirective, IgxRowExpandedIndicatorDirective, IgxRowIslandAPIService, IgxRowIslandComponent, IgxRowLoadingIndicatorTemplateDirective, IgxRowSelectorDirective, IgxSelectComponent, IgxSelectFooterDirective, IgxSelectGroupComponent, IgxSelectHeaderDirective, IgxSelectItemComponent, IgxSelectItemNavigationDirective, IgxSelectModule, IgxSelectToggleIconDirective, IgxSimpleComboComponent, IgxSimpleComboModule, IgxSlideComponent, IgxSliderComponent, IgxSliderModule, IgxSliderType, IgxSnackbarComponent, IgxSnackbarModule, IgxSortActionColumnsPipe, IgxSortAscendingHeaderIconDirective, IgxSortDescendingHeaderIconDirective, IgxSortHeaderIconDirective, IgxSorting, IgxSplitBarComponent, IgxSplitterComponent, IgxSplitterModule, IgxSplitterPaneComponent, IgxStepActiveIndicatorDirective, IgxStepCompletedIndicatorDirective, IgxStepComponent, IgxStepContentDirective, IgxStepIndicatorDirective, IgxStepInvalidIndicatorDirective, IgxStepSubTitleDirective, IgxStepTitleDirective, IgxStepType, IgxStepperComponent, IgxStepperModule, IgxStepperOrientation, IgxStepperTitlePosition, IgxStringFilteringOperand, IgxStringReplacePipe, IgxSuffixDirective, IgxSuffixModule, IgxSummaryCellComponent, IgxSummaryDataPipe, IgxSummaryFormatterPipe, IgxSummaryOperand, IgxSummaryRow, IgxSummaryRowComponent, IgxSummaryTemplateDirective, IgxSwitchComponent, IgxSwitchModule, IgxTabContentComponent, IgxTabContentDirective, IgxTabHeaderComponent, IgxTabHeaderDirective, IgxTabHeaderIconDirective, IgxTabHeaderLabelDirective, IgxTabItemComponent, IgxTabItemDirective, IgxTabsAlignment, IgxTabsComponent, IgxTabsDirective, IgxTabsModule, IgxTemplateOutletDirective, IgxTemplateOutletModule, IgxTextAlign, IgxTextHighlightDirective, IgxTextHighlightModule, IgxTextSelectionDirective, IgxTextSelectionModule, IgxThumbFromTemplateDirective, IgxThumbToTemplateDirective, IgxTickLabelTemplateDirective, IgxTimeFilteringOperand, IgxTimeItemDirective, IgxTimePickerActionsDirective, IgxTimePickerComponent, IgxTimePickerModule, IgxTimePickerTemplateDirective, IgxTimeSummaryOperand, IgxToastComponent, IgxToastModule, IgxToggleActionDirective, IgxToggleDirective, IgxToggleModule, IgxTooltipDirective, IgxTooltipModule, IgxTooltipTargetDirective, IgxTransactionService, IgxTreeComponent, IgxTreeExpandIndicatorDirective, IgxTreeGridAPIService, IgxTreeGridAddRowPipe, IgxTreeGridComponent, IgxTreeGridGroupByAreaComponent, IgxTreeGridGroupingPipe, IgxTreeGridModule, IgxTreeGridRow, IgxTreeModule, IgxTreeNodeComponent, IgxTreeNodeLinkDirective, IgxTreeSelectMarkerDirective, IgxTreeSelectionType, IgxYearsViewComponent, LabelPosition, NoOpScrollStrategy, NoopFilteringStrategy, NoopPivotDimensionsStrategy, NoopSortingStrategy, PagingError, PickerInteractionMode, PivotColumnDimensionsStrategy, PivotDimensionType, PivotRowDimensionsStrategy, Point, RadioGroupAlignment, RadioLabelPosition, RelativePosition, RelativePositionStrategy, RowEditPositionStrategy, RowPinningPosition, SPLITTER_INTERACTION_KEYS, ScrollMonth, ScrollStrategy, SliderHandle, SortingDirection, SortingIndexPipe, SplitterType, SwitchLabelPosition, TickLabelsOrientation, TicksOrientation, TransactionEventOrigin, TransactionType, TreeGridFilteringStrategy, TreeGridFormattedValuesFilteringStrategy, TreeGridMatchingRecordsOnlyFilteringStrategy, VerticalAlignment, VerticalAnimationType, WEEKDAYS, blink, changei18n, fadeIn, fadeOut, flipBottom, flipHorBck, flipHorFwd, flipLeft, flipRight, flipTop, flipVerBck, flipVerFwd, getCurrentResourceStrings, getTypeNameForDebugging, growVerIn, growVerOut, heartbeat, hierarchicalTransactionServiceFactory, isDateInRanges, isLeap, monthRange, pulsateBck, pulsateFwd, range, rotateInBl, rotateInBottom, rotateInBr, rotateInCenter, rotateInDiagonal1, rotateInDiagonal2, rotateInHor, rotateInLeft, rotateInRight, rotateInTl, rotateInTop, rotateInTr, rotateInVer, rotateOutBl, rotateOutBottom, rotateOutBr, rotateOutCenter, rotateOutDiagonal1, rotateOutDiagonal2, rotateOutHor, rotateOutLeft, rotateOutRight, rotateOutTl, rotateOutTop, rotateOutTr, rotateOutVer, scaleInBl, scaleInBottom, scaleInBr, scaleInCenter, scaleInHorCenter, scaleInHorLeft, scaleInHorRight, scaleInLeft, scaleInRight, scaleInTl, scaleInTop, scaleInTr, scaleInVerBottom, scaleInVerCenter, scaleInVerTop, scaleOutBl, scaleOutBottom, scaleOutBr, scaleOutCenter, scaleOutHorCenter, scaleOutHorLeft, scaleOutHorRight, scaleOutLeft, scaleOutRight, scaleOutTl, scaleOutTop, scaleOutTr, scaleOutVerBottom, scaleOutVerCenter, scaleOutVerTop, shakeBl, shakeBottom, shakeBr, shakeCenter, shakeHor, shakeLeft, shakeRight, shakeTl, shakeTop, shakeTr, shakeVer, slideInBl, slideInBottom, slideInBr, slideInLeft, slideInRight, slideInTl, slideInTop, slideInTr, slideOutBl, slideOutBottom, slideOutBr, slideOutLeft, slideOutRight, slideOutTl, slideOutTop, slideOutTr, swingInBottomBck, swingInBottomFwd, swingInLeftBck, swingInLeftFwd, swingInRightBck, swingInRightFwd, swingInTopBck, swingInTopFwd, swingOutBottomBck, swingOutBottomFwd, swingOutLeftBck, swingOutLefttFwd, swingOutRightBck, swingOutRightFwd, swingOutTopBck, swingOutTopFwd, toPercent, toValue, valueInRange, weekDay, IgxGridFilteringCellComponent as θIgxGridFilteringCellComponent, IgxGridFilteringRowComponent as θIgxGridFilteringRowComponent, IgxHierarchicalGridCellComponent as θIgxHierarchicalGridCellComponent, IgxTreeGridCellComponent as θIgxTreeGridCellComponent, IgxTreeGridRowComponent as θIgxTreeGridRowComponent, IgxGridCellComponent as ϴIgxGridCellComponent, IgxGridRowComponent as ϴIgxGridRowComponent };\n","import * as i0 from '@angular/core';\nimport { Injectable, Component, Inject, Input, EventEmitter, ViewChild, Output, HostListener, PLATFORM_ID, ViewEncapsulation, NgModule } from '@angular/core';\nimport * as i2$1 from '@angular/common';\nimport { DOCUMENT, isPlatformBrowser, CommonModule } from '@angular/common';\nimport * as i2 from '@angular/platform-browser';\n\nconst DESC = 'DESC', ASC = 'ASC';\nclass NgImageSliderService {\n constructor() { }\n isBase64(str) {\n var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n return base64regex.test(str);\n }\n base64FileExtension(str) {\n return str.substring(\"data:image/\".length, str.indexOf(\";base64\"));\n }\n orderArray(arr = [], orderType = ASC) {\n if ((arr === null || arr === void 0 ? void 0 : arr.length) && orderType) {\n return arr.sort((ob1, ob2) => {\n if (ob1['order'] === null || !ob1['order']) {\n return 1;\n }\n else if (ob2['order'] === null || !ob2['order']) {\n return -1;\n }\n else if (ob1['order'] > ob2['order']) {\n if (orderType === DESC) {\n return -1;\n }\n else {\n return 1;\n }\n }\n else if (ob1['order'] < ob2['order']) {\n if (orderType === DESC) {\n return 1;\n }\n else {\n return -1;\n }\n }\n });\n }\n return arr;\n }\n}\n/** @nocollapse */ NgImageSliderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: NgImageSliderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n/** @nocollapse */ NgImageSliderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: NgImageSliderService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: NgImageSliderService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return []; } });\n\nconst youtubeRegExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=|\\?v=)([^#\\&\\?]*).*/, validFileExtensions = ['jpeg', 'jpg', 'gif', 'png'], validVideoExtensions = ['mp4'];\nclass SliderCustomImageComponent {\n constructor(imageSliderService, sanitizer, document) {\n this.imageSliderService = imageSliderService;\n this.sanitizer = sanitizer;\n this.YOUTUBE = 'youtube';\n this.IMAGE = 'image';\n this.VIDEO = 'video';\n this.fileUrl = '';\n this.fileExtension = '';\n this.type = this.IMAGE;\n this.imageLoading = true;\n // @inputs\n this.showVideo = false;\n this.videoAutoPlay = false;\n this.showVideoControls = 1;\n this.speed = 1;\n this.isVideo = false;\n this.alt = '';\n this.title = '';\n this.direction = 'ltr';\n this.ratio = false;\n this.lazy = false;\n }\n ngOnChanges(changes) {\n if (this.imageUrl\n && this.imageUrl\n && this.imageUrl\n && typeof (this.imageUrl) === 'string'\n && ((changes.imageUrl && changes.imageUrl.firstChange)\n ||\n (this.videoAutoPlay))) {\n this.setUrl();\n }\n }\n setUrl() {\n const url = this.imageUrl;\n this.imageLoading = true;\n this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(url);\n this.fileExtension = url.split('.').pop().split(/\\#|\\?/)[0];\n if (this.imageSliderService.base64FileExtension(url)\n && (validFileExtensions.indexOf(this.imageSliderService.base64FileExtension(url).toLowerCase()) > -1\n || validVideoExtensions.indexOf(this.imageSliderService.base64FileExtension(url).toLowerCase()) > -1)) {\n this.fileExtension = this.imageSliderService.base64FileExtension(url);\n }\n // verify for youtube url\n const match = url.match(youtubeRegExp);\n if (match && match[2].length === 11) {\n if (this.showVideo) {\n this.type = this.YOUTUBE;\n this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(`${'https://www.youtube.com/embed/'}${match[2]}${this.videoAutoPlay ? '?autoplay=1&enablejsapi=1' : '?autoplay=0&enablejsapi=1'}${'&controls='}${this.showVideoControls}`);\n }\n else {\n this.type = this.IMAGE;\n this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(`https://img.youtube.com/vi/${match[2]}/0.jpg`);\n }\n }\n else if (this.fileExtension && validFileExtensions.indexOf(this.fileExtension.toLowerCase()) > -1) {\n this.type = this.IMAGE;\n }\n else if (this.fileExtension && validVideoExtensions.indexOf(this.fileExtension.toLowerCase()) > -1) {\n this.type = this.VIDEO;\n if (this.videoAutoPlay && document.getElementById(`video_${this.imageIndex}`)) {\n const videoObj = document.getElementById(`video_${this.imageIndex}`);\n setTimeout(() => {\n videoObj.play();\n }, this.speed * 1000);\n }\n }\n }\n videoClickHandler(event) {\n if (event && event.srcElement && !this.showVideoControls) {\n if (event.srcElement.paused) {\n event.srcElement.play();\n }\n else {\n event.srcElement.pause();\n }\n }\n }\n}\n/** @nocollapse */ SliderCustomImageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: SliderCustomImageComponent, deps: [{ token: NgImageSliderService }, { token: i2.DomSanitizer }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });\n/** @nocollapse */ SliderCustomImageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.0.4\", type: SliderCustomImageComponent, selector: \"custom-img\", inputs: { showVideo: \"showVideo\", videoAutoPlay: \"videoAutoPlay\", showVideoControls: \"showVideoControls\", currentImageIndex: \"currentImageIndex\", imageIndex: \"imageIndex\", speed: \"speed\", imageUrl: \"imageUrl\", isVideo: \"isVideo\", alt: \"alt\", title: \"title\", direction: \"direction\", ratio: \"ratio\", lazy: \"lazy\" }, usesOnChanges: true, ngImport: i0, template: \"
    \\n \\n \\n \\n
    Invalid file format
    \\n \\n
    \", dependencies: [{ kind: \"directive\", type: i2$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i2$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: SliderCustomImageComponent, decorators: [{\n type: Component,\n args: [{ selector: 'custom-img', template: \"
    \\n \\n \\n \\n
    Invalid file format
    \\n \\n
    \" }]\n }], ctorParameters: function () {\n return [{ type: NgImageSliderService }, { type: i2.DomSanitizer }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }];\n }, propDecorators: { showVideo: [{\n type: Input\n }], videoAutoPlay: [{\n type: Input\n }], showVideoControls: [{\n type: Input\n }], currentImageIndex: [{\n type: Input\n }], imageIndex: [{\n type: Input\n }], speed: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], isVideo: [{\n type: Input\n }], alt: [{\n type: Input\n }], title: [{\n type: Input\n }], direction: [{\n type: Input\n }], ratio: [{\n type: Input\n }], lazy: [{\n type: Input\n }] } });\n\nconst LIGHTBOX_NEXT_ARROW_CLICK_MESSAGE = 'lightbox next', LIGHTBOX_PREV_ARROW_CLICK_MESSAGE = 'lightbox previous';\nclass SliderLightboxComponent {\n constructor(cdRef, sanitizer, elRef, document) {\n this.cdRef = cdRef;\n this.sanitizer = sanitizer;\n this.elRef = elRef;\n this.document = document;\n this.totalImages = 0;\n this.nextImageIndex = -1;\n this.popupWidth = 1200;\n this.marginLeft = 0;\n this.imageFullscreenView = false;\n this.lightboxPrevDisable = false;\n this.lightboxNextDisable = false;\n this.showLoading = true;\n this.effectStyle = 'none';\n this.speed = 1; // default speed in second\n this.title = '';\n this.currentImageIndex = 0;\n // @Inputs\n this.images = [];\n this.videoAutoPlay = false;\n this.direction = 'ltr';\n this.paginationShow = false;\n this.infinite = false;\n this.arrowKeyMove = true;\n this.showVideoControls = true;\n // @Output\n this.close = new EventEmitter();\n this.prevImage = new EventEmitter();\n this.nextImage = new EventEmitter();\n }\n set imageIndex(index) {\n if (index !== undefined && index > -1 && index < this.images.length) {\n this.currentImageIndex = index;\n }\n this.nextPrevDisable();\n }\n set show(visiableFlag) {\n this.imageFullscreenView = visiableFlag;\n this.elRef.nativeElement.ownerDocument.body.style.overflow = '';\n if (visiableFlag === true) {\n this.elRef.nativeElement.ownerDocument.body.style.overflow = 'hidden';\n // this.getImageData();\n this.setPopupSliderWidth();\n }\n }\n set animationSpeed(data) {\n if (data\n && typeof (data) === 'number'\n && data >= 0.1\n && data <= 5) {\n this.speed = data;\n }\n }\n onResize(event) {\n this.effectStyle = 'none';\n this.setPopupSliderWidth();\n }\n handleKeyboardEvent(event) {\n if (event && event.key && this.arrowKeyMove) {\n if (event.key.toLowerCase() === 'arrowright') {\n this.nextImageLightbox();\n }\n if (event.key.toLowerCase() === 'arrowleft') {\n this.prevImageLightbox();\n }\n if (event.key.toLowerCase() === 'escape') {\n this.closeLightbox();\n }\n }\n }\n ngOnInit() {\n }\n ngAfterViewInit() {\n }\n ngOnDestroy() {\n this.resetState();\n }\n setPopupSliderWidth() {\n if (window && window.innerWidth) {\n this.popupWidth = window.innerWidth;\n this.totalImages = this.images.length;\n if (typeof (this.currentImageIndex) === 'number' && this.currentImageIndex !== undefined) {\n this.marginLeft = -1 * this.popupWidth * this.currentImageIndex;\n this.getImageData();\n this.nextPrevDisable();\n setTimeout(() => {\n this.showLoading = false;\n }, 500);\n }\n }\n }\n closeLightbox() {\n this.close.emit();\n }\n prevImageLightbox() {\n this.effectStyle = `all ${this.speed}s ease-in-out`;\n if (this.currentImageIndex > 0 && !this.lightboxPrevDisable) {\n this.currentImageIndex--;\n this.prevImage.emit(LIGHTBOX_PREV_ARROW_CLICK_MESSAGE);\n this.marginLeft = -1 * this.popupWidth * this.currentImageIndex;\n this.getImageData();\n this.nextPrevDisable();\n }\n }\n nextImageLightbox() {\n this.effectStyle = `all ${this.speed}s ease-in-out`;\n if (this.currentImageIndex < this.images.length - 1 && !this.lightboxNextDisable) {\n this.currentImageIndex++;\n this.nextImage.emit(LIGHTBOX_NEXT_ARROW_CLICK_MESSAGE);\n this.marginLeft = -1 * this.popupWidth * this.currentImageIndex;\n this.getImageData();\n this.nextPrevDisable();\n }\n }\n nextPrevDisable() {\n this.lightboxNextDisable = true;\n this.lightboxPrevDisable = true;\n setTimeout(() => {\n this.applyButtonDisableCondition();\n }, this.speed * 1000);\n }\n applyButtonDisableCondition() {\n this.lightboxNextDisable = false;\n this.lightboxPrevDisable = false;\n if (!this.infinite && this.currentImageIndex >= this.images.length - 1) {\n this.lightboxNextDisable = true;\n }\n if (!this.infinite && this.currentImageIndex <= 0) {\n this.lightboxPrevDisable = true;\n }\n }\n getImageData() {\n if (this.images\n && this.images.length\n && typeof (this.currentImageIndex) === 'number'\n && this.currentImageIndex !== undefined\n && this.images[this.currentImageIndex]\n && (this.images[this.currentImageIndex]['image'] || this.images[this.currentImageIndex]['video'])) {\n this.title = this.images[this.currentImageIndex]['title'] || '';\n this.totalImages = this.images.length;\n for (const iframeI in this.document.getElementsByTagName('iframe')) {\n if (this.document.getElementsByTagName('iframe')[iframeI]\n && this.document.getElementsByTagName('iframe')[iframeI].contentWindow\n && this.document.getElementsByTagName('iframe')[iframeI].contentWindow.postMessage) {\n this.document.getElementsByTagName('iframe')[iframeI].contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n }\n }\n for (const videoI in this.document.getElementsByTagName('video')) {\n if (this.document.getElementsByTagName('video')[videoI] && this.document.getElementsByTagName('video')[videoI].pause) {\n this.document.getElementsByTagName('video')[videoI].pause();\n }\n }\n }\n }\n resetState() {\n this.images = [];\n }\n /**\n * Swipe event handler\n * Reference from https://stackoverflow.com/a/44511007/2067646\n */\n swipeLightboxImg(e, when) {\n const coord = [e.changedTouches[0].pageX, e.changedTouches[0].pageY];\n const time = new Date().getTime();\n if (when === 'start') {\n this.swipeLightboxImgCoord = coord;\n this.swipeLightboxImgTime = time;\n }\n else if (when === 'end') {\n const direction = [coord[0] - this.swipeLightboxImgCoord[0], coord[1] - this.swipeLightboxImgCoord[1]];\n const duration = time - this.swipeLightboxImgTime;\n if (duration < 1000 //\n && Math.abs(direction[0]) > 30 // Long enough\n && Math.abs(direction[0]) > Math.abs(direction[1] * 3)) { // Horizontal enough\n if (direction[0] < 0) {\n this.nextImageLightbox();\n }\n else {\n this.prevImageLightbox();\n }\n }\n }\n }\n}\n/** @nocollapse */ SliderLightboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: SliderLightboxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i2.DomSanitizer }, { token: i0.ElementRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });\n/** @nocollapse */ SliderLightboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.0.4\", type: SliderLightboxComponent, selector: \"slider-lightbox\", inputs: { images: \"images\", imageIndex: \"imageIndex\", show: \"show\", videoAutoPlay: \"videoAutoPlay\", direction: \"direction\", paginationShow: \"paginationShow\", animationSpeed: \"animationSpeed\", infinite: \"infinite\", arrowKeyMove: \"arrowKeyMove\", showVideoControls: \"showVideoControls\" }, outputs: { close: \"close\", prevImage: \"prevImage\", nextImage: \"nextImage\" }, host: { listeners: { \"window:resize\": \"onResize($event)\", \"document:keyup\": \"handleKeyboardEvent($event)\" } }, viewQueries: [{ propertyName: \"lightboxDiv\", first: true, predicate: [\"lightboxDiv\"], descendants: true }, { propertyName: \"lightboxImageDiv\", first: true, predicate: [\"lightboxImageDiv\"], descendants: true }], ngImport: i0, template: \"
    \\n\", dependencies: [{ kind: \"directive\", type: i2$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i2$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i2$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: SliderCustomImageComponent, selector: \"custom-img\", inputs: [\"showVideo\", \"videoAutoPlay\", \"showVideoControls\", \"currentImageIndex\", \"imageIndex\", \"speed\", \"imageUrl\", \"isVideo\", \"alt\", \"title\", \"direction\", \"ratio\", \"lazy\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: SliderLightboxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'slider-lightbox', template: \"\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: i2.DomSanitizer }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }];\n }, propDecorators: { lightboxDiv: [{\n type: ViewChild,\n args: ['lightboxDiv', { static: false }]\n }], lightboxImageDiv: [{\n type: ViewChild,\n args: ['lightboxImageDiv', { static: false }]\n }], images: [{\n type: Input\n }], imageIndex: [{\n type: Input\n }], show: [{\n type: Input\n }], videoAutoPlay: [{\n type: Input\n }], direction: [{\n type: Input\n }], paginationShow: [{\n type: Input\n }], animationSpeed: [{\n type: Input\n }], infinite: [{\n type: Input\n }], arrowKeyMove: [{\n type: Input\n }], showVideoControls: [{\n type: Input\n }], close: [{\n type: Output\n }], prevImage: [{\n type: Output\n }], nextImage: [{\n type: Output\n }], onResize: [{\n type: HostListener,\n args: ['window:resize', ['$event']]\n }], handleKeyboardEvent: [{\n type: HostListener,\n args: ['document:keyup', ['$event']]\n }] } });\n\nconst NEXT_ARROW_CLICK_MESSAGE = 'next', PREV_ARROW_CLICK_MESSAGE = 'previous';\nclass NgImageSliderComponent {\n constructor(cdRef, platformId, imageSliderService, elRef\n // @Inject(ElementRef) private _elementRef: ElementRef\n ) {\n this.cdRef = cdRef;\n this.platformId = platformId;\n this.imageSliderService = imageSliderService;\n this.elRef = elRef;\n // for slider\n this.sliderMainDivWidth = 0;\n this.imageParentDivWidth = 0;\n this.imageObj = [];\n this.ligthboxImageObj = [];\n this.totalImages = 0;\n this.leftPos = 0;\n this.effectStyle = 'all 1s ease-in-out';\n this.speed = 1; // default speed in second\n this.sliderPrevDisable = false;\n this.sliderNextDisable = false;\n this.slideImageCount = 1;\n this.sliderImageWidth = 205;\n this.sliderImageReceivedWidth = 205;\n this.sliderImageHeight = 200;\n this.sliderImageReceivedHeight = 205;\n this.sliderImageSizeWithPadding = 211;\n this.autoSlideCount = 0;\n this.stopSlideOnHover = true;\n this.showArrowButton = true;\n this.textDirection = 'ltr';\n this.imageMargin = 3;\n this.sliderOrderType = 'ASC';\n // for lightbox\n this.ligthboxShow = false;\n this.activeImageIndex = -1;\n this.visiableImageIndex = 0;\n this.infinite = false;\n this.imagePopup = true;\n this.images = [];\n this.videoAutoPlay = false;\n this.paginationShow = false;\n this.arrowKeyMove = true;\n this.manageImageRatio = false;\n this.showVideoControls = true;\n this.lazyLoading = false;\n // @Outputs\n this.imageClick = new EventEmitter();\n this.arrowClick = new EventEmitter();\n this.lightboxArrowClick = new EventEmitter();\n this.lightboxClose = new EventEmitter();\n }\n // @inputs\n set imageSize(data) {\n if (data\n && typeof (data) === 'object') {\n if (data.hasOwnProperty('space') && typeof (data['space']) === 'number' && data['space'] > -1) {\n this.imageMargin = data['space'];\n }\n if (data.hasOwnProperty('width') && (typeof (data['width']) === 'number' || typeof (data['width']) === 'string')) {\n this.sliderImageReceivedWidth = data['width'];\n // this.sliderImageSizeWithPadding = data['width'] + (this.imageMargin * 2); // addeing padding with image width\n }\n if (data.hasOwnProperty('height') && (typeof (data['height']) === 'number' || typeof (data['height']) === 'string')) {\n this.sliderImageReceivedHeight = data['height'];\n }\n }\n }\n set direction(dir) {\n if (dir) {\n this.textDirection = dir;\n }\n }\n set animationSpeed(data) {\n if (data\n && typeof (data) === 'number'\n && data >= 0.1\n && data <= 5) {\n this.speed = data;\n this.effectStyle = `all ${this.speed}s ease-in-out`;\n }\n }\n set slideImage(count) {\n if (count && typeof count === 'number') {\n this.slideImageCount = Math.round(count);\n }\n }\n set autoSlide(count) {\n if (count && (typeof count === 'number'\n || typeof count === 'boolean'\n || typeof count === 'object')) {\n if (typeof count === 'number' && count >= 1 && count <= 5) {\n count = Math.round(count);\n }\n else if (typeof count === 'boolean') {\n count = 1;\n }\n else if (typeof count === 'object'\n && count.hasOwnProperty('interval')\n && Math.round(count['interval'])\n && Math.round(count['interval']) >= 1\n && Math.round(count['interval']) <= 5) {\n this.stopSlideOnHover = count.hasOwnProperty('stopOnHover') ? count['stopOnHover'] : true;\n count = Math.round(count['interval']);\n }\n this.autoSlideCount = count * 1000;\n }\n }\n set showArrow(flag) {\n if (flag !== undefined && typeof flag === 'boolean') {\n this.showArrowButton = flag;\n }\n }\n set orderType(data) {\n if (data !== undefined && typeof data === 'string') {\n this.sliderOrderType = data.toUpperCase();\n }\n }\n set defaultActiveImage(activeIndex) {\n if (typeof activeIndex === 'number' && activeIndex > -1) {\n this.activeImageIndex = activeIndex;\n }\n }\n onResize(event) {\n this.setSliderWidth();\n }\n handleKeyboardEvent(event) {\n if (event && event.key) {\n if (event.key.toLowerCase() === 'arrowright' && !this.ligthboxShow && this.arrowKeyMove) {\n this.next();\n }\n if (event.key.toLowerCase() === 'arrowleft' && !this.ligthboxShow && this.arrowKeyMove) {\n this.prev();\n }\n if (event.key.toLowerCase() === 'escape' && this.ligthboxShow) {\n this.close();\n }\n }\n }\n ngOnInit() {\n // @TODO: for future use\n // console.log(this._elementRef)\n // for slider\n if (this.infinite) {\n this.effectStyle = 'none';\n this.leftPos = -1 * this.sliderImageSizeWithPadding * this.slideImageCount;\n for (let i = 1; i <= this.slideImageCount; i++) {\n this.imageObj.unshift(this.imageObj[this.imageObj.length - i]);\n }\n }\n }\n // for slider\n ngAfterViewInit() {\n this.setSliderWidth();\n this.cdRef.detectChanges();\n if (isPlatformBrowser(this.platformId)) {\n this.imageAutoSlide();\n }\n }\n ngOnDestroy() {\n if (this.autoSlideInterval) {\n clearInterval(this.autoSlideInterval);\n }\n if (this.ligthboxShow === true) {\n this.close();\n }\n }\n ngOnChanges(changes) {\n if (changes.images\n && changes.images.hasOwnProperty('previousValue')\n && changes.images.hasOwnProperty('currentValue')\n && changes.images.previousValue != changes.images.currentValue) {\n this.setSliderImages(changes.images.currentValue);\n }\n if (changes && changes.imageSize) {\n const size = changes.imageSize;\n if (size\n && size.previousValue\n && size.currentValue\n && size.previousValue.width && size.previousValue.height\n && size.currentValue.width && size.currentValue.height\n && (size.previousValue.width !== size.currentValue.width\n || size.previousValue.height !== size.currentValue.height)) {\n this.setSliderWidth();\n }\n }\n }\n ngDoCheck() {\n if (this.images\n && this.ligthboxImageObj\n && this.images.length !== this.ligthboxImageObj.length) {\n this.setSliderImages(this.images);\n }\n }\n setSliderImages(imgObj) {\n if (imgObj && imgObj instanceof Array && imgObj.length) {\n const sliderOrderEnable = imgObj.find((img) => {\n if (img.hasOwnProperty('order')) {\n return true;\n }\n });\n if (sliderOrderEnable) {\n imgObj = this.imageSliderService.orderArray(imgObj, this.sliderOrderType.toUpperCase());\n }\n this.imageObj = imgObj.map((img, index) => {\n img['index'] = index;\n return img;\n });\n this.ligthboxImageObj = [...this.imageObj];\n this.totalImages = this.imageObj.length;\n // this.imageParentDivWidth = imgObj.length * this.sliderImageSizeWithPadding;\n }\n else {\n this.imageObj = [];\n this.ligthboxImageObj = [];\n this.totalImages = 0;\n this.imageParentDivWidth = 0;\n this.activeImageIndex = 0;\n }\n this.setSliderWidth();\n }\n setSliderWidth() {\n if (this.sliderMain\n && this.sliderMain.nativeElement\n && this.sliderMain.nativeElement.offsetWidth) {\n this.sliderMainDivWidth = this.sliderMain.nativeElement.offsetWidth;\n }\n if (this.sliderMainDivWidth\n && this.sliderImageReceivedWidth) {\n if (typeof this.sliderImageReceivedWidth === 'number') {\n this.sliderImageWidth = this.sliderImageReceivedWidth;\n }\n else if (typeof this.sliderImageReceivedWidth === 'string') {\n if (this.sliderImageReceivedWidth.indexOf('px') >= 0) {\n this.sliderImageWidth = parseFloat(this.sliderImageReceivedWidth);\n }\n else if (this.sliderImageReceivedWidth.indexOf('%') >= 0) {\n this.sliderImageWidth = +((this.sliderMainDivWidth * parseFloat(this.sliderImageReceivedWidth)) / 100).toFixed(2);\n }\n else if (parseFloat(this.sliderImageReceivedWidth)) {\n this.sliderImageWidth = parseFloat(this.sliderImageReceivedWidth);\n }\n }\n }\n if (isPlatformBrowser(this.platformId)) {\n if (window && window.innerHeight\n && this.sliderImageReceivedHeight) {\n if (typeof this.sliderImageReceivedHeight === 'number') {\n this.sliderImageHeight = this.sliderImageReceivedHeight;\n }\n else if (typeof this.sliderImageReceivedHeight === 'string') {\n if (this.sliderImageReceivedHeight.indexOf('px') >= 0) {\n this.sliderImageHeight = parseFloat(this.sliderImageReceivedHeight);\n }\n else if (this.sliderImageReceivedHeight.indexOf('%') >= 0) {\n this.sliderImageHeight = +((window.innerHeight * parseFloat(this.sliderImageReceivedHeight)) / 100).toFixed(2);\n }\n else if (parseFloat(this.sliderImageReceivedHeight)) {\n this.sliderImageHeight = parseFloat(this.sliderImageReceivedHeight);\n }\n }\n }\n }\n this.sliderImageSizeWithPadding = this.sliderImageWidth + (this.imageMargin * 2);\n this.imageParentDivWidth = this.imageObj.length * this.sliderImageSizeWithPadding;\n if (this.imageDiv && this.imageDiv.nativeElement && this.imageDiv.nativeElement.offsetWidth) {\n const staticLeftPos = 0 - ((this.sliderImageSizeWithPadding * this.visiableImageIndex) + (this.imageMargin * 2));\n this.leftPos = this.infinite ? -1 * this.sliderImageSizeWithPadding * this.slideImageCount : staticLeftPos;\n }\n this.nextPrevSliderButtonDisable();\n }\n imageOnClick(index) {\n this.activeImageIndex = index;\n if (this.imagePopup) {\n this.showLightbox();\n }\n this.imageClick.emit(index);\n }\n imageAutoSlide() {\n if (this.infinite && this.autoSlideCount && !this.ligthboxShow) {\n this.autoSlideInterval = setInterval(() => {\n this.next();\n }, this.autoSlideCount);\n }\n }\n imageMouseEnterHandler() {\n if (this.infinite && this.autoSlideCount && this.autoSlideInterval) {\n clearInterval(this.autoSlideInterval);\n }\n }\n prev() {\n if (!this.sliderPrevDisable) {\n if (this.infinite) {\n this.infinitePrevImg();\n }\n else {\n this.prevImg();\n }\n //this.arrowClick.emit(PREV_ARROW_CLICK_MESSAGE);\n this.sliderArrowDisableTeam(PREV_ARROW_CLICK_MESSAGE);\n this.getVisiableIndex();\n }\n }\n next() {\n if (!this.sliderNextDisable) {\n if (this.infinite) {\n this.infiniteNextImg();\n }\n else {\n this.nextImg();\n }\n //this.arrowClick.emit(NEXT_ARROW_CLICK_MESSAGE);\n this.sliderArrowDisableTeam(NEXT_ARROW_CLICK_MESSAGE);\n this.getVisiableIndex();\n }\n }\n prevImg() {\n if (0 >= this.leftPos + (this.sliderImageSizeWithPadding * this.slideImageCount)) {\n this.leftPos += this.sliderImageSizeWithPadding * this.slideImageCount;\n }\n else {\n this.leftPos = 0;\n }\n }\n nextImg() {\n if ((this.imageParentDivWidth + this.leftPos) - this.sliderMainDivWidth > this.sliderImageSizeWithPadding * this.slideImageCount) {\n this.leftPos -= this.sliderImageSizeWithPadding * this.slideImageCount;\n }\n else if ((this.imageParentDivWidth + this.leftPos) - this.sliderMainDivWidth > 0) {\n this.leftPos -= (this.imageParentDivWidth + this.leftPos) - this.sliderMainDivWidth;\n }\n }\n infinitePrevImg() {\n this.effectStyle = `all ${this.speed}s ease-in-out`;\n this.leftPos = 0;\n setTimeout(() => {\n this.effectStyle = 'none';\n this.leftPos = -1 * this.sliderImageSizeWithPadding * this.slideImageCount;\n for (let i = 0; i < this.slideImageCount; i++) {\n this.imageObj.unshift(this.imageObj[this.imageObj.length - this.slideImageCount - 1]);\n this.imageObj.pop();\n }\n }, this.speed * 1000);\n }\n infiniteNextImg() {\n this.effectStyle = `all ${this.speed}s ease-in-out`;\n this.leftPos = -2 * this.sliderImageSizeWithPadding * this.slideImageCount;\n setTimeout(() => {\n this.effectStyle = 'none';\n for (let i = 0; i < this.slideImageCount; i++) {\n this.imageObj.push(this.imageObj[this.slideImageCount]);\n this.imageObj.shift();\n }\n this.leftPos = -1 * this.sliderImageSizeWithPadding * this.slideImageCount;\n }, this.speed * 1000);\n }\n getVisiableIndex() {\n const currentIndex = Math.round((Math.abs(this.leftPos) + this.sliderImageWidth) / this.sliderImageWidth);\n if (this.imageObj[currentIndex - 1] && this.imageObj[currentIndex - 1]['index'] !== undefined) {\n this.visiableImageIndex = this.imageObj[currentIndex - 1]['index'];\n }\n }\n /**\n * Disable slider left/right arrow when image moving\n */\n sliderArrowDisableTeam(msg) {\n this.sliderNextDisable = true;\n this.sliderPrevDisable = true;\n setTimeout(() => {\n this.nextPrevSliderButtonDisable(msg);\n }, this.speed * 1000);\n }\n nextPrevSliderButtonDisable(msg) {\n this.sliderNextDisable = false;\n this.sliderPrevDisable = false;\n const actionMsg = {};\n if (!this.infinite) {\n if (this.imageParentDivWidth + this.leftPos <= this.sliderMainDivWidth) {\n this.sliderNextDisable = true;\n }\n if (this.leftPos >= 0) {\n this.sliderPrevDisable = true;\n }\n actionMsg['prevDisable'] = this.sliderPrevDisable;\n actionMsg['nextDisable'] = this.sliderNextDisable;\n }\n if (msg) {\n this.arrowClick.emit(Object.assign({ action: msg }, actionMsg));\n }\n }\n // for lightbox\n showLightbox() {\n if (this.imageObj.length) {\n this.imageMouseEnterHandler();\n this.ligthboxShow = true;\n this.elRef.nativeElement.ownerDocument.body.style.overflow = 'hidden';\n }\n }\n close() {\n this.ligthboxShow = false;\n this.elRef.nativeElement.ownerDocument.body.style.overflow = '';\n this.lightboxClose.emit();\n this.imageAutoSlide();\n }\n lightboxArrowClickHandler(event) {\n this.lightboxArrowClick.emit(event);\n }\n /**\n * Swipe event handler\n * Reference from https://stackoverflow.com/a/44511007/2067646\n */\n swipe(e, when) {\n const coord = [e.changedTouches[0].pageX, e.changedTouches[0].pageY];\n const time = new Date().getTime();\n if (when === 'start') {\n this.swipeCoord = coord;\n this.swipeTime = time;\n }\n else if (when === 'end') {\n const direction = [coord[0] - this.swipeCoord[0], coord[1] - this.swipeCoord[1]];\n const duration = time - this.swipeTime;\n if (duration < 1000 //\n && Math.abs(direction[0]) > 30 // Long enough\n && Math.abs(direction[0]) > Math.abs(direction[1] * 3)) { // Horizontal enough\n if (direction[0] < 0) {\n this.next();\n }\n else {\n this.prev();\n }\n }\n }\n }\n}\n/** @nocollapse */ NgImageSliderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: NgImageSliderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: PLATFORM_ID }, { token: NgImageSliderService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\n/** @nocollapse */ NgImageSliderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.0.4\", type: NgImageSliderComponent, selector: \"ng-image-slider\", inputs: { imageSize: \"imageSize\", infinite: \"infinite\", imagePopup: \"imagePopup\", direction: \"direction\", animationSpeed: \"animationSpeed\", images: \"images\", slideImage: \"slideImage\", autoSlide: \"autoSlide\", showArrow: \"showArrow\", orderType: \"orderType\", videoAutoPlay: \"videoAutoPlay\", paginationShow: \"paginationShow\", arrowKeyMove: \"arrowKeyMove\", manageImageRatio: \"manageImageRatio\", showVideoControls: \"showVideoControls\", defaultActiveImage: \"defaultActiveImage\", lazyLoading: \"lazyLoading\" }, outputs: { imageClick: \"imageClick\", arrowClick: \"arrowClick\", lightboxArrowClick: \"lightboxArrowClick\", lightboxClose: \"lightboxClose\" }, host: { listeners: { \"window:resize\": \"onResize($event)\", \"document:keyup\": \"handleKeyboardEvent($event)\" } }, viewQueries: [{ propertyName: \"sliderMain\", first: true, predicate: [\"sliderMain\"], descendants: true }, { propertyName: \"imageDiv\", first: true, predicate: [\"imageDiv\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: \"\\n
    \\n \\n \\n
    \", styles: [\".ng-image-slider{display:inline-block;position:relative;width:100%}.ng-image-slider .ng-image-slider-container .main{overflow:hidden;position:absolute;height:200px;width:100%}.ng-image-slider .ng-image-slider-container .main .main-inner{width:1760px;padding:0;height:100%}.ng-image-slider .ng-image-slider-container .main .main-inner.with-ng-main-pagination{height:calc(100% - 30px)}.ng-image-slider .ng-image-slider-container .main .main-inner .full-screen{background:url(data:image/png;base64,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);background-size:40px 40px;background-repeat:no-repeat;position:absolute;z-index:8;display:block;height:40px;width:40px;top:4px;right:8px;opacity:.4;transition:all .5s ease-in-out;cursor:pointer}.ng-image-slider .ng-image-slider-container .main .main-inner .img-div{width:205px;height:100%;margin-right:3px;margin-left:3px;position:relative;display:inline-block;box-shadow:inset 0 0 1px #0000003d,0 0 2px #0000001f;border-radius:5px}.ng-image-slider .ng-image-slider-container .main .main-inner .img-div.image-popup{cursor:pointer}.ng-image-slider .ng-image-slider-container .main .main-inner .img-div img,.ng-image-slider .ng-image-slider-container .main .main-inner .img-div video{position:absolute;margin:auto;height:100%;width:100%;inset:0;border-radius:5px}.ng-image-slider .ng-image-slider-container .main .main-inner .img-div img.ratio,.ng-image-slider .ng-image-slider-container .main .main-inner .img-div video.ratio{width:auto;height:auto;max-width:100%;max-height:100%}.ng-image-slider .ng-image-slider-container .main .main-inner .img-div .youtube-icon{background:url(data:image/png;base64,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);background-size:140px 80px;background-repeat:no-repeat;position:absolute;z-index:6;display:block;height:100%;width:100%;top:0;left:0;background-position:center center}.ng-image-slider .ng-image-slider-container .main .main-inner .img-div .caption{position:absolute;bottom:0;padding:5px;color:#fff;background-image:linear-gradient(to right,rgba(0,0,0,.1),rgba(0,0,0,.25),rgba(0,0,0,.5),rgba(0,0,0,.25),rgba(0,0,0,.1));width:100%;text-align:center;box-sizing:border-box;border-radius:0 0 5px 5px}.ng-image-slider .ng-image-slider-container .main .main-inner:hover .full-screen{transition:all .5s ease-in-out;opacity:1}.ng-image-slider .ng-image-slider-container .main .next,.ng-image-slider .ng-image-slider-container .main .prev{position:absolute;right:10px;top:50%;background-color:#fff;border-radius:50%;cursor:pointer;margin-top:-16px;outline:0;width:35px;height:35px;font-size:35px;line-height:30px;z-index:8;transition:all .5s ease-in-out;text-align:center}.ng-image-slider .ng-image-slider-container .main .next:hover,.ng-image-slider .ng-image-slider-container .main .prev:hover{background-color:#d4cdcd;background-position:-192px -415px}.ng-image-slider .ng-image-slider-container .main .next.disable,.ng-image-slider .ng-image-slider-container .main .prev.disable{color:#bbb;background-color:#fff;opacity:.5;cursor:default}.ng-image-slider .ng-image-slider-container .main .prev{left:10px}.ng-image-slider .ng-image-slider-container .main .prev:hover{background-position:-194px -450px}.ng-image-slider .ng-image-slider-container .ng-main-pagination{background-color:inherit;color:inherit;position:absolute;height:30px;width:calc(100% - 6px);text-align:center;bottom:0;font-size:16px;line-height:30px;border-radius:0 0 5px 5px;margin:0 3px}.ng-image-slider .ng-image-slider-error{height:100%;position:relative;display:flex;justify-content:center;align-items:center}.ng-image-slider .ng-image-slider-error .ng-image-slider-loader{background-image:url(data:image/gif;base64,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);background-repeat:no-repeat;background-position:center center;background-size:25px 25px;width:25px;height:25px}.close-outside{height:100%;width:100%;position:absolute;top:0;left:0}@media (max-width: 1199px){.ng-image-slider .ng-image-slider-container .main .main-inner .img-div{width:170px;max-width:100%}}@media (max-width: 991px){.ng-image-slider .ng-image-slider-container .main .main-inner .img-div{width:297px;max-width:100%}}@media (max-width: 768px){.ng-image-slider .ng-image-slider-container .main .main-inner .img-div{width:247px;max-width:100%}}@media (max-width: 576px){.ng-image-slider .ng-image-slider-container .main .main-inner .img-div{width:350px;max-width:100%}}.ng-image-fullscreen-view{position:fixed;z-index:1031;background-color:#0009;width:100%;height:100%;top:0;overflow:hidden;transition:all .5s ease-in-out;left:0;text-align:center}.ng-image-fullscreen-view.image-fullview-hide{display:none!important}.ng-image-fullscreen-view .lightbox-wrapper{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#1f1f1f;transition:all .5s ease;display:flex;justify-content:center;align-items:center}.ng-image-fullscreen-view .lightbox-wrapper.ng-ligthbox-pagination{height:calc(100% - 30px)}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div{width:100%;height:100%;border:1px solid;border-color:#00000059;position:relative;overflow:hidden}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .pre-loader{background-color:inherit;width:100%;height:100%}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .pre-loader .mnml-spinner{background-image:url(data:image/gif;base64,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);background-repeat:no-repeat;background-position:center center;width:100%;height:100%}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main{display:grid;grid-template-columns:repeat(6,1fr);grid-template-rows:100%;grid-column-gap:0px;height:100%}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image{width:1299px;height:100%;position:relative}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image .custom-image-main.ng-fullimage-loading{background-image:url(data:image/gif;base64,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);background-repeat:no-repeat;background-position:center center}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image.ng-image-slider-show{opacity:1;display:block}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image.ng-image-slider-hide{opacity:0;display:none}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image .custom-image-main{width:100%;height:100%}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image .custom-image-main img{transition:all .5s ease-in-out;width:auto;height:auto;max-height:100%;max-width:100%;position:absolute;z-index:11;margin:auto;inset:0}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image .custom-image-main iframe{inset:0;margin:auto;width:100%;height:100%;border:0}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image .custom-image-main video{inset:0;margin:auto;width:100%;height:100%;border:0}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .caption{position:absolute;z-index:11;top:0;margin:auto;padding:5px;color:#fff;background-color:#00000059;max-width:100%;left:0;right:0}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .caption.show{display:block}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .caption.hide{display:none}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .next,.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .prev{position:absolute;right:10px;top:50%;background-color:#fff;border-radius:50%;cursor:pointer;margin-top:-16px;width:38px;height:38px;font-size:35px;z-index:12;line-height:30px;outline:0;color:#000;transition:all .3s ease-in-out}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .next:hover,.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .prev:hover{background-color:#d4cdcd}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .next.disable,.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .prev.disable{color:#bbb;background-color:#fff}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .prev{left:10px}.ng-image-fullscreen-view .lightbox-wrapper .close{background-image:url(data:image/png;base64,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);background-repeat:no-repeat;background-position:center center;background-size:32px;position:absolute;top:10px;right:10px;color:#000;background-color:#fff;padding:0;opacity:1;border-radius:50%;height:36px;width:36px;z-index:12;cursor:pointer;transition:all .2s ease}.ng-image-fullscreen-view .lightbox-wrapper.error-msg{background-image:none}.ng-image-fullscreen-view .invalid-msg{color:#fff;font-size:18px;position:absolute;top:45%;left:45%}.ng-image-fullscreen-view .popup-pagination{background-color:#1f1f1f;color:#fff;position:absolute;height:30px;width:100%;text-align:center;bottom:0;font-size:16px;line-height:30px}@media (max-width: 768px){.ng-image-fullscreen-view .lightbox-wrapper{width:100%;height:100%}.ng-image-fullscreen-view .lightbox-wrapper.error-msg{background-image:none}}\\n\"], dependencies: [{ kind: \"directive\", type: i2$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i2$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i2$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: SliderCustomImageComponent, selector: \"custom-img\", inputs: [\"showVideo\", \"videoAutoPlay\", \"showVideoControls\", \"currentImageIndex\", \"imageIndex\", \"speed\", \"imageUrl\", \"isVideo\", \"alt\", \"title\", \"direction\", \"ratio\", \"lazy\"] }, { kind: \"component\", type: SliderLightboxComponent, selector: \"slider-lightbox\", inputs: [\"images\", \"imageIndex\", \"show\", \"videoAutoPlay\", \"direction\", \"paginationShow\", \"animationSpeed\", \"infinite\", \"arrowKeyMove\", \"showVideoControls\"], outputs: [\"close\", \"prevImage\", \"nextImage\"] }], encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: NgImageSliderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ng-image-slider', encapsulation: ViewEncapsulation.None, template: \"\\n
    \\n \\n \\n
    \", styles: [\".ng-image-slider{display:inline-block;position:relative;width:100%}.ng-image-slider .ng-image-slider-container .main{overflow:hidden;position:absolute;height:200px;width:100%}.ng-image-slider .ng-image-slider-container .main .main-inner{width:1760px;padding:0;height:100%}.ng-image-slider .ng-image-slider-container .main .main-inner.with-ng-main-pagination{height:calc(100% - 30px)}.ng-image-slider .ng-image-slider-container .main .main-inner .full-screen{background:url(data:image/png;base64,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);background-size:40px 40px;background-repeat:no-repeat;position:absolute;z-index:8;display:block;height:40px;width:40px;top:4px;right:8px;opacity:.4;transition:all .5s ease-in-out;cursor:pointer}.ng-image-slider .ng-image-slider-container .main .main-inner .img-div{width:205px;height:100%;margin-right:3px;margin-left:3px;position:relative;display:inline-block;box-shadow:inset 0 0 1px #0000003d,0 0 2px #0000001f;border-radius:5px}.ng-image-slider .ng-image-slider-container .main .main-inner .img-div.image-popup{cursor:pointer}.ng-image-slider .ng-image-slider-container .main .main-inner .img-div img,.ng-image-slider .ng-image-slider-container .main .main-inner .img-div video{position:absolute;margin:auto;height:100%;width:100%;inset:0;border-radius:5px}.ng-image-slider .ng-image-slider-container .main .main-inner .img-div img.ratio,.ng-image-slider .ng-image-slider-container .main .main-inner .img-div video.ratio{width:auto;height:auto;max-width:100%;max-height:100%}.ng-image-slider .ng-image-slider-container .main .main-inner .img-div .youtube-icon{background:url(data:image/png;base64,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);background-size:140px 80px;background-repeat:no-repeat;position:absolute;z-index:6;display:block;height:100%;width:100%;top:0;left:0;background-position:center center}.ng-image-slider .ng-image-slider-container .main .main-inner .img-div .caption{position:absolute;bottom:0;padding:5px;color:#fff;background-image:linear-gradient(to right,rgba(0,0,0,.1),rgba(0,0,0,.25),rgba(0,0,0,.5),rgba(0,0,0,.25),rgba(0,0,0,.1));width:100%;text-align:center;box-sizing:border-box;border-radius:0 0 5px 5px}.ng-image-slider .ng-image-slider-container .main .main-inner:hover .full-screen{transition:all .5s ease-in-out;opacity:1}.ng-image-slider .ng-image-slider-container .main .next,.ng-image-slider .ng-image-slider-container .main .prev{position:absolute;right:10px;top:50%;background-color:#fff;border-radius:50%;cursor:pointer;margin-top:-16px;outline:0;width:35px;height:35px;font-size:35px;line-height:30px;z-index:8;transition:all .5s ease-in-out;text-align:center}.ng-image-slider .ng-image-slider-container .main .next:hover,.ng-image-slider .ng-image-slider-container .main .prev:hover{background-color:#d4cdcd;background-position:-192px -415px}.ng-image-slider .ng-image-slider-container .main .next.disable,.ng-image-slider .ng-image-slider-container .main .prev.disable{color:#bbb;background-color:#fff;opacity:.5;cursor:default}.ng-image-slider .ng-image-slider-container .main .prev{left:10px}.ng-image-slider .ng-image-slider-container .main .prev:hover{background-position:-194px -450px}.ng-image-slider .ng-image-slider-container .ng-main-pagination{background-color:inherit;color:inherit;position:absolute;height:30px;width:calc(100% - 6px);text-align:center;bottom:0;font-size:16px;line-height:30px;border-radius:0 0 5px 5px;margin:0 3px}.ng-image-slider .ng-image-slider-error{height:100%;position:relative;display:flex;justify-content:center;align-items:center}.ng-image-slider .ng-image-slider-error .ng-image-slider-loader{background-image:url(data:image/gif;base64,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);background-repeat:no-repeat;background-position:center center;background-size:25px 25px;width:25px;height:25px}.close-outside{height:100%;width:100%;position:absolute;top:0;left:0}@media (max-width: 1199px){.ng-image-slider .ng-image-slider-container .main .main-inner .img-div{width:170px;max-width:100%}}@media (max-width: 991px){.ng-image-slider .ng-image-slider-container .main .main-inner .img-div{width:297px;max-width:100%}}@media (max-width: 768px){.ng-image-slider .ng-image-slider-container .main .main-inner .img-div{width:247px;max-width:100%}}@media (max-width: 576px){.ng-image-slider .ng-image-slider-container .main .main-inner .img-div{width:350px;max-width:100%}}.ng-image-fullscreen-view{position:fixed;z-index:1031;background-color:#0009;width:100%;height:100%;top:0;overflow:hidden;transition:all .5s ease-in-out;left:0;text-align:center}.ng-image-fullscreen-view.image-fullview-hide{display:none!important}.ng-image-fullscreen-view .lightbox-wrapper{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#1f1f1f;transition:all .5s ease;display:flex;justify-content:center;align-items:center}.ng-image-fullscreen-view .lightbox-wrapper.ng-ligthbox-pagination{height:calc(100% - 30px)}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div{width:100%;height:100%;border:1px solid;border-color:#00000059;position:relative;overflow:hidden}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .pre-loader{background-color:inherit;width:100%;height:100%}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .pre-loader .mnml-spinner{background-image:url(data:image/gif;base64,R0lGODlhQABAAKUAAAQCBISChMTCxDQ2NOzq7KyqrExOTBweHJSSlNTW1PT29FxaXLS2tCwqLAwKDIyKjMzKzERCRPTy9FRWVCQmJJyanNze3Pz+/GRiZLy+vExKTAQGBISGhMTGxOzu7KyurFRSVCQiJJSWlNza3Pz6/FxeXLy6vCwuLAwODIyOjMzOzERGRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCQAsACwAAAAAQABAAAAG/kCWcEgsGo/IpHLJbDqf0CgRtXg8FiipdjshXL4XwmRLdk7A6Mu4zD6ivOkvIduuCzFxNMbOHCwWA0opeWApfEkgI2gWIEgPhF8Ph0cBhAFHJZAXe0gHHBkmHAdaZ5BrUx6EHnRGGhJoChpRABaaFgBGpXELna9pEqNPA5pfgUYLcHKnRg8keZJPeMScRiglViWsRwKEAlDSmtRkGd1Qw8TGZY/PULS2uGwHvmjAUbp5vHUaCrCyUpV5LvE58EBAhgfBSNUCY2HZpDoDSpRI97CixYsYM2pkgoICBW0bo0Rg4OwCCQYRQkLZIIJQBXgql1TQhCDmkhXELqwIeaCA/gcJBRIOIUcsw8YGyS54CEHEQUlNJBxo/BDnA5ETOb+c0DgPjAQiDbJe2Jqx65evQ5zmjDq1ahGimoxqRIrGA4UiEXKm3NhTAlChQ2ZCqmlTyQbBcSpsKMwkgomSJEzsZdzEAYUGUilr3sw5yYkUCSR4SJCCbGciLJ+CISFi8WkWG+DmyeC6c0tiIk43UE2IRAM+FJhKuZ0zd5sQEL5AEP4kgdgEdZKDgRCFNyQSx+PcfWK9dxsK2qE4zwq9jXTlUYjjrhNCxRcVzJ2c6J7GN/DfWhBDqpBkgwEDmWXkADeQCFBbEQ64d4EKAWLEEiGtIYJGIyE1gEBoEoyAAH4SG4JB4WtGbCAdBAeCSAQABoAAk4kstujii00EAQAh+QQJCQApACwAAAAAQABAAIUEAgSEgoTEwsREQkSsrqwcGhzk5uRsamyUkpT09vQMDgxcWlwkJiR0dnTMysxMSky8urycmpwMCgyMiowkIiTs7ux0cnT8/vwEBgTExsRERkS0trQcHhzs6uxsbmyUlpT8+vwUFhQsLix8fnzMzsxMTky8vrycnpyMjowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG/sCUcEgsGo/IpHLJbDqf0Kh0Sl0uMheQY1HtOj+XsPjjLSMX4vSFa24LHWqxw90GgOJhEICeFE02GxMiSQAJeFl7fEUAE3dpE4lGcHhzikUThxNnh2xIEiMZGSMSUyKHYYNHCHERSgokaSQKUpinmmeTW0sBcQFSEKcXEG1YapVQwKfDZpNpx08owShtvGq+UaanqWWvsbNS0XjTbhIBGQ4BpFMA4WkokZZdIigQGyjb8fn6+/z9/v8AAxLB8MCDhwcYBD7x0CFNhQMKmZw4dCJikgPBPASkwMBThWAV1PHjkIuCkRLBwmjw1+zCMyEWUl5o0I9CnI5EYqakyY/B/s0iKFM+YOnMiISPp0L64wDrAgmTRjwEgwiQAU4kE/FUtJjEAtIwFSxwXSKhoIUHIseqXcu2bRIFVr+5JTJggyMQGwbMTYEBDJ4I8NRGCIagrQaZK9eakGnCTYgGFkJIkeAoGIi0AylQSMikgIEwBgpgk4nKyAMIdyGUWDIizYjRpPFJIHCIgFwjrcW8hkJZ5uUhGAQEE8DZSIGGFzqIjrI4ZeMhtYLdOvK4wfIoA2TqFRKi8qkEki0NPlV4CEbSVBVhGM+qeAr2KbfGG4A6D4TtRGiTJsBPQlwk8AUjn0XnyZSeRQV4dwgI4Y0V3SnjqCVBMYc4gBlXCugXh217CZVgwl0mrOZGEAAh+QQJCQAyACwAAAAAQABAAIUEAgSEgoREQkTEwsQkIiSkoqRsamzk4uT08vQUFhRUVlQ0MjS0srSUlpR0dnQMCgxMSkzU0tSsqqzs6uz8+vw8OjzMyswsLix0cnQcHhxcXly8vrycnpwEBgSEhoRERkTExsQkJiSkpqRsbmzk5uT09vQcGhxcWlw0NjS0trScmpx8fnwMDgxMTkysrqzs7uz8/vw8PjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG/kCZcEgsGo/IpHLJbDqf0Kh0Sq1ar8lLilJKXbBg5AUBK8MQ37BamDKbU2s1gOIuUwBxZYdA6CwBJXUwd3lHDwETZS8BD0ptdXCFRR0bght+SAtkZmhNHXhVAYJlAUpaFBQpC0wsHAglHCxTHYmjE5hgIm4iUyGjZiFhD3RmFLhPvr8wwWAdxHbHTrS/t2oSbhJUHr8eaywFrwWyswOCA9FgAKBVDx4vZQiMkmEAIX3z+Pn6+/z9/v8AA06p0AAECBUVBDLpwEEQB3QKhzQcxSHikRjKYMTwl8ABhgRIJv6qyM8EiTIkTByxkNFCvxVuVqxs+TLmEZEU+5moNUGl/hGMyjb26+jA55ECvwpYPNIBaZ0CEJfKiKHCoAqhUrNq3cq1q8IKATgUCJCwSgcII0ZAiEoFBcs6FlBMGVFLkYEwCp7VKXEiCk43JK2g0CuIglwnBjKOsAIgQsYyEdYpefBO2YtGVAQ8NiOgSYvNH6ps2wyjGxMMmx0gAYDixAkUkodcI53tdGojAAwccEPCQGxdtD1vhjDJxS8Xx0ZvNr2EcsbLRVRkbEDkA2kYnZuMyHiXyALCglYJabw58pO/ZgIPkf5YBZEK4N1QKPsEQ2V4i404fhyhSN5fFPQlxQNoYbAWErs9doARbgkSFz77ZdQfbjF4UEABHsQQWx4NKWzmnlQobHaYVOi58WFWHTDwCwNsCZTbSWZM4JtXMgBQgQYaVLDhFUEAACH5BAkJACoALAAAAABAAEAAhQQCBISChDw6PMTGxOTm5CQiJFRWVKSipNTW1CwuLAwODJSWlERGRGxqbMzOzPT29LS2tNze3AwKDERCRCwqLGRiZDQ2NJyenPz+/AQGBISGhDw+PMzKzCQmJFxaXKyqrNza3DQyNBQWFJyanExKTGxubNTS1Pz6/Ly6vOTi5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb+QJVwSCwaj8ikcslsOp/QqHRKrVqvS0oHy10WHBiMqdAtF03hsMPM7qTTFHaZ8g7H5UqRyIlOm/BJJH0IJEwFfWOARwx1GAxNFHdNEgYeElYIjQhsEpkYCJdTIo1he2UVbxVUo6SmXahpqlQgjSBsCp4gClWMdYWcHpZXJLQYIL+KXHrJzM3Oz9DR0tPUzgIBFwcBAtVMFhyNHBZJEiEhGdEGJ6QYDx5GGRoPYQ8a6M0C8+wYJ+NDCn3eONiVDEDAfSYADFnAbgGzCfvqTBCiQF+jBwQBaYj4RoOQEBH9AfrAMc0HIRZCJiNZEsNJFQrWkToRSmNLDB6FMCTlMFn+r5ITKR4MYyIjIIMlExKJJ/OEPWsy2Z3gZkSChRA1namT+q7bkW/hRHo1AmCDhgMHNGxQOLat27djJVSAAAIBhAb3pghYMGDACKpdLKRolEKskwwXGl3IayUfuweAnSQmdQGLhMH7UjBesiHihisNSjZ4MpldZSsoSqJ4Am4fhysRSkZgHfE1kgQBPqRNgCQ2x9mSI54uImHnmxGbVaTmuNpJ532fiwBY3ggF2yElSpaAcoDdgSOh940mIoFAxBRGmWToXudAchW+2QEnMsFinalTNozoOyK6kQIlkVGEAJi9kUJkcoDEkWFCSNAAXSCgUEFWeADIkYBuxUdKCnAgqRAeO+O9lQF1dVjXoQqINYLciUOEoMEHH2gQAovQBAEAIfkECQkAMAAsAAAAAEAAQACFBAIEhIKEREJExMbEJCIk5ObkbGpsrKqsFBIUNDI09Pb03NrcVFJUdHZ0tLa0DAoMlJKULCos7O7sHBocPDo8zM7MtLK0/P785OLkXFpcfH58BAYEhIaETEpMzMrMJCYk7OrsbG5srK6sFBYUNDY0/Pr83N7cVFZUfHp8vLq8DA4MlJaULC4s9PL0HB4cPD48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABv5AmHBILBqPyKRyyWw6n9CodEqtWq/YbHaiCUy0YCNBcrlICEwAi8FgAcJMTbkcUG5QhfmlgNrAkwF6GkkjA3p6AyN/R2NlZ0gbHoeHA35SGwIvD04TAV5JDSWTh4NRCSZlJglZAHmjeiBvTw+ocwWbVwmvkyRQL5MvWBm7hxm+wMLEesazrmW3WLrKZb1Qp6mrWBsg0yCWUA8CArhZDdOli1GRxB7f6VCFr4nvVHfccyB99FYACWwJsvYJHEiwoMEwDww4WLDAgQF3B5WQqKUHQ7UjAD58CDjwhahRCigcOYGhDIYTBGkRwwDxxCSUAg1MM0Ck1SQMHNOlmJaCyP6HVx8EUtxlwidQgSWVFR1i81CBnIt2KutJxGWxgTKVhTCSIenJlM5GYVCBMUIEqPQ8viohMqISCkkrtnVrRyHDFA/p6t3Lt69fOA/MkqvyIEECiFk+HFBQpsSBoFM2cGB8QQEHxFU6tJjUooMUFRUmVSCLJcJmkBGirHi1IssBYgegqPg4SQFpwrRHlRi8RNqri1RYTGPxhAQx4Ece8C4iXBlxJ7PXLhfyoMGCMgv0GXmQe9JuKKtHtT6CwNAhDwiOvN4VW3boQxXSHxHxysKRD6c5p47ygMPHEhxMB4NvoyAnhGaceUbFAyQkIKAQcuyCThERiPCfCPvRAwExEC8o8QALLDwIBwrEoPCXEMbtYiBfFtR34hAIvKdHfC8O8QAKtZiAgoh+qcBjjYsEAQAh+QQJCQAuACwAAAAAQABAAIUEAgSMioxEQkTMysxkYmTk5uQkIiSsqqxUUlT09vSUlpTc2tx0cnQcGhwsLiwMCgxMSkzU0tRsamzs7uxcWlyUkpQsKiy0trT8/vycnpwEBgSMjoxERkTMzsxkZmTs6uwkJiSsrqxUVlT8+vycmpzk4uR8enw0MjQMDgxMTkzU1tRsbmz08vRcXlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG/kCXcEgsGo8ayCYU2kAAx6h0Sp1yVJisdiGoer9fz0hLxowk4LR6yBmXy921nKrBvssqzXx/TN3vCHyCQxV/bxWDgxeGZRdHBisKFSsGiVOLjFqORA8kblkjGQ+WR4WZWYhDDwN/A6OkRAinWYFDCowZcycBGydRAHaMC1BCBp93I5VqDglZCQ5RbZlxQgynDGu3WgpSYn9nRSSnuWqmWdxSAgtvXEYZ42sObiPQUwBKTBVPR9aZ2GsnNvQiZYzRCBCwBL0zRC7hngcd/nR45XAPioVkMqComMgAAwUkGCjjSLKkyZMoU6o0+cCCBYorwYA40MzMAYQxvUBg8YYF/gQpKCBA2KjSAs87CSwcETAhywRqJw8wOmAERVMtE4iyrPkNpgs/ZVKgdHCq3hCwZMSePFG2iFUyWVE+OPZmhFcXAo6ygGpSqiGqR4IOXWn0DwulOafs7PkzMRULIeaFQOy4ygMHDu5W3sy5s+fPoCuioBAgAAWtcwCAAEEMlogPZD6I2COiRJYSs0mJ+JNbze4yvQWhgH3nA2ovAAq8KdGaDwFGBNSA+INT0AZGG6RTTxSAUQA1yd8UaG4EAAcTJjiQJ/LcUHTfbyhMARGBTATKbq++ibuGgm0MuE3RgHJlFNBAFL/FtwcALq1XhDZvoHMEBcRlIRtKBIo3BQoELpTWwnEcacCIHqFVWMYHoQkBYRkSgjbgGx8cmKILFgSDgQr4pWgeevvM6CNnQQAAIfkECQkAJgAsAAAAAEAAQACFBAIEhIaEREJExMbEJCIkZGJktLK07OrsnJqcVFZUDA4MNDI0/Pr8jI6M5OLkdHZ0TEpMzM7MLCosvL689PL0XF5cFBYUBAYEjIqMzMrMJCYkZGZk7O7snJ6cXFpcFBIUNDY0/P78lJKUfHp8TE5MxMLEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABv5Ak3BILBqPyKRyyWyaPo/BwTF4KJzYrBJyCHm/B4h2PIYwvugQQ0xuLxWcdJrzcduPI7l8dGcSAhkOBwMBBEcDemkDfUkAAWdpDBgARXGJXxSMRxcGlyEGlEMUnl6ZRgAFE1MTBRdaAaQhGESIpItFFrVoAxZYGpCeDBpDeaR8RAC6iq5NDbFeDUMflol0RQWeG04RzyERRGaXbEQlnhNOo8+mQwLUXxzjRO5yHE7zl+vSI1IHGSNXR9JV29btm5tyl841EdEtmpsN2Zz8isVAgh0AGRJlCNUEQ6xZdyxkTJOhFxZOngwwuwNgQ4kDB0ps4IgFAAZgXyTR1NRHQ/6ACDAjYDDEs6jRo0iTKl3KtKlTIQo8YMDgAeBTLQm6gElwNUuCRFyRgOiAAERXBVrlHLBKZEG6ilexXSpwBAGaDledXXJYpMPdqx4vgSyyABKDBVcreKJ7REKHDoivwqnGtmuSr3o8WHbiIW2IA2E3N1FQYGqFOqJTq17NurXr17Bj90kwgAGFAaHbKIAAoTIjhmlEuGnnhYOAopjl5MYy+Z1vNyPl3NJCQg4JTQBwomGws0n1NNcZARAYqTuT5sWft4muqI2AdBSOM1kwYoRZJcnTLM+yuzcTAH590YF5QwCHhnBOPSDHA0t4UBsDA2j2lANyOCCbEAAkQiBrFBqmYeGFJiiYBoMgAnjXhq6BUN99ILboYmxBAAAh+QQJCQAnACwAAAAAQABAAIUEAgSMiozExsRUUlQkIiSkpqTk5uQUEhQ0MjS0srT09vScmpx8enwMCgw8Ojzk4uRcWlwsKiysrqz08vQcHhy8urz8/vykoqQEBgSUkpTMzsxUVlQkJiSsqqzs6uwUFhQ0NjS0trT8+vycnpx8fnwMDgw8PjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG/sCTcEgsGo/IpHLJbA4PINDBSa02ESGRxSIKIazg8Gmj3ZpFG7GaiVCY39zIen4MweEhuhNDoWCSB2V3WyJTekkOEm4WChIORw6DcI+HRgABkgEARSCSb5RHBAMDHGKYngFFB55mhkUEFW8VBFYmrFsmRXaeFUcUBnceFFUJtxZ5RAiCcCJyRrGDvXuLrAp/RBDLhGlGHKylTd7GFuDJFWUiFV9HG6zcTOLG5aogDq5HA+572oMi12IEvlEpdisBHWh3pDmxdSvXHAIegtGqcirToQ8SZE2scinTpkqiSK1JhC4BqEooMRDwg7Kly5cnMHyEqcfBCGAWDIw4SdNK/oMCkgo06GmlhAZWGu4RXdLBWIelQjYIEKFAwDshkcbxfFnRTAYiQMcVIApB0jucxgwQFSBJwJBxZobCBMCP0Ee4W+S+BECN2ceI4zysbTskrLGxPcsOepfV2FaXGe58BesU6gkIU0UIgGDEKFK9lpWUaDqoA+jQSxxceLDlwYXHqJlg+Be7tu3buHPr3s3bSYQsCkI4UwNixAIQLiNMeDNhOJg2hJzr2fUGWZgFb0agpHtHxEwrI7Jv72tXjDJC6ypRN2M9TIQLI9JXUs5cOtEBBToMaPJbRBf7PTHwBgO9HVHCMiKUUGARCNwh34IHvpHggkUIaAYJFBoxQAf6CWXo4YcghmhEEAA7YnVPZzU3UnNDZXVsS2VVYlhjelFTNkFCd2NQbHA4Umg0WUJramlqdElnNVhRWVphVGtSTmNwSno1Zm5mZ0ZOWA==);background-repeat:no-repeat;background-position:center center;width:100%;height:100%}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main{display:grid;grid-template-columns:repeat(6,1fr);grid-template-rows:100%;grid-column-gap:0px;height:100%}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image{width:1299px;height:100%;position:relative}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image .custom-image-main.ng-fullimage-loading{background-image:url(data:image/gif;base64,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);background-repeat:no-repeat;background-position:center center}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image.ng-image-slider-show{opacity:1;display:block}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image.ng-image-slider-hide{opacity:0;display:none}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image .custom-image-main{width:100%;height:100%}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image .custom-image-main img{transition:all .5s ease-in-out;width:auto;height:auto;max-height:100%;max-width:100%;position:absolute;z-index:11;margin:auto;inset:0}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image .custom-image-main iframe{inset:0;margin:auto;width:100%;height:100%;border:0}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .lightbox-image-main .lightbox-image .custom-image-main video{inset:0;margin:auto;width:100%;height:100%;border:0}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .caption{position:absolute;z-index:11;top:0;margin:auto;padding:5px;color:#fff;background-color:#00000059;max-width:100%;left:0;right:0}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .caption.show{display:block}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .caption.hide{display:none}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .next,.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .prev{position:absolute;right:10px;top:50%;background-color:#fff;border-radius:50%;cursor:pointer;margin-top:-16px;width:38px;height:38px;font-size:35px;z-index:12;line-height:30px;outline:0;color:#000;transition:all .3s ease-in-out}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .next:hover,.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .prev:hover{background-color:#d4cdcd}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .next.disable,.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .prev.disable{color:#bbb;background-color:#fff}.ng-image-fullscreen-view .lightbox-wrapper .lightbox-div .prev{left:10px}.ng-image-fullscreen-view .lightbox-wrapper .close{background-image:url(data:image/png;base64,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);background-repeat:no-repeat;background-position:center center;background-size:32px;position:absolute;top:10px;right:10px;color:#000;background-color:#fff;padding:0;opacity:1;border-radius:50%;height:36px;width:36px;z-index:12;cursor:pointer;transition:all .2s ease}.ng-image-fullscreen-view .lightbox-wrapper.error-msg{background-image:none}.ng-image-fullscreen-view .invalid-msg{color:#fff;font-size:18px;position:absolute;top:45%;left:45%}.ng-image-fullscreen-view .popup-pagination{background-color:#1f1f1f;color:#fff;position:absolute;height:30px;width:100%;text-align:center;bottom:0;font-size:16px;line-height:30px}@media (max-width: 768px){.ng-image-fullscreen-view .lightbox-wrapper{width:100%;height:100%}.ng-image-fullscreen-view .lightbox-wrapper.error-msg{background-image:none}}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: Object, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: NgImageSliderService }, { type: i0.ElementRef }];\n }, propDecorators: { sliderMain: [{\n type: ViewChild,\n args: ['sliderMain', { static: false }]\n }], imageDiv: [{\n type: ViewChild,\n args: ['imageDiv', { static: false }]\n }], imageSize: [{\n type: Input\n }], infinite: [{\n type: Input\n }], imagePopup: [{\n type: Input\n }], direction: [{\n type: Input\n }], animationSpeed: [{\n type: Input\n }], images: [{\n type: Input\n }], slideImage: [{\n type: Input\n }], autoSlide: [{\n type: Input\n }], showArrow: [{\n type: Input\n }], orderType: [{\n type: Input\n }], videoAutoPlay: [{\n type: Input\n }], paginationShow: [{\n type: Input\n }], arrowKeyMove: [{\n type: Input\n }], manageImageRatio: [{\n type: Input\n }], showVideoControls: [{\n type: Input\n }], defaultActiveImage: [{\n type: Input\n }], lazyLoading: [{\n type: Input\n }], imageClick: [{\n type: Output\n }], arrowClick: [{\n type: Output\n }], lightboxArrowClick: [{\n type: Output\n }], lightboxClose: [{\n type: Output\n }], onResize: [{\n type: HostListener,\n args: ['window:resize', ['$event']]\n }], handleKeyboardEvent: [{\n type: HostListener,\n args: ['document:keyup', ['$event']]\n }] } });\n\nclass NgImageSliderModule {\n}\n/** @nocollapse */ NgImageSliderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: NgImageSliderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n/** @nocollapse */ NgImageSliderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.0.4\", ngImport: i0, type: NgImageSliderModule, declarations: [NgImageSliderComponent,\n SliderCustomImageComponent,\n SliderLightboxComponent], imports: [CommonModule], exports: [NgImageSliderComponent] });\n/** @nocollapse */ NgImageSliderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: NgImageSliderModule, providers: [\n NgImageSliderService\n ], imports: [CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.4\", ngImport: i0, type: NgImageSliderModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule\n ],\n declarations: [\n NgImageSliderComponent,\n SliderCustomImageComponent,\n SliderLightboxComponent\n ],\n providers: [\n NgImageSliderService\n ],\n exports: [NgImageSliderComponent]\n }]\n }] });\n\n/*\n * Public API Surface of ng-image-slider\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { NgImageSliderComponent, NgImageSliderModule, NgImageSliderService };\n//# sourceMappingURL=ng-image-slider.mjs.map\n","import { CommonModule } from '@angular/common';\r\nimport { APP_INITIALIZER, NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { HttpClientModule, HttpClientJsonpModule } from '@angular/common/http';\r\nimport { ChatSignalrService } from '@app/shared/layout/chat/chat-signalr.service';\r\nimport { LinkAccountModalComponent } from '@app/shared/layout/link-account-modal.component';\r\nimport { LinkedAccountsModalComponent } from '@app/shared/layout/linked-accounts-modal.component';\r\nimport { UserDelegationsModalComponent } from '@app/shared/layout/user-delegations-modal.component';\r\nimport { CreateNewUserDelegationModalComponent } from '@app/shared/layout/create-new-user-delegation-modal.component';\r\nimport { ChangePasswordModalComponent } from '@app/shared/layout/profile/change-password-modal.component';\r\nimport { MySettingsModalComponent } from '@app/shared/layout/profile/my-settings-modal.component';\r\nimport { SmsVerificationModalComponent } from '@app/shared/layout/profile/sms-verification-modal.component';\r\nimport { ServiceProxyModule } from '@shared/service-proxies/service-proxy.module';\r\nimport { UtilsModule } from '@shared/utils/utils.module';\r\nimport { FileUploadModule } from 'ng2-file-upload';\r\nimport { ModalModule } from 'ngx-bootstrap/modal';\r\nimport { TabsModule } from 'ngx-bootstrap/tabs';\r\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\r\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\r\nimport { PopoverModule } from 'ngx-bootstrap/popover';\r\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\r\nimport { FileUploadModule as PrimeNgFileUploadModule } from 'primeng/fileupload';\r\nimport { PaginatorModule } from 'primeng/paginator';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { TableModule } from 'primeng/table';\r\nimport { ImpersonationService } from './admin/users/impersonation.service';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { AppComponent } from './app.component';\r\nimport { DefaultLayoutComponent } from './shared/layout/themes/default/default-layout.component';\r\nimport { Theme2LayoutComponent } from './shared/layout/themes/theme2/theme2-layout.component';\r\nimport { Theme3LayoutComponent } from './shared/layout/themes/theme3/theme3-layout.component';\r\nimport { Theme4LayoutComponent } from './shared/layout/themes/theme4/theme4-layout.component';\r\nimport { Theme5LayoutComponent } from './shared/layout/themes/theme5/theme5-layout.component';\r\nimport { Theme6LayoutComponent } from './shared/layout/themes/theme6/theme6-layout.component';\r\nimport { Theme9LayoutComponent } from './shared/layout/themes/theme9/theme9-layout.component';\r\nimport { Theme7LayoutComponent } from './shared/layout/themes/theme7/theme7-layout.component';\r\nimport { Theme8LayoutComponent } from './shared/layout/themes/theme8/theme8-layout.component';\r\nimport { Theme10LayoutComponent } from './shared/layout/themes/theme10/theme10-layout.component';\r\nimport { Theme11LayoutComponent } from './shared/layout/themes/theme11/theme11-layout.component';\r\nimport { Theme12LayoutComponent } from './shared/layout/themes/theme12/theme12-layout.component';\r\nimport { Theme13LayoutComponent } from './shared/layout/themes/theme13/theme13-layout.component';\r\nimport { AppCommonModule } from './shared/common/app-common.module';\r\nimport { ChatBarComponent } from './shared/layout/chat/chat-bar.component';\r\nimport { ThemeSelectionPanelComponent } from './shared/layout/theme-selection/theme-selection-panel.component';\r\nimport { ChatFriendListItemComponent } from './shared/layout/chat/chat-friend-list-item.component';\r\nimport { ChatMessageComponent } from './shared/layout/chat/chat-message.component';\r\nimport { FooterComponent } from './shared/layout/footer.component';\r\nimport { LinkedAccountService } from './shared/layout/linked-account.service';\r\nimport { SideBarMenuComponent } from './shared/layout/nav/side-bar-menu.component';\r\nimport { TopBarMenuComponent } from './shared/layout/nav/top-bar-menu.component';\r\nimport { QuickThemeSelectionComponent } from './shared/layout/topbar/quick-theme-selection.component';\r\nimport { LanguageSwitchDropdownComponent } from './shared/layout/topbar/language-switch-dropdown.component';\r\nimport { ChatToggleButtonComponent } from './shared/layout/topbar/chat-toggle-button.component';\r\nimport { SubscriptionNotificationBarComponent } from './shared/layout/topbar/subscription-notification-bar.component';\r\nimport { UserMenuComponent } from './shared/layout/topbar/user-menu.component';\r\nimport { DefaultBrandComponent } from './shared/layout/themes/default/default-brand.component';\r\nimport { Theme2BrandComponent } from './shared/layout/themes/theme2/theme2-brand.component';\r\nimport { Theme3BrandComponent } from './shared/layout/themes/theme3/theme3-brand.component';\r\nimport { Theme4BrandComponent } from './shared/layout/themes/theme4/theme4-brand.component';\r\nimport { Theme5BrandComponent } from './shared/layout/themes/theme5/theme5-brand.component';\r\nimport { Theme6BrandComponent } from './shared/layout/themes/theme6/theme6-brand.component';\r\nimport { Theme7BrandComponent } from './shared/layout/themes/theme7/theme7-brand.component';\r\nimport { Theme8BrandComponent } from './shared/layout/themes/theme8/theme8-brand.component';\r\nimport { Theme9BrandComponent } from './shared/layout/themes/theme9/theme9-brand.component';\r\nimport { Theme10BrandComponent } from './shared/layout/themes/theme10/theme10-brand.component';\r\nimport { Theme11BrandComponent } from './shared/layout/themes/theme11/theme11-brand.component';\r\nimport { Theme12BrandComponent } from './shared/layout/themes/theme12/theme12-brand.component';\r\nimport { Theme13BrandComponent } from './shared/layout/themes/theme13/theme13-brand.component';\r\nimport { UserNotificationHelper } from './shared/layout/notifications/UserNotificationHelper';\r\nimport { HeaderNotificationsComponent } from './shared/layout/notifications/header-notifications.component';\r\nimport { NotificationSettingsModalComponent } from './shared/layout/notifications/notification-settings-modal.component';\r\nimport { NotificationsComponent } from './shared/layout/notifications/notifications.component';\r\nimport { TextMaskModule } from 'angular2-text-mask';\r\nimport { ImageCropperModule } from 'ngx-image-cropper';\r\nimport { ActiveDelegatedUsersComboComponent } from './shared/layout/topbar/active-delegated-users-combo.component';\r\n\r\nimport { DefaultLogoComponent } from './shared/layout/themes/default/default-logo.component';\r\n// Metronic\r\nimport {\r\n PerfectScrollbarModule,\r\n PERFECT_SCROLLBAR_CONFIG,\r\n PerfectScrollbarConfigInterface,\r\n} from 'ngx-perfect-scrollbar';\r\nconst DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {\r\n // suppressScrollX: true\r\n};\r\n\r\nimport { SessionTimeoutModalComponent } from './shared/common/session-timeout/session-timeout-modal-component';\r\nimport { SessionTimeoutComponent } from './shared/common/session-timeout/session-timeout.component';\r\nimport { AutoCompleteModule } from 'primeng/autocomplete';\r\nimport { MenuSearchBarComponent } from './shared/layout/nav/menu-search-bar/menu-search-bar.component';\r\nimport { NgxSpinnerModule } from 'ngx-spinner';\r\nimport { ScrollTopComponent } from './shared/layout/scroll-top.component';\r\nimport { AppBsModalModule } from '@shared/common/appBsModal/app-bs-modal.module';\r\nimport { SubheaderModule } from './shared/common/sub-header/subheader.module';\r\nimport { ChangeProfilePictureModalModule } from './shared/layout/profile/change-profile-picture-modal.module';\r\nimport { ToggleDarkModeComponent } from './shared/layout/toggle-dark-mode/toggle-dark-mode.component';\r\nimport { SiteLayoutComponent } from './shared/layout/themes/site-theme/site-theme.component';\r\nimport { LanguagePickerComponent } from './shared/layout/site/language-picker/language-picker.component';\r\nimport { ImageBoxComponent } from './shared/layout/site/image-box/image-box.component';\r\nimport { SiteFooterComponent } from './shared/layout/site/site-footer/site-footer.component';\r\nimport { SiteNavbarComponent } from './shared/layout/site/site-nav/site-nav.component';\r\nimport { HomeComponent } from './shared/layout/site/home/home.component';\r\nimport { HomeHeaderComponent } from './shared/layout/site/home-header/home-header.component';\r\nimport { MovingTextComponent } from './shared/layout/site/moving-text/moving-text.component';\r\nimport { AboutComponent } from './shared/layout/site/info/about-us/about-us.component';\r\nimport { InfoComponent } from './shared/layout/site/info/info.component';\r\nimport { HeaderComponent } from './shared/layout/site/header/header.component';\r\nimport { ContactComponent } from './shared/layout/site/info/contact/contact.component';\r\nimport { OurShowComponent } from './shared/layout/site/our-show/our-show.component';\r\nimport { PlayIconComponent } from './shared/layout/site/playicon/playicon.component';\r\nimport { EpisodePanelComponent } from './shared/layout/site/episode/episode-panel/episode-panel.component';\r\nimport { EpisodeComponent } from './shared/layout/site/episode/episode.component';\r\nimport { EpisodeDescriptionComponent } from './shared/layout/site/episode/episode-description/episode-description.component';\r\nimport { VgCoreModule } from '@videogular/ngx-videogular/core';\r\nimport { VgControlsModule } from '@videogular/ngx-videogular/controls';\r\nimport { VgOverlayPlayModule } from '@videogular/ngx-videogular/overlay-play';\r\nimport { VgBufferingModule } from '@videogular/ngx-videogular/buffering';\r\nimport { PrivacyPolicyComponent } from './shared/layout/site/privacy-policy/privacy-policy.component';\r\nimport { SupportComponent } from './shared/layout/site/info/support/support.component';\r\nimport { IgxCarouselModule, IgxSliderModule } from \"igniteui-angular\";\r\nimport { NgImageSliderModule } from 'ng-image-slider';\r\nimport { GameComponent } from './shared/layout/site/game/game.component';\r\nimport { GamesComponent } from './shared/layout/site/games/games.component';\r\nimport { UnityComponent } from './shared/layout/site/game/unity-game/unity-game.component';\r\nimport { LearnMoreComponent } from './shared/layout/site/learn-more/learn-more.component';\r\nimport { LanguagePickerLocalComponent } from './shared/layout/site/language-picker-local/language-picker-local.component';\r\nimport { LanguageService } from './shared/layout/site/language-picker-local/language-picker-local.service';\r\nimport { EpisodeGuardService } from './episode-guard.service';\r\nimport { RouteService } from './router-service';\r\nimport { SessionService } from './session-service';\r\nimport { OvalComponent } from './shared/layout/site/oval/oval';\r\nimport { MessageService } from 'primeng/api';\r\nimport { OvalContentComponent } from './shared/layout/site/oval-content/oval-content.component';\r\nimport { AboutOurShowComponent } from './shared/layout/site/info/about-us-ourshow/about-us-ourshow.component';\r\nimport { AboutMediaComponent } from './shared/layout/site/info/about-us-media/about-us-media.component';\r\nimport { AboutUsService } from './shared/layout/site/info/about-us.service';\r\nimport { OvalContentDefaultComponent } from './shared/layout/site/oval-content/oval-content-Default/oval-content-Default.component';\r\nimport { OvalContentLM2Component } from './shared/layout/site/oval-content/oval-content-LM2/oval-content-LM2.component';\r\nimport { OvalContentLM3Component } from './shared/layout/site/oval-content/oval-content-LM3/oval-content-LM3.component';\r\nimport { OvalContentLM4Component } from './shared/layout/site/oval-content/oval-content-LM4/oval-content-LM4.component';\r\nimport { OvalContentLM5Component } from './shared/layout/site/oval-content/oval-content-LM5/oval-content-LM5.component';\r\nimport { OvalContentLM6Component } from './shared/layout/site/oval-content/oval-content-LM6/oval-content-LM6.component';\r\nimport { OvalContentLM1Component } from './shared/layout/site/oval-content/oval-content-LM1/oval-content-LM1.component';\r\nimport { DownloadPageComponent } from './shared/layout/site/downloadPage/downloadPage.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n DefaultLayoutComponent,\r\n SiteLayoutComponent,\r\n Theme2LayoutComponent,\r\n Theme3LayoutComponent,\r\n Theme4LayoutComponent,\r\n Theme5LayoutComponent,\r\n Theme6LayoutComponent,\r\n Theme7LayoutComponent,\r\n Theme8LayoutComponent,\r\n Theme9LayoutComponent,\r\n Theme10LayoutComponent,\r\n Theme11LayoutComponent,\r\n Theme12LayoutComponent,\r\n Theme13LayoutComponent,\r\n HeaderNotificationsComponent,\r\n SideBarMenuComponent,\r\n TopBarMenuComponent,\r\n FooterComponent,\r\n ImageBoxComponent,\r\n LanguagePickerComponent,\r\n PrivacyPolicyComponent,\r\n AboutComponent,\r\n AboutOurShowComponent,\r\n AboutMediaComponent,\r\n SupportComponent,\r\n InfoComponent,\r\n EpisodePanelComponent,\r\n EpisodeDescriptionComponent,\r\n EpisodeComponent,\r\n OurShowComponent,\r\n GamesComponent,\r\n DownloadPageComponent,\r\n UnityComponent,\r\n GameComponent,\r\n PlayIconComponent,\r\n HeaderComponent,\r\n MovingTextComponent,\r\n LearnMoreComponent,\r\n OvalComponent,\r\n OvalContentComponent,\r\n OvalContentLM1Component,\r\n OvalContentLM2Component,\r\n OvalContentLM3Component,\r\n OvalContentLM4Component,\r\n OvalContentLM5Component,\r\n OvalContentLM6Component,\r\n OvalContentDefaultComponent,\r\n SiteFooterComponent,\r\n LanguagePickerLocalComponent,\r\n SiteNavbarComponent,\r\n ScrollTopComponent,\r\n LinkedAccountsModalComponent,\r\n UserDelegationsModalComponent,\r\n CreateNewUserDelegationModalComponent,\r\n LinkAccountModalComponent,\r\n ChangePasswordModalComponent,\r\n MySettingsModalComponent,\r\n SmsVerificationModalComponent,\r\n NotificationsComponent,\r\n HomeComponent,\r\n HomeHeaderComponent,\r\n ContactComponent,\r\n ChatBarComponent,\r\n ThemeSelectionPanelComponent,\r\n ChatFriendListItemComponent,\r\n NotificationSettingsModalComponent,\r\n ChatMessageComponent,\r\n QuickThemeSelectionComponent,\r\n LanguageSwitchDropdownComponent,\r\n ChatToggleButtonComponent,\r\n SubscriptionNotificationBarComponent,\r\n UserMenuComponent,\r\n DefaultBrandComponent,\r\n Theme2BrandComponent,\r\n Theme3BrandComponent,\r\n Theme4BrandComponent,\r\n Theme5BrandComponent,\r\n Theme6BrandComponent,\r\n Theme7BrandComponent,\r\n Theme8BrandComponent,\r\n Theme9BrandComponent,\r\n Theme10BrandComponent,\r\n Theme11BrandComponent,\r\n Theme12BrandComponent,\r\n Theme13BrandComponent,\r\n SessionTimeoutModalComponent,\r\n SessionTimeoutComponent,\r\n MenuSearchBarComponent,\r\n ActiveDelegatedUsersComboComponent,\r\n DefaultLogoComponent,\r\n ToggleDarkModeComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n NgImageSliderModule,\r\n IgxSliderModule,\r\n IgxCarouselModule,\r\n VgCoreModule,\r\n FormsModule,\r\n HttpClientModule,\r\n HttpClientJsonpModule,\r\n ModalModule.forRoot(),\r\n TooltipModule.forRoot(),\r\n TabsModule.forRoot(),\r\n BsDropdownModule.forRoot(),\r\n PopoverModule.forRoot(),\r\n BsDatepickerModule.forRoot(),\r\n FileUploadModule,\r\n AppRoutingModule,\r\n UtilsModule,\r\n AppCommonModule.forRoot(),\r\n ServiceProxyModule,\r\n TableModule,\r\n PaginatorModule,\r\n PrimeNgFileUploadModule,\r\n ProgressBarModule,\r\n PerfectScrollbarModule,\r\n TextMaskModule,\r\n ImageCropperModule,\r\n AutoCompleteModule,\r\n NgxSpinnerModule,\r\n AppBsModalModule,\r\n SubheaderModule,\r\n ChangeProfilePictureModalModule,\r\n VgControlsModule,\r\n VgOverlayPlayModule,\r\n VgBufferingModule,\r\n ProgressBarModule,\r\n ],\r\n providers: [\r\n ImpersonationService,\r\n LinkedAccountService,\r\n UserNotificationHelper,\r\n ChatSignalrService,\r\n LanguageService,\r\n EpisodeGuardService,\r\n AboutUsService,\r\n RouteService,\r\n SessionService,\r\n MessageService,\r\n {\r\n provide: PERFECT_SCROLLBAR_CONFIG,\r\n useValue: DEFAULT_PERFECT_SCROLLBAR_CONFIG,\r\n },\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: appInitializerFactory,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class AppModule { }\r\n\r\nfunction appInitializerFactory() {\r\n return () => {\r\n\r\n const url = new URL(location.href);\r\n const params = url.searchParams;\r\n\r\n if (params.has('t')) {\r\n params.delete('t');\r\n window.location.href = url.toString();\r\n }\r\n };\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { NavigationEnd, Router, RouterModule, Routes } from '@angular/router';\r\nimport { AppUiCustomizationService } from '@shared/common/ui/app-ui-customization.service';\r\n\r\nconst routes: Routes = [\r\n { path: '', redirectTo: '/app/home', pathMatch: 'full' },\r\n {\r\n path: 'account',\r\n loadChildren: () => import('account/account.module').then((m) => m.AccountModule), //Lazy load account module\r\n data: { preload: true },\r\n },\r\n {\r\n path: 'download',\r\n loadChildren: () => import('download/download.module').then((m) => m.DownloadModule), //Lazy load download module\r\n data: { preload: true },\r\n },\r\n { path: '**', redirectTo: '/app/main/dashboard' },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes)],\r\n exports: [RouterModule],\r\n providers: [],\r\n})\r\nexport class RootRoutingModule {\r\n constructor(private router: Router, private _uiCustomizationService: AppUiCustomizationService) {\r\n router.events.subscribe((event: NavigationEnd) => {\r\n setTimeout(() => {\r\n this.toggleBodyCssClass(event.url);\r\n }, 0);\r\n });\r\n }\r\n\r\n toggleBodyCssClass(url: string): void {\r\n if (url) {\r\n if (url === '/') {\r\n if (abp.session.userId > 0) {\r\n this.setAppModuleBodyClassInternal();\r\n } else {\r\n this.setAccountModuleBodyClassInternal();\r\n }\r\n }\r\n\r\n if (url.indexOf('/account/') >= 0) {\r\n this.setAccountModuleBodyClassInternal();\r\n } else {\r\n this.setAppModuleBodyClassInternal();\r\n }\r\n }\r\n }\r\n\r\n setAppModuleBodyClassInternal(): void {\r\n let currentBodyClass = document.body.className;\r\n let classesToRemember = '';\r\n\r\n if (currentBodyClass.indexOf('brand-minimize') >= 0) {\r\n classesToRemember += ' brand-minimize ';\r\n }\r\n\r\n if (currentBodyClass.indexOf('aside-left-minimize') >= 0) {\r\n classesToRemember += ' aside-left-minimize';\r\n }\r\n\r\n if (currentBodyClass.indexOf('brand-hide') >= 0) {\r\n classesToRemember += ' brand-hide';\r\n }\r\n\r\n if (currentBodyClass.indexOf('aside-left-hide') >= 0) {\r\n classesToRemember += ' aside-left-hide';\r\n }\r\n\r\n if (currentBodyClass.indexOf('swal2-toast-shown') >= 0) {\r\n classesToRemember += ' swal2-toast-shown';\r\n }\r\n\r\n document.body.className = this._uiCustomizationService.getAppModuleBodyClass() + ' ' + classesToRemember;\r\n }\r\n\r\n setAccountModuleBodyClassInternal(): void {\r\n let currentBodyClass = document.body.className;\r\n let classesToRemember = '';\r\n\r\n if (currentBodyClass.indexOf('swal2-toast-shown') >= 0) {\r\n classesToRemember += ' swal2-toast-shown';\r\n }\r\n\r\n document.body.className = this._uiCustomizationService.getAccountModuleBodyClass() + ' ' + classesToRemember;\r\n }\r\n\r\n getSetting(key: string): string {\r\n return abp.setting.get(key);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { NgxSpinnerTextService } from '@app/shared/ngx-spinner-text.service';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n template: `\r\n \r\n \r\n

    {{ getSpinnerText() }}

    \r\n
    \r\n `,\r\n})\r\nexport class RootComponent {\r\n ngxSpinnerText: NgxSpinnerTextService;\r\n\r\n constructor(_ngxSpinnerText: NgxSpinnerTextService) {\r\n this.ngxSpinnerText = _ngxSpinnerText;\r\n }\r\n\r\n getSpinnerText(): string {\r\n return this.ngxSpinnerText.getText();\r\n }\r\n}\r\n","import { PlatformLocation, registerLocaleData } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { APP_INITIALIZER, DEFAULT_CURRENCY_CODE, Injector, LOCALE_ID, NgModule } from '@angular/core';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { AppAuthService } from '@app/shared/common/auth/app-auth.service';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { WordPlayCommonModule } from '@shared/common/common.module';\r\nimport { AppSessionService } from '@shared/common/session/app-session.service';\r\nimport { AppUiCustomizationService } from '@shared/common/ui/app-ui-customization.service';\r\nimport { UrlHelper } from '@shared/helpers/UrlHelper';\r\nimport {\r\n API_BASE_URL,\r\n UiCustomizationSettingsDto,\r\n ThemeSettingsDto,\r\n ThemeMenuSettingsDto,\r\n ThemeLayoutSettingsDto,\r\n ThemeHeaderSettingsDto,\r\n ThemeSubHeaderSettingsDto,\r\n ThemeFooterSettingsDto,\r\n ApplicationInfoDto,\r\n} from '@shared/service-proxies/service-proxies';\r\nimport { ServiceProxyModule } from '@shared/service-proxies/service-proxy.module';\r\nimport * as localForage from 'localforage';\r\nimport { AppPreBootstrap } from './AppPreBootstrap';\r\nimport { AppModule } from './app/app.module';\r\nimport { RootRoutingModule } from './root-routing.module';\r\nimport { RootComponent } from './root.component';\r\nimport { DomHelper } from '@shared/helpers/DomHelper';\r\nimport { CookieConsentService } from '@shared/common/session/cookie-consent.service';\r\nimport { NgxBootstrapDatePickerConfigService } from 'assets/ngx-bootstrap/ngx-bootstrap-datepicker-config.service';\r\nimport { LocaleMappingService } from '@shared/locale-mapping.service';\r\nimport { NgxSpinnerModule, NgxSpinnerService } from 'ngx-spinner';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\n// import { AngularFileViewerModule } from '@taldor-ltd/angular-file-viewer';\r\n\r\n\r\nexport function appInitializerFactory(injector: Injector, platformLocation: PlatformLocation) {\r\n return () => {\r\n let spinnerService = injector.get(NgxSpinnerService);\r\n\r\n spinnerService.show();\r\n\r\n return new Promise((resolve, reject) => {\r\n AppConsts.appBaseHref = getBaseHref(platformLocation);\r\n let appBaseUrl = getDocumentOrigin() + AppConsts.appBaseHref;\r\n\r\n initializeLocalForage();\r\n\r\n AppPreBootstrap.run(\r\n appBaseUrl,\r\n injector,\r\n () => {\r\n handleLogoutRequest(injector.get(AppAuthService));\r\n\r\n if (UrlHelper.isInstallUrl(location.href)) {\r\n doConfigurationForInstallPage(injector);\r\n spinnerService.hide();\r\n resolve(true);\r\n } else if (UrlHelper.isDownloadUrl(location.href)) {\r\n doConfigurationForDownloadPage(injector);\r\n spinnerService.hide();\r\n resolve(true);\r\n } else {\r\n let appSessionService: AppSessionService = injector.get(AppSessionService);\r\n appSessionService.init().then(\r\n (result) => {\r\n initializeAppCssClasses(injector, result);\r\n initializeTenantResources(injector);\r\n initializeCookieConsent(injector);\r\n registerLocales(resolve, reject, spinnerService);\r\n },\r\n (err) => {\r\n spinnerService.hide();\r\n reject(err);\r\n }\r\n );\r\n }\r\n },\r\n resolve,\r\n reject\r\n );\r\n });\r\n };\r\n}\r\n\r\nfunction initializeLocalForage() {\r\n localForage.config({\r\n driver: localForage.LOCALSTORAGE,\r\n name: 'WordPlay',\r\n version: 1.0,\r\n storeName: 'abpzerotemplate_local_storage',\r\n description: 'Cached data for WordPlay',\r\n });\r\n}\r\n\r\nfunction getDefaultThemeForInstallPage(): UiCustomizationSettingsDto {\r\n let theme = new UiCustomizationSettingsDto();\r\n theme.baseSettings = new ThemeSettingsDto();\r\n theme.baseSettings.theme = 'default';\r\n theme.baseSettings.menu = new ThemeMenuSettingsDto();\r\n theme.baseSettings.menu.asideSkin = 'light';\r\n\r\n theme.baseSettings.header = new ThemeHeaderSettingsDto();\r\n\r\n theme.baseSettings.subHeader = new ThemeSubHeaderSettingsDto();\r\n\r\n theme.baseSettings.layout = new ThemeLayoutSettingsDto();\r\n theme.baseSettings.layout.layoutType = 'fluid';\r\n theme.baseSettings.header = new ThemeHeaderSettingsDto();\r\n theme.baseSettings.footer = new ThemeFooterSettingsDto();\r\n return theme;\r\n}\r\n\r\nfunction setApplicationInfoForInstallPage(injector, theme: UiCustomizationSettingsDto) {\r\n let appSessionService: AppSessionService = injector.get(AppSessionService);\r\n let dateTimeService: DateTimeService = injector.get(DateTimeService);\r\n appSessionService.theme = theme;\r\n appSessionService.application = new ApplicationInfoDto();\r\n appSessionService.application.releaseDate = dateTimeService.getStartOfDay();\r\n}\r\n\r\nfunction doConfigurationForInstallPage(injector) {\r\n let theme = getDefaultThemeForInstallPage();\r\n setApplicationInfoForInstallPage(injector, theme);\r\n\r\n initializeAppCssClasses(injector, theme);\r\n}\r\n\r\nfunction doConfigurationForDownloadPage(injector) {\r\n doConfigurationForInstallPage(injector);\r\n}\r\n\r\nfunction initializeAppCssClasses(injector: Injector, theme: UiCustomizationSettingsDto) {\r\n let appUiCustomizationService = injector.get(AppUiCustomizationService);\r\n appUiCustomizationService.init(theme);\r\n\r\n // Css classes based on the layout\r\n if (abp.session.userId) {\r\n document.body.className = appUiCustomizationService.getAppModuleBodyClass();\r\n document.body.setAttribute('style', appUiCustomizationService.getAppModuleBodyStyle());\r\n } else {\r\n document.body.className = appUiCustomizationService.getAccountModuleBodyClass();\r\n document.body.setAttribute('style', appUiCustomizationService.getAccountModuleBodyStyle());\r\n }\r\n}\r\n\r\nfunction initializeTenantResources(injector: Injector) {\r\n let appSessionService: AppSessionService = injector.get(AppSessionService);\r\n\r\n if (appSessionService.tenant && appSessionService.tenant.customCssId) {\r\n document.head.appendChild(\r\n DomHelper.createElement('link', [\r\n {\r\n key: 'id',\r\n value: 'TenantCustomCss',\r\n },\r\n {\r\n key: 'rel',\r\n value: 'stylesheet',\r\n },\r\n {\r\n key: 'href',\r\n value:\r\n AppConsts.remoteServiceBaseUrl +\r\n '/TenantCustomization/GetCustomCss?tenantId=' +\r\n appSessionService.tenant.id,\r\n },\r\n ])\r\n );\r\n }\r\n\r\n let metaImage = DomHelper.getElementByAttributeValue('meta', 'property', 'og:image');\r\n if (metaImage) {\r\n //set og share image meta tag\r\n if (!appSessionService.tenant || !appSessionService.tenant.logoId) {\r\n let ui: AppUiCustomizationService = injector.get(AppUiCustomizationService);\r\n metaImage.setAttribute(\r\n 'content',\r\n window.location.origin +\r\n '/assets/common/images/app-logo-on-' +\r\n abp.setting.get(\r\n appSessionService.theme.baseSettings.theme + '.' + 'App.UiManagement.Left.AsideSkin'\r\n ) +\r\n '.svg'\r\n );\r\n } else {\r\n metaImage.setAttribute(\r\n 'content',\r\n AppConsts.remoteServiceBaseUrl + '/TenantCustomization/GetLogo?tenantId=' + appSessionService.tenant.id\r\n );\r\n }\r\n }\r\n}\r\n\r\nfunction initializeCookieConsent(injector: Injector) {\r\n let cookieConsentService: CookieConsentService = injector.get(CookieConsentService);\r\n cookieConsentService.init();\r\n}\r\n\r\nfunction getDocumentOrigin() {\r\n if (!document.location.origin) {\r\n return (\r\n document.location.protocol +\r\n '//' +\r\n document.location.hostname +\r\n (document.location.port ? ':' + document.location.port : '')\r\n );\r\n }\r\n\r\n return document.location.origin;\r\n}\r\n\r\nfunction registerLocales(\r\n resolve: (value?: boolean | Promise) => void,\r\n reject: any,\r\n spinnerService: NgxSpinnerService\r\n) {\r\n if (shouldLoadLocale()) {\r\n let angularLocale = convertAbpLocaleToAngularLocale(abp.localization.currentLanguage.name);\r\n import(`@/../@angular/common/locales/${angularLocale}.mjs`).then((module) => {\r\n registerLocaleData(module.default);\r\n NgxBootstrapDatePickerConfigService.registerNgxBootstrapDatePickerLocales().then((_) => {\r\n resolve(true);\r\n spinnerService.hide();\r\n });\r\n }, reject);\r\n } else {\r\n NgxBootstrapDatePickerConfigService.registerNgxBootstrapDatePickerLocales().then((_) => {\r\n resolve(true);\r\n spinnerService.hide();\r\n });\r\n }\r\n}\r\n\r\nexport function shouldLoadLocale(): boolean {\r\n return abp.localization.currentLanguage.name && abp.localization.currentLanguage.name !== 'en-US';\r\n}\r\n\r\nexport function convertAbpLocaleToAngularLocale(locale: string): string {\r\n return new LocaleMappingService().map('angular', locale);\r\n}\r\n\r\nexport function getRemoteServiceBaseUrl(): string {\r\n return AppConsts.remoteServiceBaseUrl;\r\n}\r\n\r\nexport function getCurrentLanguage(): string {\r\n return convertAbpLocaleToAngularLocale(abp.localization.currentLanguage.name);\r\n}\r\n\r\nexport function getCurrencyCode(injector: Injector): string {\r\n let appSessionService: AppSessionService = injector.get(AppSessionService);\r\n return appSessionService.application.currency;\r\n}\r\n\r\nexport function getBaseHref(platformLocation: PlatformLocation): string {\r\n let baseUrl = platformLocation.getBaseHrefFromDOM();\r\n if (baseUrl) {\r\n return baseUrl;\r\n }\r\n\r\n return '/';\r\n}\r\n\r\nfunction handleLogoutRequest(authService: AppAuthService) {\r\n let currentUrl = UrlHelper.initialUrl;\r\n let returnUrl = UrlHelper.getReturnUrl();\r\n if (currentUrl.indexOf('account/logout') >= 0 && returnUrl) {\r\n authService.logout(true, returnUrl);\r\n }\r\n}\r\n\r\n@NgModule({\r\n imports: [\r\n BrowserModule,\r\n // AngularFileViewerModule,\r\n BrowserAnimationsModule,\r\n AppModule,\r\n WordPlayCommonModule.forRoot(),\r\n ServiceProxyModule,\r\n HttpClientModule,\r\n RootRoutingModule,\r\n NgxSpinnerModule,\r\n ],\r\n declarations: [RootComponent],\r\n providers: [\r\n { provide: API_BASE_URL, useFactory: getRemoteServiceBaseUrl },\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: appInitializerFactory,\r\n deps: [Injector, PlatformLocation],\r\n multi: true,\r\n },\r\n {\r\n provide: LOCALE_ID,\r\n useFactory: getCurrentLanguage,\r\n },\r\n {\r\n provide: DEFAULT_CURRENCY_CODE,\r\n useFactory: getCurrencyCode,\r\n deps: [Injector],\r\n },\r\n ],\r\n bootstrap: [RootComponent],\r\n})\r\nexport class RootModule {}\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\nimport { environment } from './environments/environment';\r\nimport { hmrBootstrap } from './hmr';\r\nimport './polyfills.ts';\r\nimport { RootModule } from './root.module';\r\n\r\nconst hookConsole = () => {\r\n const logs = [];\r\n window['_logs'] = logs;\r\n window['_logsDate'] = Date.now();\r\n hook('log');\r\n hook('info');\r\n hook('debug');\r\n hook('warn');\r\n hook('error');\r\n\r\n window.addEventListener(\"error\", function (error) {\r\n addLog('error', {\r\n error: error.error,\r\n filename: error.filename,\r\n lineno: error.lineno,\r\n colno: error.colno,\r\n message: error.message,\r\n });\r\n });\r\n\r\n function addLog(type, args) {\r\n logs.push({\r\n arguments: args,\r\n type: type,\r\n date: Date.now()\r\n });\r\n\r\n window['_logsDate'] = Date.now();\r\n }\r\n\r\n function hook(methodName) {\r\n const _original = console[methodName];\r\n console[methodName] = function () {\r\n _original.apply(console, arguments);\r\n\r\n let _arguments = [];\r\n for (let i = 0; i < arguments.length; ++i) {\r\n _arguments.push(arguments[i])\r\n }\r\n\r\n addLog(methodName, arguments);\r\n }\r\n }\r\n}\r\n\r\nhookConsole();\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nconst bootstrap = () => platformBrowserDynamic().bootstrapModule(RootModule);\r\n\r\n/* \"Hot Module Replacement\" is enabled as described on\r\n * https://medium.com/@beeman/tutorial-enable-hrm-in-angular-cli-apps-1b0d13b80130#.sa87zkloh\r\n */\r\n\r\nif (environment.hmr) {\r\n if (module['hot']) {\r\n hmrBootstrap(module, bootstrap); //HMR enabled bootstrap\r\n } else {\r\n console.error('HMR is not enabled for webpack-dev-server!');\r\n console.log('Are you using the --hmr flag for ng serve?');\r\n }\r\n} else {\r\n bootstrap(); //Regular bootstrap\r\n}\r\n","export interface IAppStore {\r\n appleStoreLink: string;\r\n googlePlayLink: string;\r\n}\r\n\r\nexport class AppConsts {\r\n static readonly tenancyNamePlaceHolderInUrl = '{TENANCY_NAME}';\r\n\r\n static remoteServiceBaseUrl: string;\r\n static productionServiceBaseUrl: string;\r\n static remoteServiceBaseUrlFormat: string;\r\n static appBaseUrl: string;\r\n static appBaseHref: string; // returns angular's base-href parameter value if used during the publish\r\n static appBaseUrlFormat: string;\r\n static recaptchaSiteKey: string;\r\n static subscriptionExpireNootifyDayCount: number;\r\n static appStore: IAppStore;\r\n\r\n static localeMappings: any = [];\r\n\r\n static readonly userManagement = {\r\n defaultAdminUserName: 'admin',\r\n };\r\n\r\n static readonly localization = {\r\n defaultLocalizationSourceName: 'WordPlay',\r\n };\r\n\r\n static readonly authorization = {\r\n encrptedAuthTokenName: 'enc_auth_token',\r\n };\r\n\r\n static readonly grid = {\r\n defaultPageSize: 10,\r\n };\r\n\r\n static readonly MinimumUpgradePaymentAmount = 1;\r\n\r\n /// \r\n /// Gets current version of the application.\r\n /// It's also shown in the web page.\r\n /// \r\n static readonly WebAppGuiVersion = '11.4.0';\r\n\r\n /// \r\n /// Redirects users to host URL when using subdomain as tenancy name for not existing tenants\r\n /// \r\n static readonly PreventNotExistingTenantSubdomains = false;\r\n}\r\n","import { animate, state, style, transition, trigger } from '@angular/animations';\r\n\r\nexport function appModuleAnimation() {\r\n return slideFromBottom();\r\n}\r\n\r\nexport function accountModuleAnimation() {\r\n return slideFromUp();\r\n}\r\n\r\nexport function slideFromBottom() {\r\n return trigger('routerTransition', [\r\n state('void', style({ 'padding-top': '20px', opacity: '0' })),\r\n state('*', style({ 'padding-top': '0px', opacity: '1' })),\r\n transition(':enter', [animate('0.33s ease-out', style({ opacity: '1', 'padding-top': '0px' }))]),\r\n ]);\r\n}\r\n\r\nexport function slideFromUp() {\r\n return trigger('routerTransition', [\r\n state('void', style({ 'margin-top': '-10px', opacity: '0' })),\r\n state('*', style({ 'margin-top': '0px', opacity: '1' })),\r\n transition(':enter', [animate('0.2s ease-out', style({ opacity: '1', 'margin-top': '0px' }))]),\r\n ]);\r\n}\r\n","import {\r\n PermissionCheckerService,\r\n FeatureCheckerService,\r\n LocalizationService,\r\n MessageService,\r\n AbpMultiTenancyService,\r\n NotifyService,\r\n SettingService,\r\n} from 'abp-ng2-module';\r\nimport { Component, Injector, OnDestroy } from '@angular/core';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppUrlService } from '@shared/common/nav/app-url.service';\r\nimport { AppSessionService } from '@shared/common/session/app-session.service';\r\nimport { AppUiCustomizationService } from '@shared/common/ui/app-ui-customization.service';\r\nimport { PrimengTableHelper } from 'shared/helpers/PrimengTableHelper';\r\nimport { UiCustomizationSettingsDto } from '@shared/service-proxies/service-proxies';\r\nimport { NgxSpinnerService } from 'ngx-spinner';\r\nimport { NgxSpinnerTextService } from '@app/shared/ngx-spinner-text.service';\r\n\r\ninterface AbpEventSubscription {\r\n eventName: string;\r\n callback: (...args: any[]) => void;\r\n}\r\n\r\n@Component({\r\n template: '',\r\n})\r\nexport abstract class AppComponentBase implements OnDestroy {\r\n localizationSourceName = AppConsts.localization.defaultLocalizationSourceName;\r\n\r\n localization: LocalizationService;\r\n permission: PermissionCheckerService;\r\n feature: FeatureCheckerService;\r\n notify: NotifyService;\r\n setting: SettingService;\r\n message: MessageService;\r\n multiTenancy: AbpMultiTenancyService;\r\n appSession: AppSessionService;\r\n primengTableHelper: PrimengTableHelper;\r\n ui: AppUiCustomizationService;\r\n appUrlService: AppUrlService;\r\n spinnerService: NgxSpinnerService;\r\n eventSubscriptions: AbpEventSubscription[] = [];\r\n\r\n ngxSpinnerTextService: NgxSpinnerTextService;\r\n\r\n constructor(injector: Injector) {\r\n this.localization = injector.get(LocalizationService);\r\n this.permission = injector.get(PermissionCheckerService);\r\n this.feature = injector.get(FeatureCheckerService);\r\n this.notify = injector.get(NotifyService);\r\n this.setting = injector.get(SettingService);\r\n this.message = injector.get(MessageService);\r\n this.multiTenancy = injector.get(AbpMultiTenancyService);\r\n this.appSession = injector.get(AppSessionService);\r\n this.ui = injector.get(AppUiCustomizationService);\r\n this.appUrlService = injector.get(AppUrlService);\r\n this.primengTableHelper = new PrimengTableHelper();\r\n this.spinnerService = injector.get(NgxSpinnerService);\r\n this.ngxSpinnerTextService = injector.get(NgxSpinnerTextService);\r\n }\r\n\r\n get currentTheme(): UiCustomizationSettingsDto {\r\n return this.appSession.theme;\r\n }\r\n\r\n get containerClass(): string {\r\n if (this.appSession.theme.baseSettings.layout.layoutType === 'fluid') {\r\n return 'app-container container-fluid';\r\n } else if (this.appSession.theme.baseSettings.layout.layoutType === 'fixed' || this.appSession.theme.baseSettings.layout.layoutType === 'fluid-xxl') {\r\n return 'app-container container-xxl';\r\n }\r\n\r\n return 'app-container container';\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unSubscribeAllEvents();\r\n }\r\n\r\n flattenDeep(array) {\r\n return array.reduce(\r\n (acc, val) => (Array.isArray(val) ? acc.concat(this.flattenDeep(val)) : acc.concat(val)),\r\n []\r\n );\r\n }\r\n\r\n l(key: string, ...args: any[]): string {\r\n args.unshift(key);\r\n args.unshift(this.localizationSourceName);\r\n return this.ls.apply(this, args);\r\n }\r\n\r\n ls(sourcename: string, key: string, ...args: any[]): string {\r\n let localizedText = this.localization.localize(key, sourcename);\r\n\r\n if (!localizedText) {\r\n localizedText = key;\r\n }\r\n\r\n if (!args || !args.length) {\r\n return localizedText;\r\n }\r\n\r\n args.unshift(localizedText);\r\n return abp.utils.formatString.apply(this, this.flattenDeep(args));\r\n }\r\n\r\n isGranted(permissionName: string): boolean {\r\n return this.permission.isGranted(permissionName);\r\n }\r\n\r\n isGrantedAny(...permissions: string[]): boolean {\r\n if (!permissions) {\r\n return false;\r\n }\r\n\r\n for (const permission of permissions) {\r\n if (this.isGranted(permission)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n s(key: string): string {\r\n return abp.setting.get(key);\r\n }\r\n\r\n appRootUrl(): string {\r\n return this.appUrlService.appRootUrl;\r\n }\r\n\r\n showMainSpinner(text?: string): void {\r\n this.ngxSpinnerTextService.setText(text);\r\n this.spinnerService.show();\r\n }\r\n\r\n hideMainSpinner(text?: string): void {\r\n this.spinnerService.hide();\r\n }\r\n\r\n protected subscribeToEvent(eventName: string, callback: (...args: any[]) => void): void {\r\n abp.event.on(eventName, callback);\r\n this.eventSubscriptions.push({\r\n eventName,\r\n callback,\r\n });\r\n }\r\n\r\n private unSubscribeAllEvents() {\r\n this.eventSubscriptions.forEach((s) => abp.event.off(s.eventName, s.callback));\r\n this.eventSubscriptions = [];\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { ModalDirective } from 'ngx-bootstrap/modal';\r\n\r\n@Directive({\r\n selector: '[appBsModal]',\r\n exportAs: 'bs-modal',\r\n})\r\nexport class AppBsModalDirective extends ModalDirective {\r\n showElement(): void {\r\n super.showElement();\r\n this.setZIndexes();\r\n }\r\n\r\n setZIndexes(): void {\r\n let newZIndex = this.setAndGetModalZIndex();\r\n this.setBackDropZIndex(newZIndex - 1);\r\n }\r\n\r\n setAndGetModalZIndex(): number {\r\n let modalBaseZIndex = 1050;\r\n let modalsLength = document.querySelectorAll('.modal.fade.show').length;\r\n\r\n let newZIndex = modalBaseZIndex + modalsLength * 2;\r\n\r\n (this as any)._element.nativeElement.style.zIndex = newZIndex.toString();\r\n return newZIndex;\r\n }\r\n\r\n setBackDropZIndex(zindex: number): void {\r\n let modalBackdrops = document.querySelectorAll('.modal-backdrop.fade.show');\r\n (modalBackdrops[modalBackdrops.length - 1] as HTMLElement).style.zIndex = zindex.toString();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { AppBsModalDirective } from './app-bs-modal.directive';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n declarations: [AppBsModalDirective],\r\n imports: [CommonModule],\r\n exports: [AppBsModalDirective],\r\n})\r\nexport class AppBsModalModule {}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { AppUrlService } from './nav/app-url.service';\r\nimport { AppUiCustomizationService } from './ui/app-ui-customization.service';\r\nimport { AppSessionService } from './session/app-session.service';\r\nimport { CookieConsentService } from './session/cookie-consent.service';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n})\r\nexport class WordPlayCommonModule {\r\n static forRoot(): ModuleWithProviders {\r\n return {\r\n ngModule: CommonModule,\r\n providers: [AppUiCustomizationService, CookieConsentService, AppSessionService, AppUrlService],\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { AppSessionService } from '@shared/common/session/app-session.service';\r\n\r\n@Injectable()\r\nexport class AppUrlService {\r\n static tenancyNamePlaceHolder = '{TENANCY_NAME}';\r\n\r\n constructor(private readonly _appSessionService: AppSessionService) {}\r\n\r\n get appRootUrl(): string {\r\n if (this._appSessionService.tenant) {\r\n return this.getAppRootUrlOfTenant(this._appSessionService.tenant.tenancyName);\r\n } else {\r\n return this.getAppRootUrlOfTenant(null);\r\n }\r\n }\r\n\r\n /**\r\n * Returning url ends with '/'.\r\n */\r\n getAppRootUrlOfTenant(tenancyName?: string): string {\r\n let baseUrl = this.ensureEndsWith(AppConsts.appBaseUrlFormat, '/');\r\n\r\n //Add base href if it is not configured in appconfig.json\r\n if (baseUrl.indexOf(AppConsts.appBaseHref) < 0) {\r\n baseUrl = baseUrl + this.removeFromStart(AppConsts.appBaseHref, '/');\r\n }\r\n\r\n if (baseUrl.indexOf(AppUrlService.tenancyNamePlaceHolder) < 0) {\r\n return baseUrl;\r\n }\r\n\r\n if (baseUrl.indexOf(AppUrlService.tenancyNamePlaceHolder + '.') >= 0) {\r\n baseUrl = baseUrl.replace(AppUrlService.tenancyNamePlaceHolder + '.', AppUrlService.tenancyNamePlaceHolder);\r\n if (tenancyName) {\r\n tenancyName = tenancyName + '.';\r\n }\r\n }\r\n\r\n if (!tenancyName) {\r\n return baseUrl.replace(AppUrlService.tenancyNamePlaceHolder, '');\r\n }\r\n\r\n return baseUrl.replace(AppUrlService.tenancyNamePlaceHolder, tenancyName);\r\n }\r\n\r\n private ensureEndsWith(str: string, c: string) {\r\n if (str.charAt(str.length - 1) !== c) {\r\n str = str + c;\r\n }\r\n\r\n return str;\r\n }\r\n\r\n private removeFromEnd(str: string, c: string) {\r\n if (str.charAt(str.length - 1) === c) {\r\n str = str.substr(0, str.length - 1);\r\n }\r\n\r\n return str;\r\n }\r\n\r\n private removeFromStart(str: string, c: string) {\r\n if (str.charAt(0) === c) {\r\n str = str.substr(1, str.length - 1);\r\n }\r\n\r\n return str;\r\n }\r\n}\r\n","import { Injector, Pipe, PipeTransform } from '@angular/core';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { LocalizationService } from 'abp-ng2-module';\r\n\r\n@Pipe({\r\n name: 'localize',\r\n})\r\nexport class LocalizePipe implements PipeTransform {\r\n localizationSourceName = AppConsts.localization.defaultLocalizationSourceName;\r\n\r\n localization: LocalizationService;\r\n\r\n constructor(injector: Injector) {\r\n this.localization = injector.get(LocalizationService);\r\n }\r\n\r\n l(key: string, ...args: any[]): string {\r\n args.unshift(key);\r\n args.unshift(this.localizationSourceName);\r\n return this.ls.apply(this, args);\r\n }\r\n\r\n ls(sourcename: string, key: string, ...args: any[]): string {\r\n let localizedText = this.localization.localize(key, sourcename);\r\n\r\n if (!localizedText) {\r\n localizedText = key;\r\n }\r\n\r\n if (!args || !args.length) {\r\n return localizedText;\r\n }\r\n\r\n args.unshift(localizedText);\r\n return abp.utils.formatString.apply(this, this.flattenDeep(args));\r\n }\r\n\r\n transform(key: string, ...args: any[]): string {\r\n return this.l(key, args);\r\n }\r\n\r\n flattenDeep(array) {\r\n return array.reduce(\r\n (acc, val) => (Array.isArray(val) ? acc.concat(this.flattenDeep(val)) : acc.concat(val)),\r\n []\r\n );\r\n }\r\n}\r\n","import { Injector, Pipe, PipeTransform } from '@angular/core';\r\nimport { PermissionCheckerService } from 'abp-ng2-module';\r\n\r\n@Pipe({\r\n name: 'permission',\r\n})\r\nexport class PermissionPipe implements PipeTransform {\r\n permission: PermissionCheckerService;\r\n\r\n constructor(injector: Injector) {\r\n this.permission = injector.get(PermissionCheckerService);\r\n }\r\n\r\n transform(permission: string): boolean {\r\n return this.permission.isGranted(permission);\r\n }\r\n}\r\n","import { AbpMultiTenancyService } from 'abp-ng2-module';\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n ApplicationInfoDto,\r\n GetCurrentLoginInformationsOutput,\r\n SessionServiceProxy,\r\n TenantLoginInfoDto,\r\n UserLoginInfoDto,\r\n UiCustomizationSettingsDto,\r\n} from '@shared/service-proxies/service-proxies';\r\n\r\n@Injectable()\r\nexport class AppSessionService {\r\n private _user: UserLoginInfoDto;\r\n private _impersonatorUser: UserLoginInfoDto;\r\n private _tenant: TenantLoginInfoDto;\r\n private _impersonatorTenant: TenantLoginInfoDto;\r\n private _application: ApplicationInfoDto;\r\n private _theme: UiCustomizationSettingsDto;\r\n\r\n constructor(\r\n private _sessionService: SessionServiceProxy,\r\n private _abpMultiTenancyService: AbpMultiTenancyService\r\n ) {}\r\n\r\n get application(): ApplicationInfoDto {\r\n return this._application;\r\n }\r\n\r\n get user(): UserLoginInfoDto {\r\n return this._user;\r\n }\r\n\r\n get userId(): number {\r\n return this.user ? this.user.id : null;\r\n }\r\n\r\n get tenant(): TenantLoginInfoDto {\r\n return this._tenant;\r\n }\r\n\r\n get tenancyName(): string {\r\n return this._tenant ? this.tenant.tenancyName : '';\r\n }\r\n\r\n get tenantId(): number {\r\n return this.tenant ? this.tenant.id : null;\r\n }\r\n\r\n get impersonatorUser(): UserLoginInfoDto {\r\n return this._impersonatorUser;\r\n }\r\n get impersonatorUserId(): number {\r\n return this.impersonatorUser ? this.impersonatorUser.id : null;\r\n }\r\n get impersonatorTenant(): TenantLoginInfoDto {\r\n return this._impersonatorTenant;\r\n }\r\n get impersonatorTenancyName(): string {\r\n return this.impersonatorTenant ? this.impersonatorTenant.tenancyName : '';\r\n }\r\n get impersonatorTenantId(): number {\r\n return this.impersonatorTenant ? this.impersonatorTenant.id : null;\r\n }\r\n\r\n get theme(): UiCustomizationSettingsDto {\r\n return this._theme;\r\n }\r\n\r\n set theme(val: UiCustomizationSettingsDto) {\r\n this._theme = val;\r\n }\r\n\r\n set application(val: ApplicationInfoDto) {\r\n this._application = val;\r\n }\r\n\r\n init(): Promise {\r\n return new Promise((resolve, reject) => {\r\n this._sessionService\r\n .getCurrentLoginInformations()\r\n .toPromise()\r\n .then(\r\n (result: GetCurrentLoginInformationsOutput) => {\r\n this._application = result.application;\r\n this._user = result.user;\r\n this._tenant = result.tenant;\r\n this._theme = result.theme;\r\n this._impersonatorTenant = result.impersonatorTenant;\r\n this._impersonatorUser = result.impersonatorUser;\r\n resolve(result.theme);\r\n },\r\n (err) => {\r\n reject(err);\r\n }\r\n );\r\n });\r\n }\r\n\r\n getShownLoginName(): string {\r\n if (!this._user) {\r\n return '';\r\n }\r\n\r\n const userName = this._user.userName;\r\n if (!this._abpMultiTenancyService.isEnabled) {\r\n return userName;\r\n }\r\n\r\n return (this._tenant ? this._tenant.tenancyName : '.') + '\\\\' + userName;\r\n }\r\n\r\n changeTenantIfNeeded(tenantId?: number): boolean {\r\n if (this.isCurrentTenant(tenantId)) {\r\n return false;\r\n }\r\n\r\n abp.multiTenancy.setTenantIdCookie(tenantId);\r\n location.reload();\r\n return true;\r\n }\r\n\r\n private isCurrentTenant(tenantId?: number) {\r\n let isTenant = tenantId > 0;\r\n\r\n if (!isTenant && !this.tenant) {\r\n // this is host\r\n return true;\r\n }\r\n\r\n if (!tenantId && this.tenant) {\r\n return false;\r\n } else if (tenantId && (!this.tenant || this.tenant.id !== tenantId)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AppLocalizationService } from '@app/shared/common/localization/app-localization.service';\r\n\r\n@Injectable()\r\nexport class CookieConsentService {\r\n constructor(private _appLocalizationService: AppLocalizationService) {}\r\n\r\n public init() {\r\n if (abp.setting.getBoolean('App.UserManagement.IsCookieConsentEnabled')) {\r\n (window as any).cookieconsent.initialise({\r\n showLink: false,\r\n content: {\r\n message: this._appLocalizationService.l('CookieConsent_Message'),\r\n dismiss: this._appLocalizationService.l('CookieConsent_Dismiss'),\r\n },\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { UiCustomizationSettingsDto } from '@shared/service-proxies/service-proxies';\r\nimport * as rtlDetect from 'rtl-detect';\r\nimport { ThemeAssetContributorFactory } from '@shared/helpers/ThemeAssetContributorFactory';\r\n\r\n@Injectable()\r\nexport class AppUiCustomizationService {\r\n private _theme: UiCustomizationSettingsDto;\r\n\r\n init(theme: UiCustomizationSettingsDto): void {\r\n this._theme = theme;\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n let assetContributor = ThemeAssetContributorFactory.getCurrent();\r\n return assetContributor.getAppModuleBodyClass();\r\n }\r\n\r\n getAppModuleBodyStyle(): string {\r\n return '--kt-toolbar-height:55px; --kt-toolbar-height-tablet-and-mobile:55px;';\r\n }\r\n\r\n getAccountModuleBodyClass() {\r\n return 'account header-fixed header-mobile-fixed subheader-fixed subheader-enabled subheader-solid aside-enabled aside-fixed page-loading';\r\n }\r\n\r\n getAccountModuleBodyStyle(): string {\r\n return '';\r\n }\r\n\r\n getSelectEditionBodyClass() {\r\n return 'skin-';\r\n }\r\n\r\n getLeftAsideClass(): string {\r\n let cssClass = 'aside aside-' + this._theme.baseSettings.menu.asideSkin;\r\n\r\n if (this._theme.baseSettings.menu.hoverableAside){\r\n cssClass += ' aside-hoverable';\r\n }\r\n\r\n if (this._theme.baseSettings.menu.submenuToggle === 'true') {\r\n cssClass += ' aside-menu-dropdown';\r\n }\r\n\r\n if (this._theme.baseSettings.menu.fixedAside && this._theme.baseSettings.menu.submenuToggle !== 'true') {\r\n cssClass += ' ps';\r\n }\r\n\r\n return cssClass;\r\n }\r\n\r\n getLeftAsideSubMenuStyles(): string {\r\n if (this._theme.baseSettings.menu.submenuToggle !== 'true') {\r\n return '';\r\n }\r\n return 'position: fixed; top:inherit';\r\n }\r\n\r\n isSubmenuToggleDropdown(): boolean {\r\n return this._theme.baseSettings.menu.submenuToggle === 'true';\r\n }\r\n\r\n getTopBarMenuContainerClass(): string {\r\n let menuCssClass =\r\n 'header-bottom header-menu-skin-' +\r\n this._theme.baseSettings.menu.asideSkin +\r\n ' container container--full-height container-responsive';\r\n if (this._theme.baseSettings.layout.layoutType === 'boxed') {\r\n return menuCssClass + ' container-xxl';\r\n }\r\n\r\n return menuCssClass;\r\n }\r\n\r\n getIsMenuScrollable(): boolean {\r\n return this._theme.allowMenuScroll && this._theme.baseSettings.menu.fixedAside;\r\n }\r\n\r\n getSideBarMenuItemClass(item, isMenuActive) {\r\n let menuCssClass = 'menu-item';\r\n\r\n if (item.items.length) {\r\n menuCssClass += ' menu-item-submenu';\r\n }\r\n\r\n if (isMenuActive) {\r\n menuCssClass += ' menu-item-open menu-item-active';\r\n }\r\n\r\n return menuCssClass;\r\n }\r\n}\r\n","export class DomHelper {\r\n static waitUntilElementIsReady(selector: string, callback: any, checkPeriod?: number): void {\r\n let selectors = selector.split(',');\r\n let elementCount = selectors.length;\r\n\r\n if (!checkPeriod) {\r\n checkPeriod = 100;\r\n }\r\n\r\n let checkExist = setInterval(() => {\r\n let foundElementCount = 0;\r\n for (let i = 0; i < selectors.length; i++) {\r\n let selector = selectors[i].trim();\r\n if (selector[0] === '#') {\r\n let idSelector = selector.replace('#', '');\r\n foundElementCount = foundElementCount + (document.getElementById(idSelector) ? 1 : 0);\r\n } else if (selector[0] === '.') {\r\n let classSelector = selector.replace('.', '');\r\n foundElementCount = foundElementCount + (document.getElementsByClassName(classSelector) ? 1 : 0);\r\n }\r\n }\r\n\r\n if (foundElementCount >= elementCount) {\r\n clearInterval(checkExist);\r\n callback();\r\n }\r\n }, checkPeriod);\r\n }\r\n\r\n static createElement(tag: string, attributes: any[]): any {\r\n let el = document.createElement(tag);\r\n for (let i = 0; i < attributes.length; i++) {\r\n let attribute = attributes[i];\r\n el.setAttribute(attribute.key, attribute.value);\r\n }\r\n\r\n return el;\r\n }\r\n\r\n static getElementByAttributeValue(tag: string, attribute: string, value: string) {\r\n let els = document.getElementsByTagName(tag);\r\n if (!els) {\r\n return undefined;\r\n }\r\n\r\n for (let i = 0; i < els.length; i++) {\r\n let el = els[i];\r\n if (el.getAttribute(attribute) === value) {\r\n return el;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n","class ExtractionResult {\r\n public IsMatch: boolean;\r\n public Matches: any[];\r\n\r\n constructor(isMatch: boolean) {\r\n this.IsMatch = isMatch;\r\n this.Matches = [];\r\n }\r\n}\r\n\r\nenum FormatStringTokenType {\r\n ConstantText,\r\n DynamicValue,\r\n}\r\n\r\nclass FormatStringToken {\r\n public Text: string;\r\n\r\n public Type: FormatStringTokenType;\r\n\r\n constructor(text: string, type: FormatStringTokenType) {\r\n this.Text = text;\r\n this.Type = type;\r\n }\r\n}\r\n\r\nclass FormatStringTokenizer {\r\n Tokenize(format: string, includeBracketsForDynamicValues: boolean = false): FormatStringToken[] {\r\n const tokens: FormatStringToken[] = [];\r\n\r\n let currentText = '';\r\n let inDynamicValue = false;\r\n\r\n for (let i = 0; i < format.length; i++) {\r\n const c = format[i];\r\n switch (c) {\r\n case '{':\r\n if (inDynamicValue) {\r\n throw new Error(\r\n 'Incorrect syntax at char ' +\r\n i +\r\n '! format string can not contain nested dynamic value expression!'\r\n );\r\n }\r\n\r\n inDynamicValue = true;\r\n\r\n if (currentText.length > 0) {\r\n tokens.push(new FormatStringToken(currentText, FormatStringTokenType.ConstantText));\r\n currentText = '';\r\n }\r\n\r\n break;\r\n case '}':\r\n if (!inDynamicValue) {\r\n throw new Error(\r\n 'Incorrect syntax at char ' +\r\n i +\r\n '! These is no opening brackets for the closing bracket }.'\r\n );\r\n }\r\n\r\n inDynamicValue = false;\r\n\r\n if (currentText.length <= 0) {\r\n throw new Error('Incorrect syntax at char ' + i + '! Brackets does not containt any chars.');\r\n }\r\n\r\n let dynamicValue = currentText;\r\n if (includeBracketsForDynamicValues) {\r\n dynamicValue = '{' + dynamicValue + '}';\r\n }\r\n\r\n tokens.push(new FormatStringToken(dynamicValue, FormatStringTokenType.DynamicValue));\r\n currentText = '';\r\n\r\n break;\r\n default:\r\n currentText += c;\r\n break;\r\n }\r\n }\r\n\r\n if (inDynamicValue) {\r\n throw new Error('There is no closing } char for an opened { char.');\r\n }\r\n\r\n if (currentText.length > 0) {\r\n tokens.push(new FormatStringToken(currentText, FormatStringTokenType.ConstantText));\r\n }\r\n\r\n return tokens;\r\n }\r\n}\r\n\r\nexport class FormattedStringValueExtracter {\r\n Extract(str: string, format: string): ExtractionResult {\r\n if (str === format) {\r\n return new ExtractionResult(true);\r\n }\r\n\r\n const formatTokens = new FormatStringTokenizer().Tokenize(format);\r\n if (!formatTokens) {\r\n return new ExtractionResult(str === '');\r\n }\r\n\r\n const result = new ExtractionResult(true);\r\n\r\n for (let i = 0; i < formatTokens.length; i++) {\r\n const currentToken = formatTokens[i];\r\n const previousToken = i > 0 ? formatTokens[i - 1] : null;\r\n\r\n if (currentToken.Type === FormatStringTokenType.ConstantText) {\r\n if (i === 0) {\r\n if (str.indexOf(currentToken.Text) !== 0) {\r\n result.IsMatch = false;\r\n return result;\r\n }\r\n\r\n str = str.substr(currentToken.Text.length, str.length - currentToken.Text.length);\r\n } else {\r\n const matchIndex = str.indexOf(currentToken.Text);\r\n if (matchIndex < 0) {\r\n result.IsMatch = false;\r\n return result;\r\n }\r\n\r\n result.Matches.push({ name: previousToken.Text, value: str.substr(0, matchIndex) });\r\n str = str.substring(0, matchIndex + currentToken.Text.length);\r\n }\r\n }\r\n }\r\n\r\n const lastToken = formatTokens[formatTokens.length - 1];\r\n if (lastToken.Type === FormatStringTokenType.DynamicValue) {\r\n result.Matches.push({ name: lastToken.Text, value: str });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n IsMatch(str: string, format: string): string[] {\r\n const result = new FormattedStringValueExtracter().Extract(str, format);\r\n if (!result.IsMatch) {\r\n return [];\r\n }\r\n\r\n const values = [];\r\n for (let i = 0; i < result.Matches.length; i++) {\r\n values.push(result.Matches[i].value);\r\n }\r\n\r\n return values;\r\n }\r\n}\r\n","import { LazyLoadEvent } from 'primeng/api';\r\nimport { Paginator } from 'primeng/paginator';\r\nimport { Table } from 'primeng/table';\r\nimport * as rtlDetect from 'rtl-detect';\r\n\r\nexport class PrimengTableHelper {\r\n predefinedRecordsCountPerPage = [5, 10, 25, 50, 100, 250, 500];\r\n\r\n defaultRecordsCountPerPage = 10;\r\n\r\n isResponsive = true;\r\n\r\n resizableColumns: false;\r\n\r\n totalRecordsCount = 0;\r\n\r\n records: any[];\r\n\r\n isLoading = false;\r\n\r\n showLoadingIndicator(): void {\r\n setTimeout(() => {\r\n this.isLoading = true;\r\n }, 0);\r\n }\r\n\r\n hideLoadingIndicator(): void {\r\n setTimeout(() => {\r\n this.isLoading = false;\r\n }, 0);\r\n }\r\n\r\n getSorting(table: Table): string {\r\n let sorting = '';\r\n\r\n if (table.sortMode === 'multiple') {\r\n if (table.multiSortMeta) {\r\n for (let i = 0; i < table.multiSortMeta.length; i++) {\r\n const element = table.multiSortMeta[i];\r\n if (i > 0) {\r\n sorting += ',';\r\n }\r\n sorting += element.field;\r\n if (element.order === 1) {\r\n sorting += ' ASC';\r\n } else if (element.order === -1) {\r\n sorting += ' DESC';\r\n }\r\n }\r\n }\r\n } else {\r\n if (table.sortField) {\r\n sorting = table.sortField;\r\n if (table.sortOrder === 1) {\r\n sorting += ' ASC';\r\n } else if (table.sortOrder === -1) {\r\n sorting += ' DESC';\r\n }\r\n }\r\n }\r\n\r\n return sorting;\r\n }\r\n\r\n getMaxResultCount(paginator: Paginator, event: LazyLoadEvent): number {\r\n if (paginator.rows) {\r\n return paginator.rows;\r\n }\r\n\r\n if (!event) {\r\n return 0;\r\n }\r\n\r\n return event.rows;\r\n }\r\n\r\n getSkipCount(paginator: Paginator, event: LazyLoadEvent): number {\r\n if (paginator.first) {\r\n return paginator.first;\r\n }\r\n\r\n if (!event) {\r\n return 0;\r\n }\r\n\r\n return event.first;\r\n }\r\n\r\n shouldResetPaging(event: LazyLoadEvent): boolean {\r\n if (!event /*|| event.sortField*/) {\r\n // if you want to reset after sorting, comment out parameter\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n adjustScroll(table: Table) {\r\n const rtl = rtlDetect.isRtlLang(abp.localization.currentLanguage.name);\r\n if (!rtl) {\r\n return;\r\n }\r\n\r\n const body: HTMLElement = table.el.nativeElement.querySelector('.p-datatable-scrollable-body');\r\n const header: HTMLElement = table.el.nativeElement.querySelector('.p-datatable-scrollable-header');\r\n body.addEventListener('scroll', () => {\r\n header.scrollLeft = body.scrollLeft;\r\n });\r\n }\r\n}\r\n","import { AppConsts } from '@shared/AppConsts';\r\nimport { FormattedStringValueExtracter } from '@shared/helpers/FormattedStringValueExtracter';\r\n\r\nexport class SubdomainTenancyNameFinder {\r\n urlHasTenancyNamePlaceholder(url: string): boolean {\r\n return url.indexOf(AppConsts.tenancyNamePlaceHolderInUrl) >= 0;\r\n }\r\n\r\n getCurrentTenancyNameOrNull(rootAddress: string): string {\r\n if (rootAddress.indexOf(AppConsts.tenancyNamePlaceHolderInUrl) < 0) {\r\n // Web site does not support subdomain tenant name\r\n return null;\r\n }\r\n\r\n const currentRootAddress = document.location.href;\r\n\r\n const formattedStringValueExtracter = new FormattedStringValueExtracter();\r\n const values: any[] = formattedStringValueExtracter.IsMatch(currentRootAddress, rootAddress);\r\n if (!values.length) {\r\n return null;\r\n }\r\n\r\n return values[0];\r\n }\r\n}\r\n","import { NameValuePair } from '@shared/utils/name-value-pair';\r\nimport { IThemeAssetContributor } from '../ThemeAssetContributor';\r\nimport { ThemeHelper } from '../ThemeHelper';\r\n\r\nexport class DefaultThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [\r\n ];\r\n }\r\n\r\n public getMenuWrapperStyle(): string {\r\n return 'header-menu-wrapper header-menu-wrapper-left';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'text-dark fw-bold my-1 me-5';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer py-4 d-flex flex-lg-column';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n const skin = ThemeHelper.getAsideSkin();\r\n return [{\r\n name: 'data-kt-app-layout',\r\n value: skin + '-sidebar'\r\n }, {\r\n name: 'data-kt-app-header-fixed',\r\n value: ThemeHelper.getDesktopFixedHeader()\r\n },\r\n {\r\n name: 'data-kt-app-header-fixed-mobile',\r\n value: ThemeHelper.getMobileFixedHeader()\r\n },\r\n {\r\n name: 'data-kt-app-sidebar-enabled',\r\n value: 'true'\r\n },\r\n {\r\n name: 'data-kt-app-sidebar-fixed',\r\n value: ThemeHelper.getFixedAside()\r\n },\r\n {\r\n name: 'data-kt-app-sidebar-hoverable',\r\n value: ThemeHelper.getHoverableAside()\r\n },\r\n {\r\n name: 'data-kt-app-sidebar-push-header',\r\n value: 'true'\r\n },\r\n {\r\n name: 'data-kt-app-toolbar-enabled',\r\n value: 'true'\r\n },\r\n {\r\n name: 'data-kt-app-sidebar-push-toolbar',\r\n value: 'true'\r\n },\r\n {\r\n name: 'data-kt-app-sidebar-push-footer',\r\n value: 'true'\r\n },\r\n {\r\n name: 'data-kt-app-toolbar-enabled',\r\n value: 'true'\r\n },\r\n {\r\n name: 'data-kt-app-sidebar-minimize',\r\n value: ThemeHelper.getDefaultMinimizedAside() === 'true' ? 'on' : 'off'\r\n }\r\n ];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'app-default';\r\n }\r\n}\r\n","import { IThemeAssetContributor } from '../ThemeAssetContributor';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { NameValuePair } from '@shared/utils/name-value-pair';\r\n\r\nexport class Theme2ThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [AppConsts.appBaseUrl + '/assets/fonts/fonts-asap-condensed.min.css'];\r\n }\r\n\r\n public getMenuWrapperStyle(): string {\r\n return 'header-menu-wrapper header-menu-wrapper-left';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'text-white fw-bold my-2 me-5';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer py-4 d-flex flex-lg-column';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n return [];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'header-fixed header-tablet-and-mobile-fixed toolbar-enabled';\r\n }\r\n}\r\n","import { IThemeAssetContributor } from '../ThemeAssetContributor';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { NameValuePair } from '@shared/utils/name-value-pair';\r\n\r\nexport class Theme3ThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [AppConsts.appBaseUrl + '/assets/fonts/fonts-montserrat.min.css'];\r\n }\r\n\r\n public getMenuWrapperStyle(): string {\r\n return '';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'subheader-title text-dark fw-bold my-1 me-3';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer py-4 d-flex flex-lg-column';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n return [];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'sidebar-enabled';\r\n }\r\n}\r\n","import { IThemeAssetContributor } from '../ThemeAssetContributor';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { NameValuePair } from '@shared/utils/name-value-pair';\r\n\r\nexport class Theme4ThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [AppConsts.appBaseUrl + '/assets/fonts/fonts-montserrat.min.css'];\r\n }\r\n\r\n public getMenuWrapperStyle(): string {\r\n return 'header-menu-wrapper header-menu-wrapper-left';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'text-dark fw-bold my-1 me-5';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer bg-white py-4 d-flex flex-lg-column mt-5';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n return [];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'header-fixed header-tablet-and-mobile-fixed aside-fixed aside-secondary-disabled';\r\n }\r\n}\r\n","import { IThemeAssetContributor } from '../ThemeAssetContributor';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { NameValuePair } from '@shared/utils/name-value-pair';\r\n\r\nexport class Theme5ThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [AppConsts.appBaseUrl + '/assets/fonts/fonts-asap-condensed.min.css'];\r\n }\r\n\r\n public getMenuWrapperStyle(): string {\r\n return '';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'subheader-title text-dark fw-bold my-1 me-3';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer pt-10 pb-5 d-flex flex-column flex-md-row flex-stack';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n return [];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'header-fixed header-tablet-and-mobile-fixed aside-enabled sidebar-enabled';\r\n }\r\n}\r\n","import { IThemeAssetContributor } from '../ThemeAssetContributor';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { NameValuePair } from '@shared/utils/name-value-pair';\r\n\r\nexport class Theme6ThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [AppConsts.appBaseUrl + '/assets/fonts/fonts-montserrat.min.css'];\r\n }\r\n\r\n public getMenuWrapperStyle(): string {\r\n return 'header-menu-wrapper header-menu-wrapper-left py-lg-2';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'text-dark fw-bold my-1 me-5';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer py-5 d-flex flex-lg-column';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n return [];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'header-fixed header-tablet-and-mobile-fixed toolbar-enabled toolbar-fixed aside-enabled aside-fixed';\r\n }\r\n}\r\n","import { IThemeAssetContributor } from '../ThemeAssetContributor';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { NameValuePair } from '@shared/utils/name-value-pair';\r\n\r\nexport class Theme7ThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [AppConsts.appBaseUrl + '/assets/fonts/fonts-montserrat.min.css'];\r\n }\r\n\r\n public getMenuWrapperStyle(): string {\r\n return '';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'text-dark fw-bold my-1 me-5';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer py-4 d-flex flex-lg-column';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n return [];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'header-fixed header-tablet-and-mobile-fixed aside-fixed aside-secondary-enabled';\r\n }\r\n}\r\n","import { IThemeAssetContributor } from '../ThemeAssetContributor';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { NameValuePair } from '@shared/utils/name-value-pair';\r\n\r\nexport class Theme8ThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [AppConsts.appBaseUrl + '/assets/fonts/fonts-asap-condensed.min.css'];\r\n }\r\n \r\n public getMenuWrapperStyle(): string {\r\n return 'header-menu-wrapper header-menu-wrapper-left';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'text-dark fw-bold my-2 me-5';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer py-4 d-flex flex-lg-column';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n return [];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'header-tablet-and-mobile-fixed aside-enabled';\r\n }\r\n}\r\n","import { IThemeAssetContributor } from '../ThemeAssetContributor';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { NameValuePair } from '@shared/utils/name-value-pair';\r\n\r\nexport class Theme9ThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [AppConsts.appBaseUrl + '/assets/fonts/fonts-montserrat.min.css'];\r\n }\r\n\r\n public getMenuWrapperStyle(): string {\r\n return 'header-menu-wrapper header-menu-wrapper-left';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'text-dark fw-bold my-1 me-5';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer py-4 d-flex flex-lg-column';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n return [];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'header-fixed header-tablet-and-mobile-fixed aside-fixed aside-secondary-disabled';\r\n }\r\n}\r\n","import { IThemeAssetContributor } from '../ThemeAssetContributor';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { NameValuePair } from '@shared/utils/name-value-pair';\r\n\r\nexport class Theme10ThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [AppConsts.appBaseUrl + '/assets/fonts/fonts-asap-condensed.min.css'];\r\n }\r\n\r\n public getMenuWrapperStyle(): string {\r\n return 'header-menu-wrapper header-menu-wrapper-left';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'text-dark fw-bold my-1 me-5';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer py-4 d-flex flex-lg-column';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n return [];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'header-tablet-and-mobile-fixed aside-enabled';\r\n }\r\n}\r\n","import { NameValuePair } from '@shared/utils/name-value-pair';\r\nimport { IThemeAssetContributor } from '../ThemeAssetContributor';\r\n\r\nexport class Theme11ThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [''];\r\n }\r\n\r\n public getMenuWrapperStyle(): string {\r\n return '';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'text-dark fw-bold my-1 me-5 ms-5';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer py-4 d-flex flex-lg-column ';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n return [];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'header-fixed header-tablet-and-mobile-fixed toolbar-enabled';\r\n }\r\n}\r\n","import { NameValuePair } from '@shared/utils/name-value-pair';\r\nimport { IThemeAssetContributor } from '../ThemeAssetContributor';\r\n\r\nexport class Theme12ThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [\r\n ];\r\n }\r\n\r\n public getMenuWrapperStyle(): string {\r\n return 'header-menu-wrapper header-menu-wrapper-left';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'd-flex text-gray-900 fw-bolder my-1 fs-3';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer py-4 d-flex flex-lg-column';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n return [];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'page-bg header-fixed header-tablet-and-mobile-fixed aside-enabled';\r\n }\r\n}\r\n","import { NameValuePair } from '@shared/utils/name-value-pair';\r\nimport { IThemeAssetContributor } from '../ThemeAssetContributor';\r\n\r\nexport class Theme13ThemeAssetContributor implements IThemeAssetContributor {\r\n public getAssetUrls(): string[] {\r\n return [\r\n ];\r\n }\r\n\r\n public getMenuWrapperStyle(): string {\r\n return 'header-menu-wrapper header-menu-wrapper-left';\r\n }\r\n\r\n public getSubheaderStyle(): string {\r\n return 'text-dark fw-bold my-1 me-5';\r\n }\r\n\r\n public getFooterStyle(): string {\r\n return 'footer py-4 d-flex flex-lg-column';\r\n }\r\n\r\n getBodyAttributes(): NameValuePair[] {\r\n return [];\r\n }\r\n\r\n getAppModuleBodyClass(): string {\r\n return 'header-fixed header-tablet-and-mobile-fixed toolbar-enabled toolbar-fixed toolbar-tablet-and-mobile-fixed aside-enabled aside-fixed';\r\n }\r\n}\r\n","import { IThemeAssetContributor } from '@app/shared/layout/themes/ThemeAssetContributor';\r\nimport { ThemeHelper } from '@app/shared/layout/themes/ThemeHelper';\r\nimport { DefaultThemeAssetContributor } from '@app/shared/layout/themes/default/DefaultThemeAssetContributor';\r\nimport { Theme2ThemeAssetContributor } from '@app/shared/layout/themes/theme2/Theme2ThemeAssetContributor';\r\nimport { Theme3ThemeAssetContributor } from '@app/shared/layout/themes/theme3/Theme3ThemeAssetContributor';\r\nimport { Theme4ThemeAssetContributor } from '@app/shared/layout/themes/theme4/Theme4ThemeAssetContributor';\r\nimport { Theme5ThemeAssetContributor } from '@app/shared/layout/themes/theme5/Theme5ThemeAssetContributor';\r\nimport { Theme6ThemeAssetContributor } from '@app/shared/layout/themes/theme6/Theme6ThemeAssetContributor';\r\nimport { Theme7ThemeAssetContributor } from '@app/shared/layout/themes/theme7/Theme7ThemeAssetContributor';\r\nimport { Theme8ThemeAssetContributor } from '@app/shared/layout/themes/theme8/Theme8ThemeAssetContributor';\r\nimport { Theme9ThemeAssetContributor } from '@app/shared/layout/themes/theme9/Theme9ThemeAssetContributor';\r\nimport { Theme10ThemeAssetContributor } from '@app/shared/layout/themes/theme10/Theme10ThemeAssetContributor';\r\nimport { Theme11ThemeAssetContributor } from '@app/shared/layout/themes/theme11/Theme11ThemeAssetContributor';\r\nimport { Theme12ThemeAssetContributor } from '@app/shared/layout/themes/theme12/Theme12ThemeAssetContributor';\r\nimport { Theme13ThemeAssetContributor } from '@app/shared/layout/themes/theme13/Theme13ThemeAssetContributor';\r\nexport class ThemeAssetContributorFactory {\r\n static getCurrent(): IThemeAssetContributor {\r\n let theme = ThemeHelper.getTheme();\r\n\r\n if (theme === 'default') {\r\n return new DefaultThemeAssetContributor();\r\n }\r\n\r\n if (theme === 'theme2') {\r\n return new Theme2ThemeAssetContributor();\r\n }\r\n\r\n if (theme === 'theme3') {\r\n return new Theme3ThemeAssetContributor();\r\n }\r\n\r\n if (theme === 'theme4') {\r\n return new Theme4ThemeAssetContributor();\r\n }\r\n\r\n if (theme === 'theme5') {\r\n return new Theme5ThemeAssetContributor();\r\n }\r\n\r\n if (theme === 'theme6') {\r\n return new Theme6ThemeAssetContributor();\r\n }\r\n\r\n if (theme === 'theme7') {\r\n return new Theme7ThemeAssetContributor();\r\n }\r\n\r\n if (theme === 'theme8') {\r\n return new Theme8ThemeAssetContributor();\r\n }\r\n\r\n if (theme === 'theme9') {\r\n return new Theme9ThemeAssetContributor();\r\n }\r\n\r\n if (theme === 'theme10') {\r\n return new Theme10ThemeAssetContributor();\r\n }\r\n\r\n if (theme === 'theme11') {\r\n return new Theme11ThemeAssetContributor();\r\n }\r\n\r\n if (theme === 'theme12') {\r\n return new Theme12ThemeAssetContributor();\r\n }\r\n\r\n if (theme === 'theme13') {\r\n return new Theme13ThemeAssetContributor();\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","export class UrlHelper {\r\n /**\r\n * The URL requested, before initial routing.\r\n */\r\n static readonly initialUrl = location.href;\r\n\r\n static getQueryParameters(): any {\r\n return UrlHelper.getQueryParametersUsingParameters(document.location.search);\r\n }\r\n\r\n static getQueryParametersUsingParameters(search: string): any {\r\n return search\r\n .replace(/(^\\?)/, '')\r\n .split('&')\r\n .map(\r\n function (n) {\r\n return (n = n.split('=')), (this[n[0]] = n[1]), this;\r\n }.bind({})\r\n )[0];\r\n }\r\n\r\n static getQueryParametersUsingHash(): any {\r\n return document.location.hash\r\n .substr(1, document.location.hash.length - 1)\r\n .replace(/(^\\?)/, '')\r\n .split('&')\r\n .map(\r\n function (n) {\r\n return (n = n.split('=')), (this[n[0]] = n[1]), this;\r\n }.bind({})\r\n )[0];\r\n }\r\n\r\n static getInitialUrlParameters(): any {\r\n let questionMarkIndex = UrlHelper.initialUrl.indexOf('?');\r\n if (questionMarkIndex >= 0) {\r\n return UrlHelper.initialUrl.substr(questionMarkIndex, UrlHelper.initialUrl.length - questionMarkIndex);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n static getReturnUrl(): string {\r\n const queryStringObj = UrlHelper.getQueryParametersUsingParameters(UrlHelper.getInitialUrlParameters());\r\n if (queryStringObj.returnUrl) {\r\n return decodeURIComponent(queryStringObj.returnUrl);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n static getSingleSignIn(): boolean {\r\n const queryStringObj = UrlHelper.getQueryParametersUsingParameters(UrlHelper.getInitialUrlParameters());\r\n if (queryStringObj.ss) {\r\n return queryStringObj.ss;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n static isInstallUrl(url): boolean {\r\n return url && url.indexOf('app/admin/install') >= 0;\r\n }\r\n\r\n static isDownloadUrl(url: string): boolean {\r\n return url && url.indexOf('/download') >= 0;\r\n }\r\n}\r\n","export class XmlHttpRequestHelper {\r\n static ajax(type: string, url: string, customHeaders: any, data: any, success: any) {\r\n let xhr = new XMLHttpRequest();\r\n\r\n xhr.onreadystatechange = () => {\r\n if (xhr.readyState === XMLHttpRequest.DONE) {\r\n if (xhr.status === 200) {\r\n let result = JSON.parse(xhr.responseText);\r\n success(result);\r\n } else if (xhr.status !== 0) {\r\n alert(abp.localization.localize('InternalServerError', 'AbpWeb'));\r\n }\r\n }\r\n };\r\n\r\n url += (url.indexOf('?') >= 0 ? '&' : '?') + 'd=' + new Date().getTime();\r\n xhr.open(type, url, true);\r\n\r\n for (let property in customHeaders) {\r\n if (customHeaders.hasOwnProperty(property)) {\r\n xhr.setRequestHeader(property, customHeaders[property]);\r\n }\r\n }\r\n\r\n xhr.setRequestHeader('Content-type', 'application/json');\r\n if (data) {\r\n xhr.send(data);\r\n } else {\r\n xhr.send();\r\n }\r\n }\r\n}\r\n","import { AppConsts } from '@shared/AppConsts';\r\nimport { filter as _filter } from 'lodash-es';\r\n\r\nexport class LocaleMappingService {\r\n map(mappingSource: string, locale: string): string {\r\n if (!AppConsts.localeMappings && !AppConsts.localeMappings[mappingSource]) {\r\n return locale;\r\n }\r\n\r\n const localeMappings = _filter(AppConsts.localeMappings[mappingSource], { from: locale });\r\n if (localeMappings && localeMappings.length) {\r\n return localeMappings[0]['to'];\r\n }\r\n\r\n return locale;\r\n }\r\n}\r\n","//----------------------\r\n// \r\n// Generated using the NSwag toolchain v13.19.0.0 (NJsonSchema v10.9.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\r\n// \r\n//----------------------\r\n\r\n/* tslint:disable */\r\n/* eslint-disable */\r\n// ReSharper disable InconsistentNaming\r\n\r\nimport { mergeMap as _observableMergeMap, catchError as _observableCatch } from 'rxjs/operators';\r\nimport { Observable, throwError as _observableThrow, of as _observableOf } from 'rxjs';\r\nimport { Injectable, Inject, Optional, InjectionToken } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpResponse, HttpResponseBase } from '@angular/common/http';\r\n\r\nimport { DateTime, Duration } from \"luxon\";\r\n\r\nexport const API_BASE_URL = new InjectionToken('API_BASE_URL');\r\n\r\n@Injectable()\r\nexport class AccountServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n register(body: RegisterInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/Register\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRegister(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRegister(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRegister(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = RegisterOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n easyRegister(body: EasyRegisterInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/EasyRegister\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processEasyRegister(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processEasyRegister(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processEasyRegister(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = EasyRegisterOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n isTenantAvailable(body: IsTenantAvailableInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/IsTenantAvailable\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processIsTenantAvailable(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processIsTenantAvailable(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processIsTenantAvailable(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = IsTenantAvailableOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n resolveTenantId(body: ResolveTenantIdInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/ResolveTenantId\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processResolveTenantId(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processResolveTenantId(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processResolveTenantId(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n \r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n sendPasswordResetCode(body: SendPasswordResetCodeInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/SendPasswordResetCode\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSendPasswordResetCode(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSendPasswordResetCode(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSendPasswordResetCode(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n resetPassword(body: ResetPasswordInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/ResetPassword\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processResetPassword(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processResetPassword(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processResetPassword(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ResetPasswordOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n sendEmailActivationLink(body: SendEmailActivationLinkInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/SendEmailActivationLink\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSendEmailActivationLink(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSendEmailActivationLink(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSendEmailActivationLink(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n activateEmail(body: ActivateEmailInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/ActivateEmail\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processActivateEmail(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processActivateEmail(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processActivateEmail(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n impersonateUser(body: ImpersonateUserInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/ImpersonateUser\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processImpersonateUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processImpersonateUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processImpersonateUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ImpersonateOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n impersonateTenant(body: ImpersonateTenantInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/ImpersonateTenant\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processImpersonateTenant(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processImpersonateTenant(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processImpersonateTenant(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ImpersonateOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n delegatedImpersonate(body: DelegatedImpersonateInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/DelegatedImpersonate\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelegatedImpersonate(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelegatedImpersonate(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelegatedImpersonate(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ImpersonateOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n backToImpersonator(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/BackToImpersonator\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processBackToImpersonator(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processBackToImpersonator(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processBackToImpersonator(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ImpersonateOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n switchToLinkedAccount(body: SwitchToLinkedAccountInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Account/SwitchToLinkedAccount\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSwitchToLinkedAccount(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSwitchToLinkedAccount(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSwitchToLinkedAccount(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SwitchToLinkedAccountOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class AuditLogServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param startDate (optional) \r\n * @param endDate (optional) \r\n * @param userName (optional) \r\n * @param serviceName (optional) \r\n * @param methodName (optional) \r\n * @param browserInfo (optional) \r\n * @param hasException (optional) \r\n * @param minExecutionDuration (optional) \r\n * @param maxExecutionDuration (optional) \r\n * @param sorting (optional) \r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @return Success\r\n */\r\n getAuditLogs(startDate: DateTime | undefined, endDate: DateTime | undefined, userName: string | undefined, serviceName: string | undefined, methodName: string | undefined, browserInfo: string | undefined, hasException: boolean | undefined, minExecutionDuration: number | undefined, maxExecutionDuration: number | undefined, sorting: string | undefined, maxResultCount: number | undefined, skipCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/AuditLog/GetAuditLogs?\";\r\n if (startDate === null)\r\n throw new Error(\"The parameter 'startDate' cannot be null.\");\r\n else if (startDate !== undefined)\r\n url_ += \"StartDate=\" + encodeURIComponent(startDate ? \"\" + startDate.toString() : \"\") + \"&\";\r\n if (endDate === null)\r\n throw new Error(\"The parameter 'endDate' cannot be null.\");\r\n else if (endDate !== undefined)\r\n url_ += \"EndDate=\" + encodeURIComponent(endDate ? \"\" + endDate.toString() : \"\") + \"&\";\r\n if (userName === null)\r\n throw new Error(\"The parameter 'userName' cannot be null.\");\r\n else if (userName !== undefined)\r\n url_ += \"UserName=\" + encodeURIComponent(\"\" + userName) + \"&\";\r\n if (serviceName === null)\r\n throw new Error(\"The parameter 'serviceName' cannot be null.\");\r\n else if (serviceName !== undefined)\r\n url_ += \"ServiceName=\" + encodeURIComponent(\"\" + serviceName) + \"&\";\r\n if (methodName === null)\r\n throw new Error(\"The parameter 'methodName' cannot be null.\");\r\n else if (methodName !== undefined)\r\n url_ += \"MethodName=\" + encodeURIComponent(\"\" + methodName) + \"&\";\r\n if (browserInfo === null)\r\n throw new Error(\"The parameter 'browserInfo' cannot be null.\");\r\n else if (browserInfo !== undefined)\r\n url_ += \"BrowserInfo=\" + encodeURIComponent(\"\" + browserInfo) + \"&\";\r\n if (hasException === null)\r\n throw new Error(\"The parameter 'hasException' cannot be null.\");\r\n else if (hasException !== undefined)\r\n url_ += \"HasException=\" + encodeURIComponent(\"\" + hasException) + \"&\";\r\n if (minExecutionDuration === null)\r\n throw new Error(\"The parameter 'minExecutionDuration' cannot be null.\");\r\n else if (minExecutionDuration !== undefined)\r\n url_ += \"MinExecutionDuration=\" + encodeURIComponent(\"\" + minExecutionDuration) + \"&\";\r\n if (maxExecutionDuration === null)\r\n throw new Error(\"The parameter 'maxExecutionDuration' cannot be null.\");\r\n else if (maxExecutionDuration !== undefined)\r\n url_ += \"MaxExecutionDuration=\" + encodeURIComponent(\"\" + maxExecutionDuration) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAuditLogs(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAuditLogs(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAuditLogs(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = AuditLogListDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param startDate (optional) \r\n * @param endDate (optional) \r\n * @param userName (optional) \r\n * @param serviceName (optional) \r\n * @param methodName (optional) \r\n * @param browserInfo (optional) \r\n * @param hasException (optional) \r\n * @param minExecutionDuration (optional) \r\n * @param maxExecutionDuration (optional) \r\n * @param sorting (optional) \r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @return Success\r\n */\r\n getAuditLogsToExcel(startDate: DateTime | undefined, endDate: DateTime | undefined, userName: string | undefined, serviceName: string | undefined, methodName: string | undefined, browserInfo: string | undefined, hasException: boolean | undefined, minExecutionDuration: number | undefined, maxExecutionDuration: number | undefined, sorting: string | undefined, maxResultCount: number | undefined, skipCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/AuditLog/GetAuditLogsToExcel?\";\r\n if (startDate === null)\r\n throw new Error(\"The parameter 'startDate' cannot be null.\");\r\n else if (startDate !== undefined)\r\n url_ += \"StartDate=\" + encodeURIComponent(startDate ? \"\" + startDate.toString() : \"\") + \"&\";\r\n if (endDate === null)\r\n throw new Error(\"The parameter 'endDate' cannot be null.\");\r\n else if (endDate !== undefined)\r\n url_ += \"EndDate=\" + encodeURIComponent(endDate ? \"\" + endDate.toString() : \"\") + \"&\";\r\n if (userName === null)\r\n throw new Error(\"The parameter 'userName' cannot be null.\");\r\n else if (userName !== undefined)\r\n url_ += \"UserName=\" + encodeURIComponent(\"\" + userName) + \"&\";\r\n if (serviceName === null)\r\n throw new Error(\"The parameter 'serviceName' cannot be null.\");\r\n else if (serviceName !== undefined)\r\n url_ += \"ServiceName=\" + encodeURIComponent(\"\" + serviceName) + \"&\";\r\n if (methodName === null)\r\n throw new Error(\"The parameter 'methodName' cannot be null.\");\r\n else if (methodName !== undefined)\r\n url_ += \"MethodName=\" + encodeURIComponent(\"\" + methodName) + \"&\";\r\n if (browserInfo === null)\r\n throw new Error(\"The parameter 'browserInfo' cannot be null.\");\r\n else if (browserInfo !== undefined)\r\n url_ += \"BrowserInfo=\" + encodeURIComponent(\"\" + browserInfo) + \"&\";\r\n if (hasException === null)\r\n throw new Error(\"The parameter 'hasException' cannot be null.\");\r\n else if (hasException !== undefined)\r\n url_ += \"HasException=\" + encodeURIComponent(\"\" + hasException) + \"&\";\r\n if (minExecutionDuration === null)\r\n throw new Error(\"The parameter 'minExecutionDuration' cannot be null.\");\r\n else if (minExecutionDuration !== undefined)\r\n url_ += \"MinExecutionDuration=\" + encodeURIComponent(\"\" + minExecutionDuration) + \"&\";\r\n if (maxExecutionDuration === null)\r\n throw new Error(\"The parameter 'maxExecutionDuration' cannot be null.\");\r\n else if (maxExecutionDuration !== undefined)\r\n url_ += \"MaxExecutionDuration=\" + encodeURIComponent(\"\" + maxExecutionDuration) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAuditLogsToExcel(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAuditLogsToExcel(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAuditLogsToExcel(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FileDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getEntityHistoryObjectTypes(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/AuditLog/GetEntityHistoryObjectTypes\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEntityHistoryObjectTypes(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEntityHistoryObjectTypes(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEntityHistoryObjectTypes(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(NameValueDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param startDate (optional) \r\n * @param endDate (optional) \r\n * @param userName (optional) \r\n * @param entityTypeFullName (optional) \r\n * @param sorting (optional) \r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @return Success\r\n */\r\n getEntityChanges(startDate: DateTime | undefined, endDate: DateTime | undefined, userName: string | undefined, entityTypeFullName: string | undefined, sorting: string | undefined, maxResultCount: number | undefined, skipCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/AuditLog/GetEntityChanges?\";\r\n if (startDate === null)\r\n throw new Error(\"The parameter 'startDate' cannot be null.\");\r\n else if (startDate !== undefined)\r\n url_ += \"StartDate=\" + encodeURIComponent(startDate ? \"\" + startDate.toString() : \"\") + \"&\";\r\n if (endDate === null)\r\n throw new Error(\"The parameter 'endDate' cannot be null.\");\r\n else if (endDate !== undefined)\r\n url_ += \"EndDate=\" + encodeURIComponent(endDate ? \"\" + endDate.toString() : \"\") + \"&\";\r\n if (userName === null)\r\n throw new Error(\"The parameter 'userName' cannot be null.\");\r\n else if (userName !== undefined)\r\n url_ += \"UserName=\" + encodeURIComponent(\"\" + userName) + \"&\";\r\n if (entityTypeFullName === null)\r\n throw new Error(\"The parameter 'entityTypeFullName' cannot be null.\");\r\n else if (entityTypeFullName !== undefined)\r\n url_ += \"EntityTypeFullName=\" + encodeURIComponent(\"\" + entityTypeFullName) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEntityChanges(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEntityChanges(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEntityChanges(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = EntityChangeListDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param entityTypeFullName (optional) \r\n * @param entityId (optional) \r\n * @param sorting (optional) \r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @return Success\r\n */\r\n getEntityTypeChanges(entityTypeFullName: string | undefined, entityId: string | undefined, sorting: string | undefined, maxResultCount: number | undefined, skipCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/AuditLog/GetEntityTypeChanges?\";\r\n if (entityTypeFullName === null)\r\n throw new Error(\"The parameter 'entityTypeFullName' cannot be null.\");\r\n else if (entityTypeFullName !== undefined)\r\n url_ += \"EntityTypeFullName=\" + encodeURIComponent(\"\" + entityTypeFullName) + \"&\";\r\n if (entityId === null)\r\n throw new Error(\"The parameter 'entityId' cannot be null.\");\r\n else if (entityId !== undefined)\r\n url_ += \"EntityId=\" + encodeURIComponent(\"\" + entityId) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEntityTypeChanges(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEntityTypeChanges(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEntityTypeChanges(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = EntityChangeListDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param startDate (optional) \r\n * @param endDate (optional) \r\n * @param userName (optional) \r\n * @param entityTypeFullName (optional) \r\n * @param sorting (optional) \r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @return Success\r\n */\r\n getEntityChangesToExcel(startDate: DateTime | undefined, endDate: DateTime | undefined, userName: string | undefined, entityTypeFullName: string | undefined, sorting: string | undefined, maxResultCount: number | undefined, skipCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/AuditLog/GetEntityChangesToExcel?\";\r\n if (startDate === null)\r\n throw new Error(\"The parameter 'startDate' cannot be null.\");\r\n else if (startDate !== undefined)\r\n url_ += \"StartDate=\" + encodeURIComponent(startDate ? \"\" + startDate.toString() : \"\") + \"&\";\r\n if (endDate === null)\r\n throw new Error(\"The parameter 'endDate' cannot be null.\");\r\n else if (endDate !== undefined)\r\n url_ += \"EndDate=\" + encodeURIComponent(endDate ? \"\" + endDate.toString() : \"\") + \"&\";\r\n if (userName === null)\r\n throw new Error(\"The parameter 'userName' cannot be null.\");\r\n else if (userName !== undefined)\r\n url_ += \"UserName=\" + encodeURIComponent(\"\" + userName) + \"&\";\r\n if (entityTypeFullName === null)\r\n throw new Error(\"The parameter 'entityTypeFullName' cannot be null.\");\r\n else if (entityTypeFullName !== undefined)\r\n url_ += \"EntityTypeFullName=\" + encodeURIComponent(\"\" + entityTypeFullName) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEntityChangesToExcel(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEntityChangesToExcel(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEntityChangesToExcel(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FileDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param entityChangeId (optional) \r\n * @return Success\r\n */\r\n getEntityPropertyChanges(entityChangeId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/AuditLog/GetEntityPropertyChanges?\";\r\n if (entityChangeId === null)\r\n throw new Error(\"The parameter 'entityChangeId' cannot be null.\");\r\n else if (entityChangeId !== undefined)\r\n url_ += \"entityChangeId=\" + encodeURIComponent(\"\" + entityChangeId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEntityPropertyChanges(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEntityPropertyChanges(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEntityPropertyChanges(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(EntityPropertyChangeDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class CachingServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllCaches(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Caching/GetAllCaches\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllCaches(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllCaches(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllCaches(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CacheDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n clearCache(body: StringEntityDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Caching/ClearCache\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processClearCache(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processClearCache(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processClearCache(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n clearAllCaches(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Caching/ClearAllCaches\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processClearAllCaches(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processClearAllCaches(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processClearAllCaches(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class ChatServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getRegionName(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Chat/GetRegionName\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetRegionName(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetRegionName(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetRegionName(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = RegionEndpoint.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getUserChatFriendsWithSettings(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Chat/GetUserChatFriendsWithSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetUserChatFriendsWithSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetUserChatFriendsWithSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetUserChatFriendsWithSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetUserChatFriendsWithSettingsOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param tenantId (optional) \r\n * @param userId (optional) \r\n * @param minMessageId (optional) \r\n * @return Success\r\n */\r\n getUserChatMessages(tenantId: number | undefined, userId: number | undefined, minMessageId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Chat/GetUserChatMessages?\";\r\n if (tenantId === null)\r\n throw new Error(\"The parameter 'tenantId' cannot be null.\");\r\n else if (tenantId !== undefined)\r\n url_ += \"TenantId=\" + encodeURIComponent(\"\" + tenantId) + \"&\";\r\n if (userId === null)\r\n throw new Error(\"The parameter 'userId' cannot be null.\");\r\n else if (userId !== undefined)\r\n url_ += \"UserId=\" + encodeURIComponent(\"\" + userId) + \"&\";\r\n if (minMessageId === null)\r\n throw new Error(\"The parameter 'minMessageId' cannot be null.\");\r\n else if (minMessageId !== undefined)\r\n url_ += \"MinMessageId=\" + encodeURIComponent(\"\" + minMessageId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetUserChatMessages(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetUserChatMessages(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetUserChatMessages(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ChatMessageDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n markAllUnreadMessagesOfUserAsRead(body: MarkAllUnreadMessagesOfUserAsReadInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Chat/MarkAllUnreadMessagesOfUserAsRead\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processMarkAllUnreadMessagesOfUserAsRead(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processMarkAllUnreadMessagesOfUserAsRead(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processMarkAllUnreadMessagesOfUserAsRead(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class CommonLookupServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param onlyFreeItems (optional) \r\n * @return Success\r\n */\r\n getEditionsForCombobox(onlyFreeItems: boolean | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CommonLookup/GetEditionsForCombobox?\";\r\n if (onlyFreeItems === null)\r\n throw new Error(\"The parameter 'onlyFreeItems' cannot be null.\");\r\n else if (onlyFreeItems !== undefined)\r\n url_ += \"onlyFreeItems=\" + encodeURIComponent(\"\" + onlyFreeItems) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEditionsForCombobox(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEditionsForCombobox(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEditionsForCombobox(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SubscribableEditionComboboxItemDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n findUsers(body: FindUsersInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CommonLookup/FindUsers\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processFindUsers(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processFindUsers(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processFindUsers(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = NameValueDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getDefaultEditionName(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CommonLookup/GetDefaultEditionName\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetDefaultEditionName(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetDefaultEditionName(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetDefaultEditionName(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetDefaultEditionNameOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class CustomAudioForEpisodesServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param episodeId (optional) \r\n * @return Success\r\n */\r\n getCustomAudioForSchool(episodeId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CustomAudioForEpisodes/GetCustomAudioForSchool?\";\r\n if (episodeId === null)\r\n throw new Error(\"The parameter 'episodeId' cannot be null.\");\r\n else if (episodeId !== undefined)\r\n url_ += \"EpisodeId=\" + encodeURIComponent(\"\" + episodeId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetCustomAudioForSchool(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetCustomAudioForSchool(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetCustomAudioForSchool(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CustomAudioForEpisodeForSchoolOutputDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param episodeNameFilter (optional) \r\n * @param tenantTitleFilter (optional) \r\n * @param sorting (optional) \r\n * @param skipCount (optional) \r\n * @param maxResultCount (optional) \r\n * @return Success\r\n */\r\n getAll(filter: string | undefined, episodeNameFilter: string | undefined, tenantTitleFilter: string | undefined, sorting: string | undefined, skipCount: number | undefined, maxResultCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CustomAudioForEpisodes/GetAll?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (episodeNameFilter === null)\r\n throw new Error(\"The parameter 'episodeNameFilter' cannot be null.\");\r\n else if (episodeNameFilter !== undefined)\r\n url_ += \"EpisodeNameFilter=\" + encodeURIComponent(\"\" + episodeNameFilter) + \"&\";\r\n if (tenantTitleFilter === null)\r\n throw new Error(\"The parameter 'tenantTitleFilter' cannot be null.\");\r\n else if (tenantTitleFilter !== undefined)\r\n url_ += \"TenantTitleFilter=\" + encodeURIComponent(\"\" + tenantTitleFilter) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAll(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAll(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAll(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetCustomAudioForEpisodeForViewDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getCustomAudioForEpisodeForView(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CustomAudioForEpisodes/GetCustomAudioForEpisodeForView?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetCustomAudioForEpisodeForView(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetCustomAudioForEpisodeForView(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetCustomAudioForEpisodeForView(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetCustomAudioForEpisodeForViewDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getCustomAudioForEpisodeForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CustomAudioForEpisodes/GetCustomAudioForEpisodeForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetCustomAudioForEpisodeForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetCustomAudioForEpisodeForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetCustomAudioForEpisodeForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetCustomAudioForEpisodeForEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createOrEdit(body: CreateOrEditCustomAudioForEpisodeDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CustomAudioForEpisodes/CreateOrEdit\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateOrEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateOrEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateOrEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n delete(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CustomAudioForEpisodes/Delete?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelete(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelete(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelete(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param episodeNameFilter (optional) \r\n * @param tenantTitleFilter (optional) \r\n * @return Success\r\n */\r\n getCustomAudioForEpisodesToExcel(filter: string | undefined, episodeNameFilter: string | undefined, tenantTitleFilter: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CustomAudioForEpisodes/GetCustomAudioForEpisodesToExcel?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (episodeNameFilter === null)\r\n throw new Error(\"The parameter 'episodeNameFilter' cannot be null.\");\r\n else if (episodeNameFilter !== undefined)\r\n url_ += \"EpisodeNameFilter=\" + encodeURIComponent(\"\" + episodeNameFilter) + \"&\";\r\n if (tenantTitleFilter === null)\r\n throw new Error(\"The parameter 'tenantTitleFilter' cannot be null.\");\r\n else if (tenantTitleFilter !== undefined)\r\n url_ += \"TenantTitleFilter=\" + encodeURIComponent(\"\" + tenantTitleFilter) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetCustomAudioForEpisodesToExcel(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetCustomAudioForEpisodesToExcel(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetCustomAudioForEpisodesToExcel(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FileDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllEpisodeForTableDropdown(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CustomAudioForEpisodes/GetAllEpisodeForTableDropdown\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllEpisodeForTableDropdown(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllEpisodeForTableDropdown(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllEpisodeForTableDropdown(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(CustomAudioForEpisodeEpisodeLookupTableDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllTenantForTableDropdown(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CustomAudioForEpisodes/GetAllTenantForTableDropdown\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllTenantForTableDropdown(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllTenantForTableDropdown(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllTenantForTableDropdown(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(CustomAudioForEpisodeTenantLookupTableDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n removeCustomAudioContentFile(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/CustomAudioForEpisodes/RemoveCustomAudioContentFile?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRemoveCustomAudioContentFile(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRemoveCustomAudioContentFile(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRemoveCustomAudioContentFile(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class DashboardCustomizationServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param dashboardName (optional) \r\n * @param application (optional) \r\n * @return Success\r\n */\r\n getUserDashboard(dashboardName: string | undefined, application: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DashboardCustomization/GetUserDashboard?\";\r\n if (dashboardName === null)\r\n throw new Error(\"The parameter 'dashboardName' cannot be null.\");\r\n else if (dashboardName !== undefined)\r\n url_ += \"DashboardName=\" + encodeURIComponent(\"\" + dashboardName) + \"&\";\r\n if (application === null)\r\n throw new Error(\"The parameter 'application' cannot be null.\");\r\n else if (application !== undefined)\r\n url_ += \"Application=\" + encodeURIComponent(\"\" + application) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetUserDashboard(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetUserDashboard(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetUserDashboard(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = Dashboard.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n savePage(body: SavePageInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DashboardCustomization/SavePage\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSavePage(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSavePage(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSavePage(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n renamePage(body: RenamePageInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DashboardCustomization/RenamePage\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRenamePage(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRenamePage(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRenamePage(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n addNewPage(body: AddNewPageInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DashboardCustomization/AddNewPage\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processAddNewPage(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processAddNewPage(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processAddNewPage(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = AddNewPageOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @param dashboardName (optional) \r\n * @param application (optional) \r\n * @return Success\r\n */\r\n deletePage(id: string | undefined, dashboardName: string | undefined, application: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DashboardCustomization/DeletePage?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n if (dashboardName === null)\r\n throw new Error(\"The parameter 'dashboardName' cannot be null.\");\r\n else if (dashboardName !== undefined)\r\n url_ += \"DashboardName=\" + encodeURIComponent(\"\" + dashboardName) + \"&\";\r\n if (application === null)\r\n throw new Error(\"The parameter 'application' cannot be null.\");\r\n else if (application !== undefined)\r\n url_ += \"Application=\" + encodeURIComponent(\"\" + application) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDeletePage(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDeletePage(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDeletePage(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n addWidget(body: AddWidgetInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DashboardCustomization/AddWidget\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processAddWidget(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processAddWidget(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processAddWidget(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = Widget.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param dashboardName (optional) \r\n * @param application (optional) \r\n * @return Success\r\n */\r\n getDashboardDefinition(dashboardName: string | undefined, application: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DashboardCustomization/GetDashboardDefinition?\";\r\n if (dashboardName === null)\r\n throw new Error(\"The parameter 'dashboardName' cannot be null.\");\r\n else if (dashboardName !== undefined)\r\n url_ += \"DashboardName=\" + encodeURIComponent(\"\" + dashboardName) + \"&\";\r\n if (application === null)\r\n throw new Error(\"The parameter 'application' cannot be null.\");\r\n else if (application !== undefined)\r\n url_ += \"Application=\" + encodeURIComponent(\"\" + application) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetDashboardDefinition(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetDashboardDefinition(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetDashboardDefinition(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DashboardOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param dashboardName (optional) \r\n * @param application (optional) \r\n * @return Success\r\n */\r\n getAllWidgetDefinitions(dashboardName: string | undefined, application: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DashboardCustomization/GetAllWidgetDefinitions?\";\r\n if (dashboardName === null)\r\n throw new Error(\"The parameter 'dashboardName' cannot be null.\");\r\n else if (dashboardName !== undefined)\r\n url_ += \"DashboardName=\" + encodeURIComponent(\"\" + dashboardName) + \"&\";\r\n if (application === null)\r\n throw new Error(\"The parameter 'application' cannot be null.\");\r\n else if (application !== undefined)\r\n url_ += \"Application=\" + encodeURIComponent(\"\" + application) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllWidgetDefinitions(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllWidgetDefinitions(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllWidgetDefinitions(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(WidgetOutput.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param dashboardName (optional) \r\n * @param application (optional) \r\n * @param pageId (optional) \r\n * @return Success\r\n */\r\n getAllAvailableWidgetDefinitionsForPage(dashboardName: string | undefined, application: string | undefined, pageId: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DashboardCustomization/GetAllAvailableWidgetDefinitionsForPage?\";\r\n if (dashboardName === null)\r\n throw new Error(\"The parameter 'dashboardName' cannot be null.\");\r\n else if (dashboardName !== undefined)\r\n url_ += \"DashboardName=\" + encodeURIComponent(\"\" + dashboardName) + \"&\";\r\n if (application === null)\r\n throw new Error(\"The parameter 'application' cannot be null.\");\r\n else if (application !== undefined)\r\n url_ += \"Application=\" + encodeURIComponent(\"\" + application) + \"&\";\r\n if (pageId === null)\r\n throw new Error(\"The parameter 'pageId' cannot be null.\");\r\n else if (pageId !== undefined)\r\n url_ += \"PageId=\" + encodeURIComponent(\"\" + pageId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllAvailableWidgetDefinitionsForPage(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllAvailableWidgetDefinitionsForPage(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllAvailableWidgetDefinitionsForPage(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(WidgetOutput.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param application (optional) \r\n * @param dashboardName (optional) \r\n * @return Success\r\n */\r\n getSettingName(application: string | undefined, dashboardName: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DashboardCustomization/GetSettingName?\";\r\n if (application === null)\r\n throw new Error(\"The parameter 'application' cannot be null.\");\r\n else if (application !== undefined)\r\n url_ += \"application=\" + encodeURIComponent(\"\" + application) + \"&\";\r\n if (dashboardName === null)\r\n throw new Error(\"The parameter 'dashboardName' cannot be null.\");\r\n else if (dashboardName !== undefined)\r\n url_ += \"dashboardName=\" + encodeURIComponent(\"\" + dashboardName) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetSettingName(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetSettingName(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetSettingName(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n \r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class DemoUiComponentsServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param date (optional) \r\n * @return Success\r\n */\r\n sendAndGetDate(date: DateTime | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DemoUiComponents/SendAndGetDate?\";\r\n if (date === null)\r\n throw new Error(\"The parameter 'date' cannot be null.\");\r\n else if (date !== undefined)\r\n url_ += \"date=\" + encodeURIComponent(date ? \"\" + date.toString() : \"\") + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSendAndGetDate(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSendAndGetDate(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSendAndGetDate(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DateFieldOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param date (optional) \r\n * @return Success\r\n */\r\n sendAndGetDateTime(date: DateTime | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DemoUiComponents/SendAndGetDateTime?\";\r\n if (date === null)\r\n throw new Error(\"The parameter 'date' cannot be null.\");\r\n else if (date !== undefined)\r\n url_ += \"date=\" + encodeURIComponent(date ? \"\" + date.toString() : \"\") + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSendAndGetDateTime(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSendAndGetDateTime(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSendAndGetDateTime(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DateFieldOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param startDate (optional) \r\n * @param endDate (optional) \r\n * @return Success\r\n */\r\n sendAndGetDateRange(startDate: DateTime | undefined, endDate: DateTime | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DemoUiComponents/SendAndGetDateRange?\";\r\n if (startDate === null)\r\n throw new Error(\"The parameter 'startDate' cannot be null.\");\r\n else if (startDate !== undefined)\r\n url_ += \"startDate=\" + encodeURIComponent(startDate ? \"\" + startDate.toString() : \"\") + \"&\";\r\n if (endDate === null)\r\n throw new Error(\"The parameter 'endDate' cannot be null.\");\r\n else if (endDate !== undefined)\r\n url_ += \"endDate=\" + encodeURIComponent(endDate ? \"\" + endDate.toString() : \"\") + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSendAndGetDateRange(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSendAndGetDateRange(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSendAndGetDateRange(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DateRangeFieldOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n sendAndGetDateWithText(body: SendAndGetDateWithTextInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DemoUiComponents/SendAndGetDateWithText\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSendAndGetDateWithText(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSendAndGetDateWithText(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSendAndGetDateWithText(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DateWithTextFieldOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param searchTerm (optional) \r\n * @return Success\r\n */\r\n getCountries(searchTerm: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DemoUiComponents/GetCountries?\";\r\n if (searchTerm === null)\r\n throw new Error(\"The parameter 'searchTerm' cannot be null.\");\r\n else if (searchTerm !== undefined)\r\n url_ += \"searchTerm=\" + encodeURIComponent(\"\" + searchTerm) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetCountries(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetCountries(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetCountries(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(StringNameValue.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n sendAndGetSelectedCountries(body: StringNameValue[] | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DemoUiComponents/SendAndGetSelectedCountries\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSendAndGetSelectedCountries(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSendAndGetSelectedCountries(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSendAndGetSelectedCountries(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(StringNameValue.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param input (optional) \r\n * @return Success\r\n */\r\n sendAndGetValue(input: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DemoUiComponents/SendAndGetValue?\";\r\n if (input === null)\r\n throw new Error(\"The parameter 'input' cannot be null.\");\r\n else if (input !== undefined)\r\n url_ += \"input=\" + encodeURIComponent(\"\" + input) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSendAndGetValue(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSendAndGetValue(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSendAndGetValue(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = StringOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class DifficultyLevelsServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param nameFilter (optional) \r\n * @param colorFilter (optional) \r\n * @param sorting (optional) \r\n * @param skipCount (optional) \r\n * @param maxResultCount (optional) \r\n * @return Success\r\n */\r\n getAll(filter: string | undefined, nameFilter: string | undefined, colorFilter: string | undefined, sorting: string | undefined, skipCount: number | undefined, maxResultCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DifficultyLevels/GetAll?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (nameFilter === null)\r\n throw new Error(\"The parameter 'nameFilter' cannot be null.\");\r\n else if (nameFilter !== undefined)\r\n url_ += \"NameFilter=\" + encodeURIComponent(\"\" + nameFilter) + \"&\";\r\n if (colorFilter === null)\r\n throw new Error(\"The parameter 'colorFilter' cannot be null.\");\r\n else if (colorFilter !== undefined)\r\n url_ += \"ColorFilter=\" + encodeURIComponent(\"\" + colorFilter) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAll(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAll(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAll(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetDifficultyLevelForViewDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getDifficultyLevelForView(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DifficultyLevels/GetDifficultyLevelForView?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetDifficultyLevelForView(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetDifficultyLevelForView(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetDifficultyLevelForView(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetDifficultyLevelForViewDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getDifficultyLevelForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DifficultyLevels/GetDifficultyLevelForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetDifficultyLevelForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetDifficultyLevelForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetDifficultyLevelForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetDifficultyLevelForEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createOrEdit(body: CreateOrEditDifficultyLevelDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DifficultyLevels/CreateOrEdit\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateOrEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateOrEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateOrEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n delete(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DifficultyLevels/Delete?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelete(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelete(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelete(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param nameFilter (optional) \r\n * @param colorFilter (optional) \r\n * @return Success\r\n */\r\n getDifficultyLevelsToExcel(filter: string | undefined, nameFilter: string | undefined, colorFilter: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DifficultyLevels/GetDifficultyLevelsToExcel?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (nameFilter === null)\r\n throw new Error(\"The parameter 'nameFilter' cannot be null.\");\r\n else if (nameFilter !== undefined)\r\n url_ += \"NameFilter=\" + encodeURIComponent(\"\" + nameFilter) + \"&\";\r\n if (colorFilter === null)\r\n throw new Error(\"The parameter 'colorFilter' cannot be null.\");\r\n else if (colorFilter !== undefined)\r\n url_ += \"ColorFilter=\" + encodeURIComponent(\"\" + colorFilter) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetDifficultyLevelsToExcel(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetDifficultyLevelsToExcel(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetDifficultyLevelsToExcel(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FileDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class DynamicEntityPropertyServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n get(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityProperty/Get?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGet(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGet(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGet(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DynamicEntityPropertyDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param entityFullName (optional) \r\n * @return Success\r\n */\r\n getAllPropertiesOfAnEntity(entityFullName: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityProperty/GetAllPropertiesOfAnEntity?\";\r\n if (entityFullName === null)\r\n throw new Error(\"The parameter 'entityFullName' cannot be null.\");\r\n else if (entityFullName !== undefined)\r\n url_ += \"EntityFullName=\" + encodeURIComponent(\"\" + entityFullName) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllPropertiesOfAnEntity(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllPropertiesOfAnEntity(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllPropertiesOfAnEntity(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DynamicEntityPropertyDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAll(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityProperty/GetAll\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAll(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAll(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAll(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DynamicEntityPropertyDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n add(body: DynamicEntityPropertyDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityProperty/Add\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processAdd(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processAdd(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processAdd(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n update(body: DynamicEntityPropertyDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityProperty/Update\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdate(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdate(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdate(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n delete(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityProperty/Delete?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelete(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelete(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelete(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllEntitiesHasDynamicProperty(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityProperty/GetAllEntitiesHasDynamicProperty\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllEntitiesHasDynamicProperty(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllEntitiesHasDynamicProperty(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllEntitiesHasDynamicProperty(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetAllEntitiesHasDynamicPropertyOutputListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class DynamicEntityPropertyDefinitionServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllAllowedInputTypeNames(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityPropertyDefinition/GetAllAllowedInputTypeNames\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllAllowedInputTypeNames(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllAllowedInputTypeNames(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllAllowedInputTypeNames(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(item);\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllEntities(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityPropertyDefinition/GetAllEntities\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllEntities(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllEntities(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllEntities(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(item);\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class DynamicEntityPropertyValueServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n get(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityPropertyValue/Get?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGet(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGet(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGet(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DynamicEntityPropertyValueDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param entityId (optional) \r\n * @param propertyId (optional) \r\n * @return Success\r\n */\r\n getAll(entityId: string | undefined, propertyId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityPropertyValue/GetAll?\";\r\n if (entityId === null)\r\n throw new Error(\"The parameter 'entityId' cannot be null.\");\r\n else if (entityId !== undefined)\r\n url_ += \"EntityId=\" + encodeURIComponent(\"\" + entityId) + \"&\";\r\n if (propertyId === null)\r\n throw new Error(\"The parameter 'propertyId' cannot be null.\");\r\n else if (propertyId !== undefined)\r\n url_ += \"PropertyId=\" + encodeURIComponent(\"\" + propertyId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAll(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAll(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAll(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DynamicEntityPropertyValueDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n add(body: DynamicEntityPropertyValueDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityPropertyValue/Add\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processAdd(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processAdd(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processAdd(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n update(body: DynamicEntityPropertyValueDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityPropertyValue/Update\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdate(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdate(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdate(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n delete(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityPropertyValue/Delete?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelete(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelete(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelete(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllDynamicEntityPropertyValues(entityFullName: string, entityId: string): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityPropertyValue/GetAllDynamicEntityPropertyValues?\";\r\n if (entityFullName === undefined || entityFullName === null)\r\n throw new Error(\"The parameter 'entityFullName' must be defined and cannot be null.\");\r\n else\r\n url_ += \"EntityFullName=\" + encodeURIComponent(\"\" + entityFullName) + \"&\";\r\n if (entityId === undefined || entityId === null)\r\n throw new Error(\"The parameter 'entityId' must be defined and cannot be null.\");\r\n else\r\n url_ += \"EntityId=\" + encodeURIComponent(\"\" + entityId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllDynamicEntityPropertyValues(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllDynamicEntityPropertyValues(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllDynamicEntityPropertyValues(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetAllDynamicEntityPropertyValuesOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n insertOrUpdateAllValues(body: InsertOrUpdateAllValuesInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityPropertyValue/InsertOrUpdateAllValues\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processInsertOrUpdateAllValues(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processInsertOrUpdateAllValues(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processInsertOrUpdateAllValues(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n cleanValues(body: CleanValuesInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicEntityPropertyValue/CleanValues\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCleanValues(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCleanValues(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCleanValues(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class DynamicPropertyServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n get(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicProperty/Get?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGet(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGet(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGet(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DynamicPropertyDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAll(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicProperty/GetAll\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAll(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAll(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAll(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DynamicPropertyDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n add(body: DynamicPropertyDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicProperty/Add\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processAdd(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processAdd(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processAdd(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n update(body: DynamicPropertyDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicProperty/Update\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdate(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdate(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdate(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n delete(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicProperty/Delete?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelete(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelete(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelete(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param name (optional) \r\n * @return Success\r\n */\r\n findAllowedInputType(name: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicProperty/FindAllowedInputType?\";\r\n if (name === null)\r\n throw new Error(\"The parameter 'name' cannot be null.\");\r\n else if (name !== undefined)\r\n url_ += \"name=\" + encodeURIComponent(\"\" + name) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processFindAllowedInputType(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processFindAllowedInputType(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processFindAllowedInputType(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = IInputType.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class DynamicPropertyValueServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n get(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicPropertyValue/Get?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGet(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGet(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGet(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DynamicPropertyValueDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getAllValuesOfDynamicProperty(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicPropertyValue/GetAllValuesOfDynamicProperty?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllValuesOfDynamicProperty(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllValuesOfDynamicProperty(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllValuesOfDynamicProperty(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = DynamicPropertyValueDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n add(body: DynamicPropertyValueDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicPropertyValue/Add\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processAdd(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processAdd(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processAdd(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n update(body: DynamicPropertyValueDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicPropertyValue/Update\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdate(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdate(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdate(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n delete(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/DynamicPropertyValue/Delete?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelete(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelete(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelete(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class EditionServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getEditions(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Edition/GetEditions\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEditions(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEditions(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEditions(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = EditionListDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getEditionForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Edition/GetEditionForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEditionForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEditionForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEditionForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEditionEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createEdition(body: CreateEditionDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Edition/CreateEdition\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateEdition(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateEdition(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateEdition(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateEdition(body: UpdateEditionDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Edition/UpdateEdition\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateEdition(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateEdition(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateEdition(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n deleteEdition(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Edition/DeleteEdition?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDeleteEdition(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDeleteEdition(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDeleteEdition(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n moveTenantsToAnotherEdition(body: MoveTenantsToAnotherEditionDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Edition/MoveTenantsToAnotherEdition\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processMoveTenantsToAnotherEdition(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processMoveTenantsToAnotherEdition(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processMoveTenantsToAnotherEdition(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param selectedEditionId (optional) \r\n * @param addAllItem (optional) \r\n * @param onlyFreeItems (optional) \r\n * @return Success\r\n */\r\n getEditionComboboxItems(selectedEditionId: number | undefined, addAllItem: boolean | undefined, onlyFreeItems: boolean | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Edition/GetEditionComboboxItems?\";\r\n if (selectedEditionId === null)\r\n throw new Error(\"The parameter 'selectedEditionId' cannot be null.\");\r\n else if (selectedEditionId !== undefined)\r\n url_ += \"selectedEditionId=\" + encodeURIComponent(\"\" + selectedEditionId) + \"&\";\r\n if (addAllItem === null)\r\n throw new Error(\"The parameter 'addAllItem' cannot be null.\");\r\n else if (addAllItem !== undefined)\r\n url_ += \"addAllItem=\" + encodeURIComponent(\"\" + addAllItem) + \"&\";\r\n if (onlyFreeItems === null)\r\n throw new Error(\"The parameter 'onlyFreeItems' cannot be null.\");\r\n else if (onlyFreeItems !== undefined)\r\n url_ += \"onlyFreeItems=\" + encodeURIComponent(\"\" + onlyFreeItems) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEditionComboboxItems(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEditionComboboxItems(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEditionComboboxItems(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(SubscribableEditionComboboxItemDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param editionId (optional) \r\n * @return Success\r\n */\r\n getTenantCount(editionId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Edition/GetTenantCount?\";\r\n if (editionId === null)\r\n throw new Error(\"The parameter 'editionId' cannot be null.\");\r\n else if (editionId !== undefined)\r\n url_ += \"editionId=\" + encodeURIComponent(\"\" + editionId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetTenantCount(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetTenantCount(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetTenantCount(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n \r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class EpisodeOvalsServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param episodeId (optional) \r\n * @return Success\r\n */\r\n deleteEpisodeOlvalsOfEpisode(episodeId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/DeleteEpisodeOlvalsOfEpisode?\";\r\n if (episodeId === null)\r\n throw new Error(\"The parameter 'episodeId' cannot be null.\");\r\n else if (episodeId !== undefined)\r\n url_ += \"episodeId=\" + encodeURIComponent(\"\" + episodeId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDeleteEpisodeOlvalsOfEpisode(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDeleteEpisodeOlvalsOfEpisode(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDeleteEpisodeOlvalsOfEpisode(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createOrEditForMultiple(body: CreateOrEditForMultipleDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/CreateOrEditForMultiple\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateOrEditForMultiple(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateOrEditForMultiple(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateOrEditForMultiple(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getEpisodeOvalFiles(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/GetEpisodeOvalFiles?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodeOvalFiles(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodeOvalFiles(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodeOvalFiles(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = OvalFilesDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param episodeId (optional) \r\n * @return Success\r\n */\r\n getAllForEpisodeOval(episodeId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/GetAllForEpisodeOval?\";\r\n if (episodeId === null)\r\n throw new Error(\"The parameter 'episodeId' cannot be null.\");\r\n else if (episodeId !== undefined)\r\n url_ += \"EpisodeId=\" + encodeURIComponent(\"\" + episodeId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllForEpisodeOval(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllForEpisodeOval(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllForEpisodeOval(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(EpisodeOvalDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param episodeId (optional) \r\n * @return Success\r\n */\r\n getAllDistinctEpisodeOvals(episodeId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/GetAllDistinctEpisodeOvals?\";\r\n if (episodeId === null)\r\n throw new Error(\"The parameter 'episodeId' cannot be null.\");\r\n else if (episodeId !== undefined)\r\n url_ += \"EpisodeId=\" + encodeURIComponent(\"\" + episodeId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllDistinctEpisodeOvals(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllDistinctEpisodeOvals(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllDistinctEpisodeOvals(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(LearnMoreOvalsDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param ovalTitleFilter (optional) \r\n * @param episodeNameFilter (optional) \r\n * @param sorting (optional) \r\n * @param skipCount (optional) \r\n * @param maxResultCount (optional) \r\n * @return Success\r\n */\r\n getAll(filter: string | undefined, ovalTitleFilter: string | undefined, episodeNameFilter: string | undefined, sorting: string | undefined, skipCount: number | undefined, maxResultCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/GetAll?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (ovalTitleFilter === null)\r\n throw new Error(\"The parameter 'ovalTitleFilter' cannot be null.\");\r\n else if (ovalTitleFilter !== undefined)\r\n url_ += \"OvalTitleFilter=\" + encodeURIComponent(\"\" + ovalTitleFilter) + \"&\";\r\n if (episodeNameFilter === null)\r\n throw new Error(\"The parameter 'episodeNameFilter' cannot be null.\");\r\n else if (episodeNameFilter !== undefined)\r\n url_ += \"EpisodeNameFilter=\" + encodeURIComponent(\"\" + episodeNameFilter) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAll(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAll(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAll(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEpisodeOvalForViewDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getEpisodeOvalForView(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/GetEpisodeOvalForView?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodeOvalForView(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodeOvalForView(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodeOvalForView(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEpisodeOvalForViewDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getEpisodeOvalForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/GetEpisodeOvalForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodeOvalForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodeOvalForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodeOvalForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEpisodeOvalForEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createOrEdit(body: CreateOrEditEpisodeOvalDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/CreateOrEdit\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateOrEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateOrEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateOrEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n delete(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/Delete?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelete(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelete(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelete(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param ovalTitleFilter (optional) \r\n * @param episodeNameFilter (optional) \r\n * @return Success\r\n */\r\n getEpisodeOvalsToExcel(filter: string | undefined, ovalTitleFilter: string | undefined, episodeNameFilter: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/GetEpisodeOvalsToExcel?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (ovalTitleFilter === null)\r\n throw new Error(\"The parameter 'ovalTitleFilter' cannot be null.\");\r\n else if (ovalTitleFilter !== undefined)\r\n url_ += \"OvalTitleFilter=\" + encodeURIComponent(\"\" + ovalTitleFilter) + \"&\";\r\n if (episodeNameFilter === null)\r\n throw new Error(\"The parameter 'episodeNameFilter' cannot be null.\");\r\n else if (episodeNameFilter !== undefined)\r\n url_ += \"EpisodeNameFilter=\" + encodeURIComponent(\"\" + episodeNameFilter) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodeOvalsToExcel(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodeOvalsToExcel(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodeOvalsToExcel(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FileDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllOvalForTableDropdown(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/GetAllOvalForTableDropdown\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllOvalForTableDropdown(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllOvalForTableDropdown(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllOvalForTableDropdown(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(EpisodeOvalOvalLookupTableDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllEpisodeForTableDropdown(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/GetAllEpisodeForTableDropdown\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllEpisodeForTableDropdown(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllEpisodeForTableDropdown(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllEpisodeForTableDropdown(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(EpisodeOvalEpisodeLookupTableDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param fileId (optional) \r\n * @return Success\r\n */\r\n getBinaryFileName(fileId: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/GetBinaryFileName?\";\r\n if (fileId === null)\r\n throw new Error(\"The parameter 'fileId' cannot be null.\");\r\n else if (fileId !== undefined)\r\n url_ += \"fileId=\" + encodeURIComponent(\"\" + fileId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetBinaryFileName(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetBinaryFileName(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetBinaryFileName(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n \r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n removeFileFile(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeOvals/RemoveFileFile?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRemoveFileFile(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRemoveFileFile(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRemoveFileFile(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class EpisodesServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllEpisodeVideoForTableDropdown(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/GetAllEpisodeVideoForTableDropdown\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllEpisodeVideoForTableDropdown(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllEpisodeVideoForTableDropdown(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllEpisodeVideoForTableDropdown(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(EpisodeVideoLookupTableDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param episodeId (optional) \r\n * @return Success\r\n */\r\n getCurrentEpisodeStatus(episodeId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/GetCurrentEpisodeStatus?\";\r\n if (episodeId === null)\r\n throw new Error(\"The parameter 'episodeId' cannot be null.\");\r\n else if (episodeId !== undefined)\r\n url_ += \"episodeId=\" + encodeURIComponent(\"\" + episodeId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetCurrentEpisodeStatus(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetCurrentEpisodeStatus(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetCurrentEpisodeStatus(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = EpisodeStatusDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllEpisodes(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/GetAllEpisodes\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllEpisodes(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllEpisodes(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllEpisodes(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(EpisodeDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param nameFilter (optional) \r\n * @param descriptionFilter (optional) \r\n * @param titleFilter (optional) \r\n * @param googleFormUrlFilter (optional) \r\n * @param applicationLanguageNameFilter (optional) \r\n * @param sorting (optional) \r\n * @param skipCount (optional) \r\n * @param maxResultCount (optional) \r\n * @return Success\r\n */\r\n getAll(filter: string | undefined, nameFilter: string | undefined, descriptionFilter: string | undefined, titleFilter: string | undefined, googleFormUrlFilter: string | undefined, applicationLanguageNameFilter: string | undefined, sorting: string | undefined, skipCount: number | undefined, maxResultCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/GetAll?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (nameFilter === null)\r\n throw new Error(\"The parameter 'nameFilter' cannot be null.\");\r\n else if (nameFilter !== undefined)\r\n url_ += \"NameFilter=\" + encodeURIComponent(\"\" + nameFilter) + \"&\";\r\n if (descriptionFilter === null)\r\n throw new Error(\"The parameter 'descriptionFilter' cannot be null.\");\r\n else if (descriptionFilter !== undefined)\r\n url_ += \"DescriptionFilter=\" + encodeURIComponent(\"\" + descriptionFilter) + \"&\";\r\n if (titleFilter === null)\r\n throw new Error(\"The parameter 'titleFilter' cannot be null.\");\r\n else if (titleFilter !== undefined)\r\n url_ += \"TitleFilter=\" + encodeURIComponent(\"\" + titleFilter) + \"&\";\r\n if (googleFormUrlFilter === null)\r\n throw new Error(\"The parameter 'googleFormUrlFilter' cannot be null.\");\r\n else if (googleFormUrlFilter !== undefined)\r\n url_ += \"GoogleFormUrlFilter=\" + encodeURIComponent(\"\" + googleFormUrlFilter) + \"&\";\r\n if (applicationLanguageNameFilter === null)\r\n throw new Error(\"The parameter 'applicationLanguageNameFilter' cannot be null.\");\r\n else if (applicationLanguageNameFilter !== undefined)\r\n url_ += \"ApplicationLanguageNameFilter=\" + encodeURIComponent(\"\" + applicationLanguageNameFilter) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAll(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAll(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAll(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEpisodeForViewDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getEpisodeForView(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/GetEpisodeForView?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodeForView(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodeForView(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodeForView(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEpisodeForViewDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getEpisodeForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/GetEpisodeForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodeForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodeForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodeForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEpisodeForEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createEpisode(body: CreateOrEditEpisodeDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/CreateEpisode\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateEpisode(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateEpisode(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateEpisode(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CreateEpisodeOutputDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n editEpisode(body: CreateOrEditEpisodeDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/EditEpisode\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processEditEpisode(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processEditEpisode(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processEditEpisode(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n delete(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/Delete?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelete(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelete(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelete(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param nameFilter (optional) \r\n * @param descriptionFilter (optional) \r\n * @param titleFilter (optional) \r\n * @param googleFormUrlter (optional) \r\n * @param applicationLanguageNameFilter (optional) \r\n * @return Success\r\n */\r\n getEpisodesToExcel(filter: string | undefined, nameFilter: string | undefined, descriptionFilter: string | undefined, titleFilter: string | undefined, googleFormUrlter: string | undefined, applicationLanguageNameFilter: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/GetEpisodesToExcel?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (nameFilter === null)\r\n throw new Error(\"The parameter 'nameFilter' cannot be null.\");\r\n else if (nameFilter !== undefined)\r\n url_ += \"NameFilter=\" + encodeURIComponent(\"\" + nameFilter) + \"&\";\r\n if (descriptionFilter === null)\r\n throw new Error(\"The parameter 'descriptionFilter' cannot be null.\");\r\n else if (descriptionFilter !== undefined)\r\n url_ += \"DescriptionFilter=\" + encodeURIComponent(\"\" + descriptionFilter) + \"&\";\r\n if (titleFilter === null)\r\n throw new Error(\"The parameter 'titleFilter' cannot be null.\");\r\n else if (titleFilter !== undefined)\r\n url_ += \"TitleFilter=\" + encodeURIComponent(\"\" + titleFilter) + \"&\";\r\n if (googleFormUrlter === null)\r\n throw new Error(\"The parameter 'googleFormUrlter' cannot be null.\");\r\n else if (googleFormUrlter !== undefined)\r\n url_ += \"GoogleFormUrlter=\" + encodeURIComponent(\"\" + googleFormUrlter) + \"&\";\r\n if (applicationLanguageNameFilter === null)\r\n throw new Error(\"The parameter 'applicationLanguageNameFilter' cannot be null.\");\r\n else if (applicationLanguageNameFilter !== undefined)\r\n url_ += \"ApplicationLanguageNameFilter=\" + encodeURIComponent(\"\" + applicationLanguageNameFilter) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodesToExcel(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodesToExcel(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodesToExcel(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FileDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllApplicationLanguageForTableDropdown(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/GetAllApplicationLanguageForTableDropdown\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllApplicationLanguageForTableDropdown(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllApplicationLanguageForTableDropdown(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllApplicationLanguageForTableDropdown(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(EpisodeApplicationLanguageLookupTableDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n removeImageContentFile(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/RemoveImageContentFile?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRemoveImageContentFile(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRemoveImageContentFile(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRemoveImageContentFile(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n removeScriptContentFile(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/RemoveScriptContentFile?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRemoveScriptContentFile(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRemoveScriptContentFile(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRemoveScriptContentFile(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n removeVocabularyContentFile(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/RemoveVocabularyContentFile?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRemoveVocabularyContentFile(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRemoveVocabularyContentFile(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRemoveVocabularyContentFile(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n removeAudioContentFile(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Episodes/RemoveAudioContentFile?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRemoveAudioContentFile(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRemoveAudioContentFile(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRemoveAudioContentFile(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class EpisodeUsersServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param episodeId (optional) \r\n * @return Success\r\n */\r\n deleteEpisodeUsersOfEpisode(episodeId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/DeleteEpisodeUsersOfEpisode?\";\r\n if (episodeId === null)\r\n throw new Error(\"The parameter 'episodeId' cannot be null.\");\r\n else if (episodeId !== undefined)\r\n url_ += \"episodeId=\" + encodeURIComponent(\"\" + episodeId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDeleteEpisodeUsersOfEpisode(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDeleteEpisodeUsersOfEpisode(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDeleteEpisodeUsersOfEpisode(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getCurrentEpisodeUser(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/GetCurrentEpisodeUser?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetCurrentEpisodeUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetCurrentEpisodeUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetCurrentEpisodeUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = EpisodeUserDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllEpisodeUsers(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/GetAllEpisodeUsers\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllEpisodeUsers(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllEpisodeUsers(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllEpisodeUsers(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(EpisodeUserDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param hasFeedbackFilter (optional) \r\n * @param hasWatchedFilter (optional) \r\n * @param userNameFilter (optional) \r\n * @param episodeNameFilter (optional) \r\n * @param sorting (optional) \r\n * @param skipCount (optional) \r\n * @param maxResultCount (optional) \r\n * @return Success\r\n */\r\n getAll(filter: string | undefined, hasFeedbackFilter: number | undefined, hasWatchedFilter: number | undefined, userNameFilter: string | undefined, episodeNameFilter: string | undefined, sorting: string | undefined, skipCount: number | undefined, maxResultCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/GetAll?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (hasFeedbackFilter === null)\r\n throw new Error(\"The parameter 'hasFeedbackFilter' cannot be null.\");\r\n else if (hasFeedbackFilter !== undefined)\r\n url_ += \"HasFeedbackFilter=\" + encodeURIComponent(\"\" + hasFeedbackFilter) + \"&\";\r\n if (hasWatchedFilter === null)\r\n throw new Error(\"The parameter 'hasWatchedFilter' cannot be null.\");\r\n else if (hasWatchedFilter !== undefined)\r\n url_ += \"HasWatchedFilter=\" + encodeURIComponent(\"\" + hasWatchedFilter) + \"&\";\r\n if (userNameFilter === null)\r\n throw new Error(\"The parameter 'userNameFilter' cannot be null.\");\r\n else if (userNameFilter !== undefined)\r\n url_ += \"UserNameFilter=\" + encodeURIComponent(\"\" + userNameFilter) + \"&\";\r\n if (episodeNameFilter === null)\r\n throw new Error(\"The parameter 'episodeNameFilter' cannot be null.\");\r\n else if (episodeNameFilter !== undefined)\r\n url_ += \"EpisodeNameFilter=\" + encodeURIComponent(\"\" + episodeNameFilter) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAll(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAll(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAll(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEpisodeUserForViewDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getEpisodeUserForView(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/GetEpisodeUserForView?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodeUserForView(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodeUserForView(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodeUserForView(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEpisodeUserForViewDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getEpisodeUserForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/GetEpisodeUserForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodeUserForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodeUserForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodeUserForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEpisodeUserForEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n userSubmitedFeedback(body: UserSubmitedFeedbackDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/UserSubmitedFeedback\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUserSubmitedFeedback(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUserSubmitedFeedback(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUserSubmitedFeedback(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n userWatchedVideo(body: EntityDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/UserWatchedVideo\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUserWatchedVideo(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUserWatchedVideo(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUserWatchedVideo(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createOrEdit(body: CreateOrEditEpisodeUserDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/CreateOrEdit\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateOrEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateOrEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateOrEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n delete(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/Delete?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelete(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelete(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelete(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param hasFeedbackFilter (optional) \r\n * @param hasWatchedFilter (optional) \r\n * @param userNameFilter (optional) \r\n * @param episodeNameFilter (optional) \r\n * @return Success\r\n */\r\n getEpisodeUsersToExcel(filter: string | undefined, hasFeedbackFilter: number | undefined, hasWatchedFilter: number | undefined, userNameFilter: string | undefined, episodeNameFilter: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/GetEpisodeUsersToExcel?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (hasFeedbackFilter === null)\r\n throw new Error(\"The parameter 'hasFeedbackFilter' cannot be null.\");\r\n else if (hasFeedbackFilter !== undefined)\r\n url_ += \"HasFeedbackFilter=\" + encodeURIComponent(\"\" + hasFeedbackFilter) + \"&\";\r\n if (hasWatchedFilter === null)\r\n throw new Error(\"The parameter 'hasWatchedFilter' cannot be null.\");\r\n else if (hasWatchedFilter !== undefined)\r\n url_ += \"HasWatchedFilter=\" + encodeURIComponent(\"\" + hasWatchedFilter) + \"&\";\r\n if (userNameFilter === null)\r\n throw new Error(\"The parameter 'userNameFilter' cannot be null.\");\r\n else if (userNameFilter !== undefined)\r\n url_ += \"UserNameFilter=\" + encodeURIComponent(\"\" + userNameFilter) + \"&\";\r\n if (episodeNameFilter === null)\r\n throw new Error(\"The parameter 'episodeNameFilter' cannot be null.\");\r\n else if (episodeNameFilter !== undefined)\r\n url_ += \"EpisodeNameFilter=\" + encodeURIComponent(\"\" + episodeNameFilter) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodeUsersToExcel(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodeUsersToExcel(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodeUsersToExcel(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FileDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllUserForTableDropdown(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/GetAllUserForTableDropdown\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllUserForTableDropdown(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllUserForTableDropdown(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllUserForTableDropdown(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(EpisodeUserUserLookupTableDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllEpisodeForTableDropdown(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeUsers/GetAllEpisodeForTableDropdown\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllEpisodeForTableDropdown(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllEpisodeForTableDropdown(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllEpisodeForTableDropdown(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(EpisodeUserEpisodeLookupTableDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class EpisodeVideosServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param sorting (optional) \r\n * @param skipCount (optional) \r\n * @param maxResultCount (optional) \r\n * @return Success\r\n */\r\n getAll(filter: string | undefined, sorting: string | undefined, skipCount: number | undefined, maxResultCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeVideos/GetAll?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAll(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAll(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAll(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEpisodeVideoForViewDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getEpisodeVideoForView(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeVideos/GetEpisodeVideoForView?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodeVideoForView(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodeVideoForView(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodeVideoForView(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEpisodeVideoForViewDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getEpisodeVideoForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeVideos/GetEpisodeVideoForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodeVideoForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodeVideoForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodeVideoForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEpisodeVideoForEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createOrEdit(body: CreateOrEditEpisodeVideoDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeVideos/CreateOrEdit\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateOrEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateOrEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateOrEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = EntityDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createOrEditName(body: EntityDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeVideos/CreateOrEditName\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateOrEditName(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateOrEditName(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateOrEditName(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n delete(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeVideos/Delete?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelete(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelete(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelete(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @return Success\r\n */\r\n getEpisodeVideosToExcel(filter: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeVideos/GetEpisodeVideosToExcel?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEpisodeVideosToExcel(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEpisodeVideosToExcel(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEpisodeVideosToExcel(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FileDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n removeVideoContentFile(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/EpisodeVideos/RemoveVideoContentFile?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRemoveVideoContentFile(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRemoveVideoContentFile(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRemoveVideoContentFile(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class FriendshipServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createFriendshipRequest(body: CreateFriendshipRequestInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Friendship/CreateFriendshipRequest\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateFriendshipRequest(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateFriendshipRequest(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateFriendshipRequest(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FriendDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createFriendshipRequestByUserName(body: CreateFriendshipRequestByUserNameInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Friendship/CreateFriendshipRequestByUserName\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateFriendshipRequestByUserName(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateFriendshipRequestByUserName(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateFriendshipRequestByUserName(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FriendDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n blockUser(body: BlockUserInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Friendship/BlockUser\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processBlockUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processBlockUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processBlockUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n unblockUser(body: UnblockUserInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Friendship/UnblockUser\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUnblockUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUnblockUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUnblockUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n acceptFriendshipRequest(body: AcceptFriendshipRequestInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Friendship/AcceptFriendshipRequest\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processAcceptFriendshipRequest(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processAcceptFriendshipRequest(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processAcceptFriendshipRequest(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param userId (optional) \r\n * @param tenantId (optional) \r\n * @return Success\r\n */\r\n removeFriend(userId: number | undefined, tenantId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Friendship/RemoveFriend?\";\r\n if (userId === null)\r\n throw new Error(\"The parameter 'userId' cannot be null.\");\r\n else if (userId !== undefined)\r\n url_ += \"UserId=\" + encodeURIComponent(\"\" + userId) + \"&\";\r\n if (tenantId === null)\r\n throw new Error(\"The parameter 'tenantId' cannot be null.\");\r\n else if (tenantId !== undefined)\r\n url_ += \"TenantId=\" + encodeURIComponent(\"\" + tenantId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRemoveFriend(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRemoveFriend(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRemoveFriend(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class HostDashboardServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param startDate (optional) \r\n * @param endDate (optional) \r\n * @return Success\r\n */\r\n getTopStatsData(startDate: DateTime | undefined, endDate: DateTime | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/HostDashboard/GetTopStatsData?\";\r\n if (startDate === null)\r\n throw new Error(\"The parameter 'startDate' cannot be null.\");\r\n else if (startDate !== undefined)\r\n url_ += \"StartDate=\" + encodeURIComponent(startDate ? \"\" + startDate.toString() : \"\") + \"&\";\r\n if (endDate === null)\r\n throw new Error(\"The parameter 'endDate' cannot be null.\");\r\n else if (endDate !== undefined)\r\n url_ += \"EndDate=\" + encodeURIComponent(endDate ? \"\" + endDate.toString() : \"\") + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetTopStatsData(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetTopStatsData(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetTopStatsData(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = TopStatsData.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getRecentTenantsData(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/HostDashboard/GetRecentTenantsData\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetRecentTenantsData(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetRecentTenantsData(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetRecentTenantsData(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetRecentTenantsOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getSubscriptionExpiringTenantsData(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/HostDashboard/GetSubscriptionExpiringTenantsData\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetSubscriptionExpiringTenantsData(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetSubscriptionExpiringTenantsData(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetSubscriptionExpiringTenantsData(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetExpiringTenantsOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param startDate (optional) \r\n * @param endDate (optional) \r\n * @return Success\r\n */\r\n getIncomeStatistics(incomeStatisticsDateInterval: ChartDateInterval, startDate: DateTime | undefined, endDate: DateTime | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/HostDashboard/GetIncomeStatistics?\";\r\n if (incomeStatisticsDateInterval === undefined || incomeStatisticsDateInterval === null)\r\n throw new Error(\"The parameter 'incomeStatisticsDateInterval' must be defined and cannot be null.\");\r\n else\r\n url_ += \"IncomeStatisticsDateInterval=\" + encodeURIComponent(\"\" + incomeStatisticsDateInterval) + \"&\";\r\n if (startDate === null)\r\n throw new Error(\"The parameter 'startDate' cannot be null.\");\r\n else if (startDate !== undefined)\r\n url_ += \"StartDate=\" + encodeURIComponent(startDate ? \"\" + startDate.toString() : \"\") + \"&\";\r\n if (endDate === null)\r\n throw new Error(\"The parameter 'endDate' cannot be null.\");\r\n else if (endDate !== undefined)\r\n url_ += \"EndDate=\" + encodeURIComponent(endDate ? \"\" + endDate.toString() : \"\") + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetIncomeStatistics(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetIncomeStatistics(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetIncomeStatistics(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetIncomeStatisticsDataOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param startDate (optional) \r\n * @param endDate (optional) \r\n * @return Success\r\n */\r\n getEditionTenantStatistics(startDate: DateTime | undefined, endDate: DateTime | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/HostDashboard/GetEditionTenantStatistics?\";\r\n if (startDate === null)\r\n throw new Error(\"The parameter 'startDate' cannot be null.\");\r\n else if (startDate !== undefined)\r\n url_ += \"StartDate=\" + encodeURIComponent(startDate ? \"\" + startDate.toString() : \"\") + \"&\";\r\n if (endDate === null)\r\n throw new Error(\"The parameter 'endDate' cannot be null.\");\r\n else if (endDate !== undefined)\r\n url_ += \"EndDate=\" + encodeURIComponent(endDate ? \"\" + endDate.toString() : \"\") + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEditionTenantStatistics(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEditionTenantStatistics(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEditionTenantStatistics(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetEditionTenantStatisticsOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class HostSettingsServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllSettings(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/HostSettings/GetAllSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = HostSettingsEditDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateAllSettings(body: HostSettingsEditDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/HostSettings/UpdateAllSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateAllSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateAllSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateAllSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n sendTestEmail(body: SendTestEmailInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/HostSettings/SendTestEmail\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSendTestEmail(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSendTestEmail(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSendTestEmail(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getEnabledSocialLoginSettings(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/HostSettings/GetEnabledSocialLoginSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEnabledSocialLoginSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEnabledSocialLoginSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEnabledSocialLoginSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ExternalLoginSettingsDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class InstallServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n setup(body: InstallDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Install/Setup\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSetup(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSetup(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSetup(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAppSettingsJson(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Install/GetAppSettingsJson\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAppSettingsJson(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAppSettingsJson(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAppSettingsJson(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = AppSettingsJsonDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n checkDatabase(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Install/CheckDatabase\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCheckDatabase(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCheckDatabase(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCheckDatabase(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CheckDatabaseOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class InvoiceServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getInvoiceInfo(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Invoice/GetInvoiceInfo?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetInvoiceInfo(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetInvoiceInfo(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetInvoiceInfo(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = InvoiceDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createInvoice(body: CreateInvoiceDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Invoice/CreateInvoice\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateInvoice(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateInvoice(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateInvoice(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class LanguageServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getLanguages(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Language/GetLanguages\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetLanguages(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetLanguages(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetLanguages(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetLanguagesOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getLanguageForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Language/GetLanguageForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetLanguageForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetLanguageForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetLanguageForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetLanguageForEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createOrUpdateLanguage(body: CreateOrUpdateLanguageInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Language/CreateOrUpdateLanguage\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateOrUpdateLanguage(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateOrUpdateLanguage(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateOrUpdateLanguage(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n deleteLanguage(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Language/DeleteLanguage?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDeleteLanguage(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDeleteLanguage(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDeleteLanguage(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n setDefaultLanguage(body: SetDefaultLanguageInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Language/SetDefaultLanguage\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSetDefaultLanguage(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSetDefaultLanguage(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSetDefaultLanguage(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @param sorting (optional) \r\n * @param baseLanguageName (optional) \r\n * @param targetValueFilter (optional) \r\n * @param filterText (optional) \r\n * @return Success\r\n */\r\n getLanguageTexts(maxResultCount: number | undefined, skipCount: number | undefined, sorting: string | undefined, sourceName: string, baseLanguageName: string | undefined, targetLanguageName: string, targetValueFilter: string | undefined, filterText: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Language/GetLanguageTexts?\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (sourceName === undefined || sourceName === null)\r\n throw new Error(\"The parameter 'sourceName' must be defined and cannot be null.\");\r\n else\r\n url_ += \"SourceName=\" + encodeURIComponent(\"\" + sourceName) + \"&\";\r\n if (baseLanguageName === null)\r\n throw new Error(\"The parameter 'baseLanguageName' cannot be null.\");\r\n else if (baseLanguageName !== undefined)\r\n url_ += \"BaseLanguageName=\" + encodeURIComponent(\"\" + baseLanguageName) + \"&\";\r\n if (targetLanguageName === undefined || targetLanguageName === null)\r\n throw new Error(\"The parameter 'targetLanguageName' must be defined and cannot be null.\");\r\n else\r\n url_ += \"TargetLanguageName=\" + encodeURIComponent(\"\" + targetLanguageName) + \"&\";\r\n if (targetValueFilter === null)\r\n throw new Error(\"The parameter 'targetValueFilter' cannot be null.\");\r\n else if (targetValueFilter !== undefined)\r\n url_ += \"TargetValueFilter=\" + encodeURIComponent(\"\" + targetValueFilter) + \"&\";\r\n if (filterText === null)\r\n throw new Error(\"The parameter 'filterText' cannot be null.\");\r\n else if (filterText !== undefined)\r\n url_ += \"FilterText=\" + encodeURIComponent(\"\" + filterText) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetLanguageTexts(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetLanguageTexts(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetLanguageTexts(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = LanguageTextListDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateLanguageText(body: UpdateLanguageTextInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Language/UpdateLanguageText\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateLanguageText(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateLanguageText(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateLanguageText(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class NotificationServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param state (optional) \r\n * @param startDate (optional) \r\n * @param endDate (optional) \r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @return Success\r\n */\r\n getUserNotifications(state: UserNotificationState | undefined, startDate: DateTime | undefined, endDate: DateTime | undefined, maxResultCount: number | undefined, skipCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/GetUserNotifications?\";\r\n if (state === null)\r\n throw new Error(\"The parameter 'state' cannot be null.\");\r\n else if (state !== undefined)\r\n url_ += \"State=\" + encodeURIComponent(\"\" + state) + \"&\";\r\n if (startDate === null)\r\n throw new Error(\"The parameter 'startDate' cannot be null.\");\r\n else if (startDate !== undefined)\r\n url_ += \"StartDate=\" + encodeURIComponent(startDate ? \"\" + startDate.toString() : \"\") + \"&\";\r\n if (endDate === null)\r\n throw new Error(\"The parameter 'endDate' cannot be null.\");\r\n else if (endDate !== undefined)\r\n url_ += \"EndDate=\" + encodeURIComponent(endDate ? \"\" + endDate.toString() : \"\") + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetUserNotifications(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetUserNotifications(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetUserNotifications(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetNotificationsOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n shouldUserUpdateApp(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/ShouldUserUpdateApp\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processShouldUserUpdateApp(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processShouldUserUpdateApp(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processShouldUserUpdateApp(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n \r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n setAllAvailableVersionNotificationAsRead(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/SetAllAvailableVersionNotificationAsRead\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSetAllAvailableVersionNotificationAsRead(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSetAllAvailableVersionNotificationAsRead(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSetAllAvailableVersionNotificationAsRead(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SetNotificationAsReadOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n setAllNotificationsAsRead(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/SetAllNotificationsAsRead\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSetAllNotificationsAsRead(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSetAllNotificationsAsRead(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSetAllNotificationsAsRead(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n setNotificationAsRead(body: GuidEntityDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/SetNotificationAsRead\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSetNotificationAsRead(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSetNotificationAsRead(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSetNotificationAsRead(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SetNotificationAsReadOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getNotificationSettings(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/GetNotificationSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetNotificationSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetNotificationSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetNotificationSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetNotificationSettingsOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateNotificationSettings(body: UpdateNotificationSettingsInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/UpdateNotificationSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateNotificationSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateNotificationSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateNotificationSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n deleteNotification(id: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/DeleteNotification?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDeleteNotification(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDeleteNotification(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDeleteNotification(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param state (optional) \r\n * @param startDate (optional) \r\n * @param endDate (optional) \r\n * @return Success\r\n */\r\n deleteAllUserNotifications(state: UserNotificationState | undefined, startDate: DateTime | undefined, endDate: DateTime | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/DeleteAllUserNotifications?\";\r\n if (state === null)\r\n throw new Error(\"The parameter 'state' cannot be null.\");\r\n else if (state !== undefined)\r\n url_ += \"State=\" + encodeURIComponent(\"\" + state) + \"&\";\r\n if (startDate === null)\r\n throw new Error(\"The parameter 'startDate' cannot be null.\");\r\n else if (startDate !== undefined)\r\n url_ += \"StartDate=\" + encodeURIComponent(startDate ? \"\" + startDate.toString() : \"\") + \"&\";\r\n if (endDate === null)\r\n throw new Error(\"The parameter 'endDate' cannot be null.\");\r\n else if (endDate !== undefined)\r\n url_ += \"EndDate=\" + encodeURIComponent(endDate ? \"\" + endDate.toString() : \"\") + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDeleteAllUserNotifications(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDeleteAllUserNotifications(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDeleteAllUserNotifications(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param sorting (optional) \r\n * @param skipCount (optional) \r\n * @param maxResultCount (optional) \r\n * @return Success\r\n */\r\n getAllUserForLookupTable(filter: string | undefined, sorting: string | undefined, skipCount: number | undefined, maxResultCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/GetAllUserForLookupTable?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllUserForLookupTable(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllUserForLookupTable(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllUserForLookupTable(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = MassNotificationUserLookupTableDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param sorting (optional) \r\n * @param skipCount (optional) \r\n * @param maxResultCount (optional) \r\n * @return Success\r\n */\r\n getAllOrganizationUnitForLookupTable(filter: string | undefined, sorting: string | undefined, skipCount: number | undefined, maxResultCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/GetAllOrganizationUnitForLookupTable?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllOrganizationUnitForLookupTable(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllOrganizationUnitForLookupTable(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllOrganizationUnitForLookupTable(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = MassNotificationOrganizationUnitLookupTableDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createMassNotification(body: CreateMassNotificationInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/CreateMassNotification\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateMassNotification(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateMassNotification(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateMassNotification(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n createNewVersionReleasedNotification(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/CreateNewVersionReleasedNotification\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateNewVersionReleasedNotification(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateNewVersionReleasedNotification(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateNewVersionReleasedNotification(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllNotifiers(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/GetAllNotifiers\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllNotifiers(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllNotifiers(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllNotifiers(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(item);\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param startDate (optional) \r\n * @param endDate (optional) \r\n * @return Success\r\n */\r\n getNotificationsPublishedByUser(startDate: DateTime | undefined, endDate: DateTime | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Notification/GetNotificationsPublishedByUser?\";\r\n if (startDate === null)\r\n throw new Error(\"The parameter 'startDate' cannot be null.\");\r\n else if (startDate !== undefined)\r\n url_ += \"StartDate=\" + encodeURIComponent(startDate ? \"\" + startDate.toString() : \"\") + \"&\";\r\n if (endDate === null)\r\n throw new Error(\"The parameter 'endDate' cannot be null.\");\r\n else if (endDate !== undefined)\r\n url_ += \"EndDate=\" + encodeURIComponent(endDate ? \"\" + endDate.toString() : \"\") + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetNotificationsPublishedByUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetNotificationsPublishedByUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetNotificationsPublishedByUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetPublishedNotificationsOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class OrganizationUnitServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getOrganizationUnits(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/GetOrganizationUnits\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetOrganizationUnits(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetOrganizationUnits(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetOrganizationUnits(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = OrganizationUnitDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @param sorting (optional) \r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @return Success\r\n */\r\n getOrganizationUnitUsers(id: number | undefined, sorting: string | undefined, maxResultCount: number | undefined, skipCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/GetOrganizationUnitUsers?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetOrganizationUnitUsers(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetOrganizationUnitUsers(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetOrganizationUnitUsers(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = OrganizationUnitUserListDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @param sorting (optional) \r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @return Success\r\n */\r\n getOrganizationUnitRoles(id: number | undefined, sorting: string | undefined, maxResultCount: number | undefined, skipCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/GetOrganizationUnitRoles?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetOrganizationUnitRoles(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetOrganizationUnitRoles(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetOrganizationUnitRoles(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = OrganizationUnitRoleListDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createOrganizationUnit(body: CreateOrganizationUnitInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/CreateOrganizationUnit\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateOrganizationUnit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateOrganizationUnit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateOrganizationUnit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = OrganizationUnitDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateOrganizationUnit(body: UpdateOrganizationUnitInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/UpdateOrganizationUnit\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateOrganizationUnit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateOrganizationUnit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateOrganizationUnit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = OrganizationUnitDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n moveOrganizationUnit(body: MoveOrganizationUnitInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/MoveOrganizationUnit\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processMoveOrganizationUnit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processMoveOrganizationUnit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processMoveOrganizationUnit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = OrganizationUnitDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n deleteOrganizationUnit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/DeleteOrganizationUnit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDeleteOrganizationUnit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDeleteOrganizationUnit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDeleteOrganizationUnit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param userId (optional) \r\n * @param organizationUnitId (optional) \r\n * @return Success\r\n */\r\n removeUserFromOrganizationUnit(userId: number | undefined, organizationUnitId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/RemoveUserFromOrganizationUnit?\";\r\n if (userId === null)\r\n throw new Error(\"The parameter 'userId' cannot be null.\");\r\n else if (userId !== undefined)\r\n url_ += \"UserId=\" + encodeURIComponent(\"\" + userId) + \"&\";\r\n if (organizationUnitId === null)\r\n throw new Error(\"The parameter 'organizationUnitId' cannot be null.\");\r\n else if (organizationUnitId !== undefined)\r\n url_ += \"OrganizationUnitId=\" + encodeURIComponent(\"\" + organizationUnitId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRemoveUserFromOrganizationUnit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRemoveUserFromOrganizationUnit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRemoveUserFromOrganizationUnit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param roleId (optional) \r\n * @param organizationUnitId (optional) \r\n * @return Success\r\n */\r\n removeRoleFromOrganizationUnit(roleId: number | undefined, organizationUnitId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/RemoveRoleFromOrganizationUnit?\";\r\n if (roleId === null)\r\n throw new Error(\"The parameter 'roleId' cannot be null.\");\r\n else if (roleId !== undefined)\r\n url_ += \"RoleId=\" + encodeURIComponent(\"\" + roleId) + \"&\";\r\n if (organizationUnitId === null)\r\n throw new Error(\"The parameter 'organizationUnitId' cannot be null.\");\r\n else if (organizationUnitId !== undefined)\r\n url_ += \"OrganizationUnitId=\" + encodeURIComponent(\"\" + organizationUnitId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRemoveRoleFromOrganizationUnit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRemoveRoleFromOrganizationUnit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRemoveRoleFromOrganizationUnit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n addUsersToOrganizationUnit(body: UsersToOrganizationUnitInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/AddUsersToOrganizationUnit\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processAddUsersToOrganizationUnit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processAddUsersToOrganizationUnit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processAddUsersToOrganizationUnit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n addRolesToOrganizationUnit(body: RolesToOrganizationUnitInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/AddRolesToOrganizationUnit\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processAddRolesToOrganizationUnit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processAddRolesToOrganizationUnit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processAddRolesToOrganizationUnit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n findUsers(body: FindOrganizationUnitUsersInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/FindUsers\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processFindUsers(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processFindUsers(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processFindUsers(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = NameValueDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n findRoles(body: FindOrganizationUnitRolesInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/FindRoles\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processFindRoles(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processFindRoles(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processFindRoles(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = NameValueDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAll(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/OrganizationUnit/GetAll\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAll(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAll(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAll(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(OrganizationUnitDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class OvalsServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n hasOvalFile(body: EntityDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Ovals/HasOvalFile\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processHasOvalFile(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processHasOvalFile(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processHasOvalFile(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = OvalHasFileDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateOrder(body: UpdateOvalsOrderDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Ovals/UpdateOrder\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateOrder(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateOrder(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateOrder(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param titleFilter (optional) \r\n * @param textColorFilter (optional) \r\n * @param backgroundColorFilter (optional) \r\n * @param borderColorFilter (optional) \r\n * @param sorting (optional) \r\n * @param skipCount (optional) \r\n * @param maxResultCount (optional) \r\n * @return Success\r\n */\r\n getAll(filter: string | undefined, titleFilter: string | undefined, textColorFilter: string | undefined, backgroundColorFilter: string | undefined, borderColorFilter: string | undefined, sorting: string | undefined, skipCount: number | undefined, maxResultCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Ovals/GetAll?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (titleFilter === null)\r\n throw new Error(\"The parameter 'titleFilter' cannot be null.\");\r\n else if (titleFilter !== undefined)\r\n url_ += \"TitleFilter=\" + encodeURIComponent(\"\" + titleFilter) + \"&\";\r\n if (textColorFilter === null)\r\n throw new Error(\"The parameter 'textColorFilter' cannot be null.\");\r\n else if (textColorFilter !== undefined)\r\n url_ += \"TextColorFilter=\" + encodeURIComponent(\"\" + textColorFilter) + \"&\";\r\n if (backgroundColorFilter === null)\r\n throw new Error(\"The parameter 'backgroundColorFilter' cannot be null.\");\r\n else if (backgroundColorFilter !== undefined)\r\n url_ += \"BackgroundColorFilter=\" + encodeURIComponent(\"\" + backgroundColorFilter) + \"&\";\r\n if (borderColorFilter === null)\r\n throw new Error(\"The parameter 'borderColorFilter' cannot be null.\");\r\n else if (borderColorFilter !== undefined)\r\n url_ += \"BorderColorFilter=\" + encodeURIComponent(\"\" + borderColorFilter) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAll(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAll(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAll(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetOvalForViewDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getOvalForView(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Ovals/GetOvalForView?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetOvalForView(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetOvalForView(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetOvalForView(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetOvalForViewDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getOvalForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Ovals/GetOvalForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetOvalForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetOvalForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetOvalForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetOvalForEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createOrEdit(body: CreateOrEditOvalDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Ovals/CreateOrEdit\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateOrEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateOrEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateOrEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n delete(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Ovals/Delete?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelete(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelete(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelete(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param titleFilter (optional) \r\n * @param textColorFilter (optional) \r\n * @param backgroundColorFilter (optional) \r\n * @param borderColorFilter (optional) \r\n * @return Success\r\n */\r\n getOvalsToExcel(filter: string | undefined, titleFilter: string | undefined, textColorFilter: string | undefined, backgroundColorFilter: string | undefined, borderColorFilter: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Ovals/GetOvalsToExcel?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (titleFilter === null)\r\n throw new Error(\"The parameter 'titleFilter' cannot be null.\");\r\n else if (titleFilter !== undefined)\r\n url_ += \"TitleFilter=\" + encodeURIComponent(\"\" + titleFilter) + \"&\";\r\n if (textColorFilter === null)\r\n throw new Error(\"The parameter 'textColorFilter' cannot be null.\");\r\n else if (textColorFilter !== undefined)\r\n url_ += \"TextColorFilter=\" + encodeURIComponent(\"\" + textColorFilter) + \"&\";\r\n if (backgroundColorFilter === null)\r\n throw new Error(\"The parameter 'backgroundColorFilter' cannot be null.\");\r\n else if (backgroundColorFilter !== undefined)\r\n url_ += \"BackgroundColorFilter=\" + encodeURIComponent(\"\" + backgroundColorFilter) + \"&\";\r\n if (borderColorFilter === null)\r\n throw new Error(\"The parameter 'borderColorFilter' cannot be null.\");\r\n else if (borderColorFilter !== undefined)\r\n url_ += \"BorderColorFilter=\" + encodeURIComponent(\"\" + borderColorFilter) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetOvalsToExcel(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetOvalsToExcel(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetOvalsToExcel(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FileDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class PaymentServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param upgradeEditionId (optional) \r\n * @return Success\r\n */\r\n getPaymentInfo(upgradeEditionId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/GetPaymentInfo?\";\r\n if (upgradeEditionId === null)\r\n throw new Error(\"The parameter 'upgradeEditionId' cannot be null.\");\r\n else if (upgradeEditionId !== undefined)\r\n url_ += \"UpgradeEditionId=\" + encodeURIComponent(\"\" + upgradeEditionId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetPaymentInfo(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetPaymentInfo(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetPaymentInfo(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = PaymentInfoDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createPayment(body: CreatePaymentDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/CreatePayment\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreatePayment(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreatePayment(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreatePayment(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n \r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n cancelPayment(body: CancelPaymentDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/CancelPayment\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCancelPayment(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCancelPayment(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCancelPayment(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param sorting (optional) \r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @return Success\r\n */\r\n getPaymentHistory(sorting: string | undefined, maxResultCount: number | undefined, skipCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/GetPaymentHistory?\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetPaymentHistory(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetPaymentHistory(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetPaymentHistory(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SubscriptionPaymentListDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param recurringPaymentsEnabled (optional) \r\n * @return Success\r\n */\r\n getActiveGateways(recurringPaymentsEnabled: boolean | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/GetActiveGateways?\";\r\n if (recurringPaymentsEnabled === null)\r\n throw new Error(\"The parameter 'recurringPaymentsEnabled' cannot be null.\");\r\n else if (recurringPaymentsEnabled !== undefined)\r\n url_ += \"RecurringPaymentsEnabled=\" + encodeURIComponent(\"\" + recurringPaymentsEnabled) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetActiveGateways(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetActiveGateways(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetActiveGateways(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(PaymentGatewayModel.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param paymentId (optional) \r\n * @return Success\r\n */\r\n getPayment(paymentId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/GetPayment?\";\r\n if (paymentId === null)\r\n throw new Error(\"The parameter 'paymentId' cannot be null.\");\r\n else if (paymentId !== undefined)\r\n url_ += \"paymentId=\" + encodeURIComponent(\"\" + paymentId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetPayment(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetPayment(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetPayment(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SubscriptionPaymentDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getLastCompletedPayment(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/GetLastCompletedPayment\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetLastCompletedPayment(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetLastCompletedPayment(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetLastCompletedPayment(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SubscriptionPaymentDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param paymentId (optional) \r\n * @return Success\r\n */\r\n buyNowSucceed(paymentId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/BuyNowSucceed?\";\r\n if (paymentId === null)\r\n throw new Error(\"The parameter 'paymentId' cannot be null.\");\r\n else if (paymentId !== undefined)\r\n url_ += \"paymentId=\" + encodeURIComponent(\"\" + paymentId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processBuyNowSucceed(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processBuyNowSucceed(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processBuyNowSucceed(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param paymentId (optional) \r\n * @return Success\r\n */\r\n newRegistrationSucceed(paymentId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/NewRegistrationSucceed?\";\r\n if (paymentId === null)\r\n throw new Error(\"The parameter 'paymentId' cannot be null.\");\r\n else if (paymentId !== undefined)\r\n url_ += \"paymentId=\" + encodeURIComponent(\"\" + paymentId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processNewRegistrationSucceed(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processNewRegistrationSucceed(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processNewRegistrationSucceed(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param paymentId (optional) \r\n * @return Success\r\n */\r\n upgradeSucceed(paymentId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/UpgradeSucceed?\";\r\n if (paymentId === null)\r\n throw new Error(\"The parameter 'paymentId' cannot be null.\");\r\n else if (paymentId !== undefined)\r\n url_ += \"paymentId=\" + encodeURIComponent(\"\" + paymentId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpgradeSucceed(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpgradeSucceed(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpgradeSucceed(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param paymentId (optional) \r\n * @return Success\r\n */\r\n extendSucceed(paymentId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/ExtendSucceed?\";\r\n if (paymentId === null)\r\n throw new Error(\"The parameter 'paymentId' cannot be null.\");\r\n else if (paymentId !== undefined)\r\n url_ += \"paymentId=\" + encodeURIComponent(\"\" + paymentId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processExtendSucceed(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processExtendSucceed(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processExtendSucceed(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param paymentId (optional) \r\n * @return Success\r\n */\r\n paymentFailed(paymentId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/PaymentFailed?\";\r\n if (paymentId === null)\r\n throw new Error(\"The parameter 'paymentId' cannot be null.\");\r\n else if (paymentId !== undefined)\r\n url_ += \"paymentId=\" + encodeURIComponent(\"\" + paymentId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processPaymentFailed(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processPaymentFailed(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processPaymentFailed(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param upgradeEditionId (optional) \r\n * @return Success\r\n */\r\n switchBetweenFreeEditions(upgradeEditionId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/SwitchBetweenFreeEditions?\";\r\n if (upgradeEditionId === null)\r\n throw new Error(\"The parameter 'upgradeEditionId' cannot be null.\");\r\n else if (upgradeEditionId !== undefined)\r\n url_ += \"upgradeEditionId=\" + encodeURIComponent(\"\" + upgradeEditionId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSwitchBetweenFreeEditions(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSwitchBetweenFreeEditions(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSwitchBetweenFreeEditions(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param editionId (optional) \r\n * @return Success\r\n */\r\n upgradeSubscriptionCostsLessThenMinAmount(editionId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/UpgradeSubscriptionCostsLessThenMinAmount?\";\r\n if (editionId === null)\r\n throw new Error(\"The parameter 'editionId' cannot be null.\");\r\n else if (editionId !== undefined)\r\n url_ += \"editionId=\" + encodeURIComponent(\"\" + editionId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpgradeSubscriptionCostsLessThenMinAmount(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpgradeSubscriptionCostsLessThenMinAmount(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpgradeSubscriptionCostsLessThenMinAmount(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n hasAnyPayment(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Payment/HasAnyPayment\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processHasAnyPayment(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processHasAnyPayment(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processHasAnyPayment(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n \r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class PayPalPaymentServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param paymentId (optional) \r\n * @param paypalOrderId (optional) \r\n * @return Success\r\n */\r\n confirmPayment(paymentId: number | undefined, paypalOrderId: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/PayPalPayment/ConfirmPayment?\";\r\n if (paymentId === null)\r\n throw new Error(\"The parameter 'paymentId' cannot be null.\");\r\n else if (paymentId !== undefined)\r\n url_ += \"paymentId=\" + encodeURIComponent(\"\" + paymentId) + \"&\";\r\n if (paypalOrderId === null)\r\n throw new Error(\"The parameter 'paypalOrderId' cannot be null.\");\r\n else if (paypalOrderId !== undefined)\r\n url_ += \"paypalOrderId=\" + encodeURIComponent(\"\" + paypalOrderId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processConfirmPayment(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processConfirmPayment(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processConfirmPayment(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getConfiguration(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/PayPalPayment/GetConfiguration\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetConfiguration(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetConfiguration(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetConfiguration(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = PayPalConfigurationDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class PermissionServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllPermissions(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Permission/GetAllPermissions\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllPermissions(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllPermissions(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllPermissions(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FlatPermissionWithDifficultyLevelDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class ProfileServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getCurrentUserProfileForEdit(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/GetCurrentUserProfileForEdit\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetCurrentUserProfileForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetCurrentUserProfileForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetCurrentUserProfileForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = CurrentUserProfileEditDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n disableGoogleAuthenticator(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/DisableGoogleAuthenticator\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDisableGoogleAuthenticator(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDisableGoogleAuthenticator(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDisableGoogleAuthenticator(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n updateGoogleAuthenticatorKey(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/UpdateGoogleAuthenticatorKey\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateGoogleAuthenticatorKey(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateGoogleAuthenticatorKey(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateGoogleAuthenticatorKey(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = UpdateGoogleAuthenticatorKeyOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n sendVerificationSms(body: SendVerificationSmsInputDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/SendVerificationSms\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSendVerificationSms(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSendVerificationSms(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSendVerificationSms(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n verifySmsCode(body: VerifySmsCodeInputDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/VerifySmsCode\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processVerifySmsCode(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processVerifySmsCode(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processVerifySmsCode(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n prepareCollectedData(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/PrepareCollectedData\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processPrepareCollectedData(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processPrepareCollectedData(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processPrepareCollectedData(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateCurrentUserProfile(body: CurrentUserProfileEditDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/UpdateCurrentUserProfile\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateCurrentUserProfile(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateCurrentUserProfile(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateCurrentUserProfile(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n changePassword(body: ChangePasswordInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/ChangePassword\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processChangePassword(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processChangePassword(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processChangePassword(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateProfilePicture(body: UpdateProfilePictureInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/UpdateProfilePicture\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateProfilePicture(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateProfilePicture(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateProfilePicture(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getPasswordComplexitySetting(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/GetPasswordComplexitySetting\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetPasswordComplexitySetting(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetPasswordComplexitySetting(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetPasswordComplexitySetting(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetPasswordComplexitySettingOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getProfilePicture(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/GetProfilePicture\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetProfilePicture(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetProfilePicture(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetProfilePicture(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetProfilePictureOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param username (optional) \r\n * @return Success\r\n */\r\n getProfilePictureByUserName(username: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/GetProfilePictureByUserName?\";\r\n if (username === null)\r\n throw new Error(\"The parameter 'username' cannot be null.\");\r\n else if (username !== undefined)\r\n url_ += \"username=\" + encodeURIComponent(\"\" + username) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetProfilePictureByUserName(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetProfilePictureByUserName(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetProfilePictureByUserName(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetProfilePictureOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param userId (optional) \r\n * @param tenantId (optional) \r\n * @return Success\r\n */\r\n getFriendProfilePicture(userId: number | undefined, tenantId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/GetFriendProfilePicture?\";\r\n if (userId === null)\r\n throw new Error(\"The parameter 'userId' cannot be null.\");\r\n else if (userId !== undefined)\r\n url_ += \"UserId=\" + encodeURIComponent(\"\" + userId) + \"&\";\r\n if (tenantId === null)\r\n throw new Error(\"The parameter 'tenantId' cannot be null.\");\r\n else if (tenantId !== undefined)\r\n url_ += \"TenantId=\" + encodeURIComponent(\"\" + tenantId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetFriendProfilePicture(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetFriendProfilePicture(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetFriendProfilePicture(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetProfilePictureOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param userId (optional) \r\n * @return Success\r\n */\r\n getProfilePictureByUser(userId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/GetProfilePictureByUser?\";\r\n if (userId === null)\r\n throw new Error(\"The parameter 'userId' cannot be null.\");\r\n else if (userId !== undefined)\r\n url_ += \"userId=\" + encodeURIComponent(\"\" + userId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetProfilePictureByUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetProfilePictureByUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetProfilePictureByUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetProfilePictureOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n changeLanguage(body: ChangeUserLanguageDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Profile/ChangeLanguage\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processChangeLanguage(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processChangeLanguage(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processChangeLanguage(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class RoleServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n getRoles(body: GetRolesInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Role/GetRoles\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetRoles(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetRoles(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetRoles(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = RoleListDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getRoleForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Role/GetRoleForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetRoleForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetRoleForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetRoleForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetRoleForEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createOrUpdateRole(body: CreateOrUpdateRoleInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Role/CreateOrUpdateRole\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateOrUpdateRole(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateOrUpdateRole(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateOrUpdateRole(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n deleteRole(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Role/DeleteRole?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDeleteRole(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDeleteRole(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDeleteRole(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n updateExistingPermissionsOfAdmins(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Role/UpdateExistingPermissionsOfAdmins\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateExistingPermissionsOfAdmins(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateExistingPermissionsOfAdmins(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateExistingPermissionsOfAdmins(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class SessionServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getCurrentLoginInformations(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Session/GetCurrentLoginInformations\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetCurrentLoginInformations(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetCurrentLoginInformations(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetCurrentLoginInformations(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetCurrentLoginInformationsOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n updateUserSignInToken(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Session/UpdateUserSignInToken\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateUserSignInToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateUserSignInToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateUserSignInToken(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = UpdateUserSignInTokenOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class StorageServiceServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n migrateFilesToAmazon(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/StorageService/MigrateFilesToAmazon\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processMigrateFilesToAmazon(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processMigrateFilesToAmazon(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processMigrateFilesToAmazon(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n migrateFileToAmazon(body: StorageFileInputDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/StorageService/MigrateFileToAmazon\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processMigrateFileToAmazon(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processMigrateFileToAmazon(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processMigrateFileToAmazon(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = StorageFileOutputDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getFileUrl(fileId: string): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/StorageService/GetFileUrl?\";\r\n if (fileId === undefined || fileId === null)\r\n throw new Error(\"The parameter 'fileId' must be defined and cannot be null.\");\r\n else\r\n url_ += \"FileId=\" + encodeURIComponent(\"\" + fileId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetFileUrl(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetFileUrl(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetFileUrl(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = StorageFileOutputDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n updateFilesMetadata(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/StorageService/UpdateFilesMetadata\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateFilesMetadata(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateFilesMetadata(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateFilesMetadata(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n truncateBinaryObjects(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/StorageService/TruncateBinaryObjects\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processTruncateBinaryObjects(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processTruncateBinaryObjects(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processTruncateBinaryObjects(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n cleanupBinaryObjects(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/StorageService/CleanupBinaryObjects\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCleanupBinaryObjects(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCleanupBinaryObjects(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCleanupBinaryObjects(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAppUrls(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/StorageService/GetAppUrls\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAppUrls(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAppUrls(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAppUrls(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(AppUrlForLanguageDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class StripePaymentServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getConfiguration(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/StripePayment/GetConfiguration\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetConfiguration(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetConfiguration(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetConfiguration(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = StripeConfigurationDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param stripeSessionId (optional) \r\n * @return Success\r\n */\r\n getPayment(stripeSessionId: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/StripePayment/GetPayment?\";\r\n if (stripeSessionId === null)\r\n throw new Error(\"The parameter 'stripeSessionId' cannot be null.\");\r\n else if (stripeSessionId !== undefined)\r\n url_ += \"StripeSessionId=\" + encodeURIComponent(\"\" + stripeSessionId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetPayment(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetPayment(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetPayment(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SubscriptionPaymentDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createPaymentSession(body: StripeCreatePaymentSessionInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/StripePayment/CreatePaymentSession\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreatePaymentSession(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreatePaymentSession(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreatePaymentSession(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n \r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param paymentId (optional) \r\n * @return Success\r\n */\r\n getPaymentResult(paymentId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/StripePayment/GetPaymentResult?\";\r\n if (paymentId === null)\r\n throw new Error(\"The parameter 'paymentId' cannot be null.\");\r\n else if (paymentId !== undefined)\r\n url_ += \"PaymentId=\" + encodeURIComponent(\"\" + paymentId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetPaymentResult(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetPaymentResult(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetPaymentResult(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = StripePaymentResultOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class SubscriptionServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n disableRecurringPayments(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Subscription/DisableRecurringPayments\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDisableRecurringPayments(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDisableRecurringPayments(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDisableRecurringPayments(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n enableRecurringPayments(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Subscription/EnableRecurringPayments\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processEnableRecurringPayments(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processEnableRecurringPayments(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processEnableRecurringPayments(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class TenantServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param subscriptionEndDateStart (optional) \r\n * @param subscriptionEndDateEnd (optional) \r\n * @param creationDateStart (optional) \r\n * @param creationDateEnd (optional) \r\n * @param editionId (optional) \r\n * @param editionIdSpecified (optional) \r\n * @param sorting (optional) \r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @return Success\r\n */\r\n getTenants(filter: string | undefined, subscriptionEndDateStart: DateTime | undefined, subscriptionEndDateEnd: DateTime | undefined, creationDateStart: DateTime | undefined, creationDateEnd: DateTime | undefined, editionId: number | undefined, editionIdSpecified: boolean | undefined, sorting: string | undefined, maxResultCount: number | undefined, skipCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Tenant/GetTenants?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (subscriptionEndDateStart === null)\r\n throw new Error(\"The parameter 'subscriptionEndDateStart' cannot be null.\");\r\n else if (subscriptionEndDateStart !== undefined)\r\n url_ += \"SubscriptionEndDateStart=\" + encodeURIComponent(subscriptionEndDateStart ? \"\" + subscriptionEndDateStart.toString() : \"\") + \"&\";\r\n if (subscriptionEndDateEnd === null)\r\n throw new Error(\"The parameter 'subscriptionEndDateEnd' cannot be null.\");\r\n else if (subscriptionEndDateEnd !== undefined)\r\n url_ += \"SubscriptionEndDateEnd=\" + encodeURIComponent(subscriptionEndDateEnd ? \"\" + subscriptionEndDateEnd.toString() : \"\") + \"&\";\r\n if (creationDateStart === null)\r\n throw new Error(\"The parameter 'creationDateStart' cannot be null.\");\r\n else if (creationDateStart !== undefined)\r\n url_ += \"CreationDateStart=\" + encodeURIComponent(creationDateStart ? \"\" + creationDateStart.toString() : \"\") + \"&\";\r\n if (creationDateEnd === null)\r\n throw new Error(\"The parameter 'creationDateEnd' cannot be null.\");\r\n else if (creationDateEnd !== undefined)\r\n url_ += \"CreationDateEnd=\" + encodeURIComponent(creationDateEnd ? \"\" + creationDateEnd.toString() : \"\") + \"&\";\r\n if (editionId === null)\r\n throw new Error(\"The parameter 'editionId' cannot be null.\");\r\n else if (editionId !== undefined)\r\n url_ += \"EditionId=\" + encodeURIComponent(\"\" + editionId) + \"&\";\r\n if (editionIdSpecified === null)\r\n throw new Error(\"The parameter 'editionIdSpecified' cannot be null.\");\r\n else if (editionIdSpecified !== undefined)\r\n url_ += \"EditionIdSpecified=\" + encodeURIComponent(\"\" + editionIdSpecified) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetTenants(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetTenants(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetTenants(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = TenantListDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllTenants(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Tenant/GetAllTenants\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllTenants(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllTenants(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllTenants(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(TenantsNameListDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createTenant(body: CreateTenantInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Tenant/CreateTenant\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateTenant(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateTenant(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateTenant(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getTenantForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Tenant/GetTenantForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetTenantForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetTenantForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetTenantForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = TenantEditDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllApplicationLanguageForTableDropdown(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Tenant/GetAllApplicationLanguageForTableDropdown\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllApplicationLanguageForTableDropdown(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllApplicationLanguageForTableDropdown(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllApplicationLanguageForTableDropdown(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(TenantApplicationLanguageLookupTableDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateTenant(body: TenantEditDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Tenant/UpdateTenant\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateTenant(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateTenant(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateTenant(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n deleteTenant(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Tenant/DeleteTenant?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDeleteTenant(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDeleteTenant(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDeleteTenant(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getTenantFeaturesForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Tenant/GetTenantFeaturesForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetTenantFeaturesForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetTenantFeaturesForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetTenantFeaturesForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetTenantFeaturesEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n isFeedBackRequiredForTenant(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Tenant/IsFeedBackRequiredForTenant\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processIsFeedBackRequiredForTenant(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processIsFeedBackRequiredForTenant(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processIsFeedBackRequiredForTenant(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = IsFeedbackRequiredOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateTenantFeatures(body: UpdateTenantFeaturesInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Tenant/UpdateTenantFeatures\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateTenantFeatures(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateTenantFeatures(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateTenantFeatures(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n resetTenantSpecificFeatures(body: EntityDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Tenant/ResetTenantSpecificFeatures\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processResetTenantSpecificFeatures(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processResetTenantSpecificFeatures(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processResetTenantSpecificFeatures(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n unlockTenantAdmin(body: EntityDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Tenant/UnlockTenantAdmin\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUnlockTenantAdmin(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUnlockTenantAdmin(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUnlockTenantAdmin(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class TenantCustomizationServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param tenantId (optional) \r\n * @param extension (optional) \r\n * @return Success\r\n */\r\n getTenantLogo(skin: string, tenantId: number | undefined, extension: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/TenantCustomization/GetTenantLogo/{skin}/{tenantId}/{extension}?\";\r\n if (skin === undefined || skin === null)\r\n throw new Error(\"The parameter 'skin' must be defined.\");\r\n url_ = url_.replace(\"{skin}\", encodeURIComponent(\"\" + skin));\r\n if (tenantId === null)\r\n throw new Error(\"The parameter 'tenantId' cannot be null.\");\r\n else if (tenantId !== undefined)\r\n url_ += \"tenantId=\" + encodeURIComponent(\"\" + tenantId) + \"&\";\r\n if (extension === null)\r\n throw new Error(\"The parameter 'extension' cannot be null.\");\r\n else if (extension !== undefined)\r\n url_ += \"extension=\" + encodeURIComponent(\"\" + extension) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetTenantLogo(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetTenantLogo(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetTenantLogo(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class TenantDashboardServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getMemberActivity(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantDashboard/GetMemberActivity\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetMemberActivity(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetMemberActivity(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetMemberActivity(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetMemberActivityOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getDashboardData(salesSummaryDatePeriod: SalesSummaryDatePeriod): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantDashboard/GetDashboardData?\";\r\n if (salesSummaryDatePeriod === undefined || salesSummaryDatePeriod === null)\r\n throw new Error(\"The parameter 'salesSummaryDatePeriod' must be defined and cannot be null.\");\r\n else\r\n url_ += \"SalesSummaryDatePeriod=\" + encodeURIComponent(\"\" + salesSummaryDatePeriod) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetDashboardData(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetDashboardData(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetDashboardData(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetDashboardDataOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getTopStats(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantDashboard/GetTopStats\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetTopStats(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetTopStats(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetTopStats(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetTopStatsOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getProfitShare(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantDashboard/GetProfitShare\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetProfitShare(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetProfitShare(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetProfitShare(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetProfitShareOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getDailySales(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantDashboard/GetDailySales\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetDailySales(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetDailySales(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetDailySales(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetDailySalesOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getSalesSummary(salesSummaryDatePeriod: SalesSummaryDatePeriod): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantDashboard/GetSalesSummary?\";\r\n if (salesSummaryDatePeriod === undefined || salesSummaryDatePeriod === null)\r\n throw new Error(\"The parameter 'salesSummaryDatePeriod' must be defined and cannot be null.\");\r\n else\r\n url_ += \"SalesSummaryDatePeriod=\" + encodeURIComponent(\"\" + salesSummaryDatePeriod) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetSalesSummary(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetSalesSummary(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetSalesSummary(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetSalesSummaryOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getRegionalStats(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantDashboard/GetRegionalStats\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetRegionalStats(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetRegionalStats(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetRegionalStats(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetRegionalStatsOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getGeneralStats(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantDashboard/GetGeneralStats\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetGeneralStats(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetGeneralStats(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetGeneralStats(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetGeneralStatsOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class TenantRegistrationServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n registerTenant(body: RegisterTenantInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantRegistration/RegisterTenant\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRegisterTenant(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRegisterTenant(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRegisterTenant(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = RegisterTenantOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getEditionsForSelect(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantRegistration/GetEditionsForSelect\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEditionsForSelect(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEditionsForSelect(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEditionsForSelect(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = EditionsSelectOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param editionId (optional) \r\n * @return Success\r\n */\r\n getEdition(editionId: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantRegistration/GetEdition?\";\r\n if (editionId === null)\r\n throw new Error(\"The parameter 'editionId' cannot be null.\");\r\n else if (editionId !== undefined)\r\n url_ += \"editionId=\" + encodeURIComponent(\"\" + editionId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEdition(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEdition(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEdition(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = EditionSelectDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class TenantSettingsServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllSettings(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantSettings/GetAllSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = TenantSettingsEditDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateAllSettings(body: TenantSettingsEditDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantSettings/UpdateAllSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateAllSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateAllSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateAllSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n clearLogo(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantSettings/ClearLogo\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processClearLogo(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processClearLogo(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processClearLogo(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n clearCustomCss(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantSettings/ClearCustomCss\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processClearCustomCss(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processClearCustomCss(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processClearCustomCss(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n sendTestEmail(body: SendTestEmailInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantSettings/SendTestEmail\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSendTestEmail(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSendTestEmail(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSendTestEmail(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getEnabledSocialLoginSettings(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/TenantSettings/GetEnabledSocialLoginSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetEnabledSocialLoginSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetEnabledSocialLoginSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetEnabledSocialLoginSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ExternalLoginSettingsDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class TimingServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getTimezones(defaultTimezoneScope: SettingScopes): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Timing/GetTimezones?\";\r\n if (defaultTimezoneScope === undefined || defaultTimezoneScope === null)\r\n throw new Error(\"The parameter 'defaultTimezoneScope' must be defined and cannot be null.\");\r\n else\r\n url_ += \"DefaultTimezoneScope=\" + encodeURIComponent(\"\" + defaultTimezoneScope) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetTimezones(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetTimezones(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetTimezones(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = NameValueDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param selectedTimezoneId (optional) \r\n * @return Success\r\n */\r\n getTimezoneComboboxItems(selectedTimezoneId: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/Timing/GetTimezoneComboboxItems?\";\r\n if (selectedTimezoneId === null)\r\n throw new Error(\"The parameter 'selectedTimezoneId' cannot be null.\");\r\n else if (selectedTimezoneId !== undefined)\r\n url_ += \"SelectedTimezoneId=\" + encodeURIComponent(\"\" + selectedTimezoneId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetTimezoneComboboxItems(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetTimezoneComboboxItems(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetTimezoneComboboxItems(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(ComboboxItemDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class TokenAuthServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n authenticate(body: AuthenticateModel | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/TokenAuth/Authenticate\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processAuthenticate(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processAuthenticate(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processAuthenticate(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = AuthenticateResultModel.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n easyAuthenticate(body: EasyAuthenticateModel | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/TokenAuth/EasyAuthenticate\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processEasyAuthenticate(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processEasyAuthenticate(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processEasyAuthenticate(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = AuthenticateResultModel.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param refreshToken (optional) \r\n * @return Success\r\n */\r\n refreshToken(refreshToken: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/TokenAuth/RefreshToken?\";\r\n if (refreshToken === null)\r\n throw new Error(\"The parameter 'refreshToken' cannot be null.\");\r\n else if (refreshToken !== undefined)\r\n url_ += \"refreshToken=\" + encodeURIComponent(\"\" + refreshToken) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRefreshToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRefreshToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRefreshToken(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = RefreshTokenResult.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n logOut(): Observable {\r\n let url_ = this.baseUrl + \"/api/TokenAuth/LogOut\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLogOut(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLogOut(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processLogOut(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n sendTwoFactorAuthCode(body: SendTwoFactorAuthCodeModel | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/TokenAuth/SendTwoFactorAuthCode\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSendTwoFactorAuthCode(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSendTwoFactorAuthCode(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processSendTwoFactorAuthCode(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param impersonationToken (optional) \r\n * @return Success\r\n */\r\n impersonatedAuthenticate(impersonationToken: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/TokenAuth/ImpersonatedAuthenticate?\";\r\n if (impersonationToken === null)\r\n throw new Error(\"The parameter 'impersonationToken' cannot be null.\");\r\n else if (impersonationToken !== undefined)\r\n url_ += \"impersonationToken=\" + encodeURIComponent(\"\" + impersonationToken) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processImpersonatedAuthenticate(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processImpersonatedAuthenticate(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processImpersonatedAuthenticate(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ImpersonatedAuthenticateResultModel.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param userDelegationId (optional) \r\n * @param impersonationToken (optional) \r\n * @return Success\r\n */\r\n delegatedImpersonatedAuthenticate(userDelegationId: number | undefined, impersonationToken: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/TokenAuth/DelegatedImpersonatedAuthenticate?\";\r\n if (userDelegationId === null)\r\n throw new Error(\"The parameter 'userDelegationId' cannot be null.\");\r\n else if (userDelegationId !== undefined)\r\n url_ += \"userDelegationId=\" + encodeURIComponent(\"\" + userDelegationId) + \"&\";\r\n if (impersonationToken === null)\r\n throw new Error(\"The parameter 'impersonationToken' cannot be null.\");\r\n else if (impersonationToken !== undefined)\r\n url_ += \"impersonationToken=\" + encodeURIComponent(\"\" + impersonationToken) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelegatedImpersonatedAuthenticate(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelegatedImpersonatedAuthenticate(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelegatedImpersonatedAuthenticate(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ImpersonatedAuthenticateResultModel.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param switchAccountToken (optional) \r\n * @return Success\r\n */\r\n linkedAccountAuthenticate(switchAccountToken: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/TokenAuth/LinkedAccountAuthenticate?\";\r\n if (switchAccountToken === null)\r\n throw new Error(\"The parameter 'switchAccountToken' cannot be null.\");\r\n else if (switchAccountToken !== undefined)\r\n url_ += \"switchAccountToken=\" + encodeURIComponent(\"\" + switchAccountToken) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLinkedAccountAuthenticate(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLinkedAccountAuthenticate(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processLinkedAccountAuthenticate(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = SwitchedAccountAuthenticateResultModel.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getExternalAuthenticationProviders(): Observable {\r\n let url_ = this.baseUrl + \"/api/TokenAuth/GetExternalAuthenticationProviders\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetExternalAuthenticationProviders(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetExternalAuthenticationProviders(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetExternalAuthenticationProviders(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(ExternalLoginProviderInfoModel.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n externalAuthenticate(body: ExternalAuthenticateModel | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/TokenAuth/ExternalAuthenticate\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processExternalAuthenticate(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processExternalAuthenticate(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processExternalAuthenticate(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = ExternalAuthenticateResultModel.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param message (optional) \r\n * @param severity (optional) \r\n * @return Success\r\n */\r\n testNotification(message: string | undefined, severity: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/TokenAuth/TestNotification?\";\r\n if (message === null)\r\n throw new Error(\"The parameter 'message' cannot be null.\");\r\n else if (message !== undefined)\r\n url_ += \"message=\" + encodeURIComponent(\"\" + message) + \"&\";\r\n if (severity === null)\r\n throw new Error(\"The parameter 'severity' cannot be null.\");\r\n else if (severity !== undefined)\r\n url_ += \"severity=\" + encodeURIComponent(\"\" + severity) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processTestNotification(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processTestNotification(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processTestNotification(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class TwitterServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getRequestToken(): Observable {\r\n let url_ = this.baseUrl + \"/api/Twitter/GetRequestToken\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetRequestToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetRequestToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetRequestToken(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = TwitterGetRequestTokenResponse.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param token (optional) \r\n * @param verifier (optional) \r\n * @return Success\r\n */\r\n getAccessToken(token: string | undefined, verifier: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/Twitter/GetAccessToken?\";\r\n if (token === null)\r\n throw new Error(\"The parameter 'token' cannot be null.\");\r\n else if (token !== undefined)\r\n url_ += \"token=\" + encodeURIComponent(\"\" + token) + \"&\";\r\n if (verifier === null)\r\n throw new Error(\"The parameter 'verifier' cannot be null.\");\r\n else if (verifier !== undefined)\r\n url_ += \"verifier=\" + encodeURIComponent(\"\" + verifier) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAccessToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAccessToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAccessToken(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = TwitterGetAccessTokenResponse.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class UiCustomizationSettingsServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getUiManagementSettings(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UiCustomizationSettings/GetUiManagementSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetUiManagementSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetUiManagementSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetUiManagementSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(ThemeSettingsDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param themeName (optional) \r\n * @return Success\r\n */\r\n changeThemeWithDefaultValues(themeName: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UiCustomizationSettings/ChangeThemeWithDefaultValues?\";\r\n if (themeName === null)\r\n throw new Error(\"The parameter 'themeName' cannot be null.\");\r\n else if (themeName !== undefined)\r\n url_ += \"themeName=\" + encodeURIComponent(\"\" + themeName) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processChangeThemeWithDefaultValues(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processChangeThemeWithDefaultValues(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processChangeThemeWithDefaultValues(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateUiManagementSettings(body: ThemeSettingsDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UiCustomizationSettings/UpdateUiManagementSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateUiManagementSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateUiManagementSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateUiManagementSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateDefaultUiManagementSettings(body: ThemeSettingsDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UiCustomizationSettings/UpdateDefaultUiManagementSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateDefaultUiManagementSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateDefaultUiManagementSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateDefaultUiManagementSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n useSystemDefaultSettings(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UiCustomizationSettings/UseSystemDefaultSettings\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUseSystemDefaultSettings(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUseSystemDefaultSettings(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUseSystemDefaultSettings(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param isDarkModeActive (optional) \r\n * @return Success\r\n */\r\n changeDarkModeOfCurrentTheme(isDarkModeActive: boolean | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UiCustomizationSettings/ChangeDarkModeOfCurrentTheme?\";\r\n if (isDarkModeActive === null)\r\n throw new Error(\"The parameter 'isDarkModeActive' cannot be null.\");\r\n else if (isDarkModeActive !== undefined)\r\n url_ += \"isDarkModeActive=\" + encodeURIComponent(\"\" + isDarkModeActive) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processChangeDarkModeOfCurrentTheme(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processChangeDarkModeOfCurrentTheme(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processChangeDarkModeOfCurrentTheme(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class UserServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getCurrentUser(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/User/GetCurrentUser\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetCurrentUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetCurrentUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetCurrentUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = UserListDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n loginInputCaseSensetivity(body: UserLoginInputDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/User/LoginInputCaseSensetivity\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginInputCaseSensetivity(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginInputCaseSensetivity(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processLoginInputCaseSensetivity(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = UserLoginOutputDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n getUsers(body: GetUsersInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/User/GetUsers\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetUsers(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetUsers(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetUsers(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = UserListDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param permissions (optional) \r\n * @param role (optional) \r\n * @param onlyLockedUsers (optional) \r\n * @param sorting (optional) \r\n * @return Success\r\n */\r\n getUsersToExcel(filter: string | undefined, permissions: string[] | undefined, role: number | undefined, onlyLockedUsers: boolean | undefined, sorting: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/User/GetUsersToExcel?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (permissions === null)\r\n throw new Error(\"The parameter 'permissions' cannot be null.\");\r\n else if (permissions !== undefined)\r\n permissions && permissions.forEach(item => { url_ += \"Permissions=\" + encodeURIComponent(\"\" + item) + \"&\"; });\r\n if (role === null)\r\n throw new Error(\"The parameter 'role' cannot be null.\");\r\n else if (role !== undefined)\r\n url_ += \"Role=\" + encodeURIComponent(\"\" + role) + \"&\";\r\n if (onlyLockedUsers === null)\r\n throw new Error(\"The parameter 'onlyLockedUsers' cannot be null.\");\r\n else if (onlyLockedUsers !== undefined)\r\n url_ += \"OnlyLockedUsers=\" + encodeURIComponent(\"\" + onlyLockedUsers) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetUsersToExcel(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetUsersToExcel(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetUsersToExcel(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FileDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getUserForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/User/GetUserForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetUserForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetUserForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetUserForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetUserForEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getUserPermissionsForEdit(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/User/GetUserPermissionsForEdit?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetUserPermissionsForEdit(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetUserPermissionsForEdit(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetUserPermissionsForEdit(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetUserPermissionsForEditOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n resetUserSpecificPermissions(body: Int64EntityDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/User/ResetUserSpecificPermissions\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processResetUserSpecificPermissions(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processResetUserSpecificPermissions(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processResetUserSpecificPermissions(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateUserPermissions(body: UpdateUserPermissionsInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/User/UpdateUserPermissions\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateUserPermissions(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateUserPermissions(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateUserPermissions(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n createOrUpdateUser(body: CreateOrUpdateUserInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/User/CreateOrUpdateUser\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processCreateOrUpdateUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processCreateOrUpdateUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processCreateOrUpdateUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n deleteUser(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/User/DeleteUser?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDeleteUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDeleteUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDeleteUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n unlockUser(body: Int64EntityDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/User/UnlockUser\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUnlockUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUnlockUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUnlockUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class UserDelegationServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @param sorting (optional) \r\n * @return Success\r\n */\r\n getDelegatedUsers(maxResultCount: number | undefined, skipCount: number | undefined, sorting: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UserDelegation/GetDelegatedUsers?\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetDelegatedUsers(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetDelegatedUsers(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetDelegatedUsers(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = UserDelegationDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n delegateNewUser(body: CreateUserDelegationDto | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UserDelegation/DelegateNewUser\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDelegateNewUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDelegateNewUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDelegateNewUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n removeDelegation(id: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UserDelegation/RemoveDelegation?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRemoveDelegation(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRemoveDelegation(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processRemoveDelegation(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getActiveUserDelegations(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UserDelegation/GetActiveUserDelegations\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetActiveUserDelegations(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetActiveUserDelegations(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetActiveUserDelegations(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n if (Array.isArray(resultData200)) {\r\n result200 = [] as any;\r\n for (let item of resultData200)\r\n result200!.push(UserDelegationDto.fromJS(item));\r\n }\r\n else {\r\n result200 = null;\r\n }\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class UserLinkServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n linkToUser(body: LinkToUserInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UserLink/LinkToUser\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLinkToUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLinkToUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processLinkToUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @param sorting (optional) \r\n * @return Success\r\n */\r\n getLinkedUsers(maxResultCount: number | undefined, skipCount: number | undefined, sorting: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UserLink/GetLinkedUsers?\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetLinkedUsers(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetLinkedUsers(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetLinkedUsers(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = LinkedUserDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getRecentlyUsedLinkedUsers(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UserLink/GetRecentlyUsedLinkedUsers\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetRecentlyUsedLinkedUsers(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetRecentlyUsedLinkedUsers(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetRecentlyUsedLinkedUsers(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = LinkedUserDtoListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n unlinkUser(body: UnlinkUserInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UserLink/UnlinkUser\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUnlinkUser(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUnlinkUser(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUnlinkUser(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class UserLoginServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param filter (optional) \r\n * @param startDate (optional) \r\n * @param endDate (optional) \r\n * @param result (optional) \r\n * @param sorting (optional) \r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @return Success\r\n */\r\n getUserLoginAttempts(filter: string | undefined, startDate: DateTime | undefined, endDate: DateTime | undefined, result: AbpLoginResultType | undefined, sorting: string | undefined, maxResultCount: number | undefined, skipCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/UserLogin/GetUserLoginAttempts?\";\r\n if (filter === null)\r\n throw new Error(\"The parameter 'filter' cannot be null.\");\r\n else if (filter !== undefined)\r\n url_ += \"Filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\r\n if (startDate === null)\r\n throw new Error(\"The parameter 'startDate' cannot be null.\");\r\n else if (startDate !== undefined)\r\n url_ += \"StartDate=\" + encodeURIComponent(startDate ? \"\" + startDate.toString() : \"\") + \"&\";\r\n if (endDate === null)\r\n throw new Error(\"The parameter 'endDate' cannot be null.\");\r\n else if (endDate !== undefined)\r\n url_ += \"EndDate=\" + encodeURIComponent(endDate ? \"\" + endDate.toString() : \"\") + \"&\";\r\n if (result === null)\r\n throw new Error(\"The parameter 'result' cannot be null.\");\r\n else if (result !== undefined)\r\n url_ += \"Result=\" + encodeURIComponent(\"\" + result) + \"&\";\r\n if (sorting === null)\r\n throw new Error(\"The parameter 'sorting' cannot be null.\");\r\n else if (sorting !== undefined)\r\n url_ += \"Sorting=\" + encodeURIComponent(\"\" + sorting) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetUserLoginAttempts(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetUserLoginAttempts(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetUserLoginAttempts(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = UserLoginAttemptDtoPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class WebhookEventServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n get(id: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookEvent/Get?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGet(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGet(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGet(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = WebhookEvent.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class WebhookSendAttemptServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @param subscriptionId (optional) \r\n * @param maxResultCount (optional) \r\n * @param skipCount (optional) \r\n * @return Success\r\n */\r\n getAllSendAttempts(subscriptionId: string | undefined, maxResultCount: number | undefined, skipCount: number | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookSendAttempt/GetAllSendAttempts?\";\r\n if (subscriptionId === null)\r\n throw new Error(\"The parameter 'subscriptionId' cannot be null.\");\r\n else if (subscriptionId !== undefined)\r\n url_ += \"SubscriptionId=\" + encodeURIComponent(\"\" + subscriptionId) + \"&\";\r\n if (maxResultCount === null)\r\n throw new Error(\"The parameter 'maxResultCount' cannot be null.\");\r\n else if (maxResultCount !== undefined)\r\n url_ += \"MaxResultCount=\" + encodeURIComponent(\"\" + maxResultCount) + \"&\";\r\n if (skipCount === null)\r\n throw new Error(\"The parameter 'skipCount' cannot be null.\");\r\n else if (skipCount !== undefined)\r\n url_ += \"SkipCount=\" + encodeURIComponent(\"\" + skipCount) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllSendAttempts(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllSendAttempts(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllSendAttempts(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetAllSendAttemptsOutputPagedResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param id (optional) \r\n * @return Success\r\n */\r\n getAllSendAttemptsOfWebhookEvent(id: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookSendAttempt/GetAllSendAttemptsOfWebhookEvent?\";\r\n if (id === null)\r\n throw new Error(\"The parameter 'id' cannot be null.\");\r\n else if (id !== undefined)\r\n url_ += \"Id=\" + encodeURIComponent(\"\" + id) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllSendAttemptsOfWebhookEvent(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllSendAttemptsOfWebhookEvent(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllSendAttemptsOfWebhookEvent(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetAllSendAttemptsOfWebhookEventOutputListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param sendAttemptId (optional) \r\n * @return Success\r\n */\r\n resend(sendAttemptId: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookSendAttempt/Resend?\";\r\n if (sendAttemptId === null)\r\n throw new Error(\"The parameter 'sendAttemptId' cannot be null.\");\r\n else if (sendAttemptId !== undefined)\r\n url_ += \"sendAttemptId=\" + encodeURIComponent(\"\" + sendAttemptId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processResend(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processResend(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processResend(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class WebhookSubscriptionServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n publishTestWebhook(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookSubscription/PublishTestWebhook\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processPublishTestWebhook(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processPublishTestWebhook(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processPublishTestWebhook(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n \r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllSubscriptions(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookSubscription/GetAllSubscriptions\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllSubscriptions(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllSubscriptions(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllSubscriptions(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetAllSubscriptionsOutputListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param subscriptionId (optional) \r\n * @return Success\r\n */\r\n getSubscription(subscriptionId: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookSubscription/GetSubscription?\";\r\n if (subscriptionId === null)\r\n throw new Error(\"The parameter 'subscriptionId' cannot be null.\");\r\n else if (subscriptionId !== undefined)\r\n url_ += \"subscriptionId=\" + encodeURIComponent(\"\" + subscriptionId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetSubscription(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetSubscription(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetSubscription(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = WebhookSubscription.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n addSubscription(body: WebhookSubscription | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookSubscription/AddSubscription\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processAddSubscription(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processAddSubscription(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processAddSubscription(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n updateSubscription(body: WebhookSubscription | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookSubscription/UpdateSubscription\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"put\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processUpdateSubscription(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processUpdateSubscription(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processUpdateSubscription(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n activateWebhookSubscription(body: ActivateWebhookSubscriptionInput | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookSubscription/ActivateWebhookSubscription\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json-patch+json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processActivateWebhookSubscription(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processActivateWebhookSubscription(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processActivateWebhookSubscription(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param webhookName (optional) \r\n * @return Success\r\n */\r\n isSubscribed(webhookName: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookSubscription/IsSubscribed?\";\r\n if (webhookName === null)\r\n throw new Error(\"The parameter 'webhookName' cannot be null.\");\r\n else if (webhookName !== undefined)\r\n url_ += \"webhookName=\" + encodeURIComponent(\"\" + webhookName) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processIsSubscribed(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processIsSubscribed(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processIsSubscribed(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = resultData200 !== undefined ? resultData200 : null;\r\n \r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @param webhookName (optional) \r\n * @return Success\r\n */\r\n getAllSubscriptionsIfFeaturesGranted(webhookName: string | undefined): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookSubscription/GetAllSubscriptionsIfFeaturesGranted?\";\r\n if (webhookName === null)\r\n throw new Error(\"The parameter 'webhookName' cannot be null.\");\r\n else if (webhookName !== undefined)\r\n url_ += \"webhookName=\" + encodeURIComponent(\"\" + webhookName) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllSubscriptionsIfFeaturesGranted(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllSubscriptionsIfFeaturesGranted(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllSubscriptionsIfFeaturesGranted(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetAllSubscriptionsOutputListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getAllAvailableWebhooks(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebhookSubscription/GetAllAvailableWebhooks\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetAllAvailableWebhooks(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetAllAvailableWebhooks(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetAllAvailableWebhooks(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetAllAvailableWebhooksOutputListResultDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class WebLogServiceProxy {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n getLatestWebLogs(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebLog/GetLatestWebLogs\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetLatestWebLogs(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetLatestWebLogs(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processGetLatestWebLogs(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = GetLatestWebLogsOutput.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n /**\r\n * @return Success\r\n */\r\n downloadWebLogs(): Observable {\r\n let url_ = this.baseUrl + \"/api/services/app/WebLog/DownloadWebLogs\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"text/plain\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processDownloadWebLogs(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processDownloadWebLogs(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable;\r\n }));\r\n }\r\n\r\n protected processDownloadWebLogs(response: HttpResponseBase): Observable {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n result200 = FileDto.fromJS(resultData200);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\nexport enum AbpLoginResultType {\r\n Success = 1,\r\n InvalidUserNameOrEmailAddress = 2,\r\n InvalidPassword = 3,\r\n UserIsNotActive = 4,\r\n InvalidTenancyName = 5,\r\n TenantIsNotActive = 6,\r\n UserEmailIsNotConfirmed = 7,\r\n UnknownExternalLogin = 8,\r\n LockedOut = 9,\r\n UserPhoneNumberIsNotConfirmed = 10,\r\n _Success = Success,\r\n _InvalidUserNameOrEmailAddress = InvalidUserNameOrEmailAddress,\r\n _InvalidPassword = InvalidPassword,\r\n _UserIsNotActive = UserIsNotActive,\r\n _InvalidTenancyName = InvalidTenancyName,\r\n _TenantIsNotActive = TenantIsNotActive,\r\n _UserEmailIsNotConfirmed = UserEmailIsNotConfirmed,\r\n _UnknownExternalLogin = UnknownExternalLogin,\r\n _LockedOut = LockedOut,\r\n _UserPhoneNumberIsNotConfirmed = UserPhoneNumberIsNotConfirmed,\r\n}\r\n\r\nexport class AcceptFriendshipRequestInput implements IAcceptFriendshipRequestInput {\r\n userId!: number;\r\n tenantId!: number | undefined;\r\n\r\n constructor(data?: IAcceptFriendshipRequestInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): AcceptFriendshipRequestInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new AcceptFriendshipRequestInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId;\r\n data[\"tenantId\"] = this.tenantId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IAcceptFriendshipRequestInput {\r\n userId: number;\r\n tenantId: number | undefined;\r\n}\r\n\r\nexport class ActivateEmailInput implements IActivateEmailInput {\r\n userId!: number;\r\n confirmationCode!: string | undefined;\r\n c!: string | undefined;\r\n\r\n constructor(data?: IActivateEmailInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"];\r\n this.confirmationCode = _data[\"confirmationCode\"];\r\n this.c = _data[\"c\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ActivateEmailInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ActivateEmailInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId;\r\n data[\"confirmationCode\"] = this.confirmationCode;\r\n data[\"c\"] = this.c;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IActivateEmailInput {\r\n userId: number;\r\n confirmationCode: string | undefined;\r\n c: string | undefined;\r\n}\r\n\r\nexport class ActivateWebhookSubscriptionInput implements IActivateWebhookSubscriptionInput {\r\n subscriptionId!: string;\r\n isActive!: boolean;\r\n\r\n constructor(data?: IActivateWebhookSubscriptionInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.subscriptionId = _data[\"subscriptionId\"];\r\n this.isActive = _data[\"isActive\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ActivateWebhookSubscriptionInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ActivateWebhookSubscriptionInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"subscriptionId\"] = this.subscriptionId;\r\n data[\"isActive\"] = this.isActive;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IActivateWebhookSubscriptionInput {\r\n subscriptionId: string;\r\n isActive: boolean;\r\n}\r\n\r\nexport class AddNewPageInput implements IAddNewPageInput {\r\n dashboardName!: string | undefined;\r\n name!: string | undefined;\r\n application!: string | undefined;\r\n\r\n constructor(data?: IAddNewPageInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.dashboardName = _data[\"dashboardName\"];\r\n this.name = _data[\"name\"];\r\n this.application = _data[\"application\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): AddNewPageInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new AddNewPageInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"dashboardName\"] = this.dashboardName;\r\n data[\"name\"] = this.name;\r\n data[\"application\"] = this.application;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IAddNewPageInput {\r\n dashboardName: string | undefined;\r\n name: string | undefined;\r\n application: string | undefined;\r\n}\r\n\r\nexport class AddNewPageOutput implements IAddNewPageOutput {\r\n pageId!: string | undefined;\r\n\r\n constructor(data?: IAddNewPageOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.pageId = _data[\"pageId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): AddNewPageOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new AddNewPageOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"pageId\"] = this.pageId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IAddNewPageOutput {\r\n pageId: string | undefined;\r\n}\r\n\r\nexport class AddWidgetInput implements IAddWidgetInput {\r\n widgetId!: string | undefined;\r\n pageId!: string | undefined;\r\n dashboardName!: string | undefined;\r\n width!: number;\r\n height!: number;\r\n application!: string | undefined;\r\n\r\n constructor(data?: IAddWidgetInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.widgetId = _data[\"widgetId\"];\r\n this.pageId = _data[\"pageId\"];\r\n this.dashboardName = _data[\"dashboardName\"];\r\n this.width = _data[\"width\"];\r\n this.height = _data[\"height\"];\r\n this.application = _data[\"application\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): AddWidgetInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new AddWidgetInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"widgetId\"] = this.widgetId;\r\n data[\"pageId\"] = this.pageId;\r\n data[\"dashboardName\"] = this.dashboardName;\r\n data[\"width\"] = this.width;\r\n data[\"height\"] = this.height;\r\n data[\"application\"] = this.application;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IAddWidgetInput {\r\n widgetId: string | undefined;\r\n pageId: string | undefined;\r\n dashboardName: string | undefined;\r\n width: number;\r\n height: number;\r\n application: string | undefined;\r\n}\r\n\r\nexport class AppSettingsJsonDto implements IAppSettingsJsonDto {\r\n webSiteUrl!: string | undefined;\r\n serverSiteUrl!: string | undefined;\r\n languages!: NameValue[] | undefined;\r\n\r\n constructor(data?: IAppSettingsJsonDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.webSiteUrl = _data[\"webSiteUrl\"];\r\n this.serverSiteUrl = _data[\"serverSiteUrl\"];\r\n if (Array.isArray(_data[\"languages\"])) {\r\n this.languages = [] as any;\r\n for (let item of _data[\"languages\"])\r\n this.languages!.push(NameValue.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): AppSettingsJsonDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new AppSettingsJsonDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"webSiteUrl\"] = this.webSiteUrl;\r\n data[\"serverSiteUrl\"] = this.serverSiteUrl;\r\n if (Array.isArray(this.languages)) {\r\n data[\"languages\"] = [];\r\n for (let item of this.languages)\r\n data[\"languages\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IAppSettingsJsonDto {\r\n webSiteUrl: string | undefined;\r\n serverSiteUrl: string | undefined;\r\n languages: NameValue[] | undefined;\r\n}\r\n\r\nexport class AppUrlForLanguageDto implements IAppUrlForLanguageDto {\r\n url!: string | undefined;\r\n language!: string | undefined;\r\n\r\n constructor(data?: IAppUrlForLanguageDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.url = _data[\"url\"];\r\n this.language = _data[\"language\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): AppUrlForLanguageDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new AppUrlForLanguageDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"url\"] = this.url;\r\n data[\"language\"] = this.language;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IAppUrlForLanguageDto {\r\n url: string | undefined;\r\n language: string | undefined;\r\n}\r\n\r\nexport class ApplicationInfoDto implements IApplicationInfoDto {\r\n version!: string | undefined;\r\n releaseDate!: DateTime;\r\n currency!: string | undefined;\r\n currencySign!: string | undefined;\r\n allowTenantsToChangeEmailSettings!: boolean;\r\n userDelegationIsEnabled!: boolean;\r\n twoFactorCodeExpireSeconds!: number;\r\n features!: { [key: string]: boolean; } | undefined;\r\n\r\n constructor(data?: IApplicationInfoDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.version = _data[\"version\"];\r\n this.releaseDate = _data[\"releaseDate\"] ? DateTime.fromISO(_data[\"releaseDate\"].toString()) : undefined;\r\n this.currency = _data[\"currency\"];\r\n this.currencySign = _data[\"currencySign\"];\r\n this.allowTenantsToChangeEmailSettings = _data[\"allowTenantsToChangeEmailSettings\"];\r\n this.userDelegationIsEnabled = _data[\"userDelegationIsEnabled\"];\r\n this.twoFactorCodeExpireSeconds = _data[\"twoFactorCodeExpireSeconds\"];\r\n if (_data[\"features\"]) {\r\n this.features = {} as any;\r\n for (let key in _data[\"features\"]) {\r\n if (_data[\"features\"].hasOwnProperty(key))\r\n (this.features)![key] = _data[\"features\"][key];\r\n }\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): ApplicationInfoDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ApplicationInfoDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"version\"] = this.version;\r\n data[\"releaseDate\"] = this.releaseDate ? this.releaseDate.toString() : undefined;\r\n data[\"currency\"] = this.currency;\r\n data[\"currencySign\"] = this.currencySign;\r\n data[\"allowTenantsToChangeEmailSettings\"] = this.allowTenantsToChangeEmailSettings;\r\n data[\"userDelegationIsEnabled\"] = this.userDelegationIsEnabled;\r\n data[\"twoFactorCodeExpireSeconds\"] = this.twoFactorCodeExpireSeconds;\r\n if (this.features) {\r\n data[\"features\"] = {};\r\n for (let key in this.features) {\r\n if (this.features.hasOwnProperty(key))\r\n (data[\"features\"])[key] = (this.features)[key];\r\n }\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IApplicationInfoDto {\r\n version: string | undefined;\r\n releaseDate: DateTime;\r\n currency: string | undefined;\r\n currencySign: string | undefined;\r\n allowTenantsToChangeEmailSettings: boolean;\r\n userDelegationIsEnabled: boolean;\r\n twoFactorCodeExpireSeconds: number;\r\n features: { [key: string]: boolean; } | undefined;\r\n}\r\n\r\nexport class ApplicationLanguageEditDto implements IApplicationLanguageEditDto {\r\n id!: number | undefined;\r\n name!: string;\r\n icon!: string | undefined;\r\n isEnabled!: boolean;\r\n\r\n constructor(data?: IApplicationLanguageEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.name = _data[\"name\"];\r\n this.icon = _data[\"icon\"];\r\n this.isEnabled = _data[\"isEnabled\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ApplicationLanguageEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ApplicationLanguageEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"name\"] = this.name;\r\n data[\"icon\"] = this.icon;\r\n data[\"isEnabled\"] = this.isEnabled;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IApplicationLanguageEditDto {\r\n id: number | undefined;\r\n name: string;\r\n icon: string | undefined;\r\n isEnabled: boolean;\r\n}\r\n\r\nexport class ApplicationLanguageListDto implements IApplicationLanguageListDto {\r\n tenantId!: number | undefined;\r\n name!: string | undefined;\r\n displayName!: string | undefined;\r\n icon!: string | undefined;\r\n isDisabled!: boolean;\r\n isDeleted!: boolean;\r\n deleterUserId!: number | undefined;\r\n deletionTime!: DateTime | undefined;\r\n lastModificationTime!: DateTime | undefined;\r\n lastModifierUserId!: number | undefined;\r\n creationTime!: DateTime;\r\n creatorUserId!: number | undefined;\r\n id!: number;\r\n\r\n constructor(data?: IApplicationLanguageListDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenantId = _data[\"tenantId\"];\r\n this.name = _data[\"name\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.icon = _data[\"icon\"];\r\n this.isDisabled = _data[\"isDisabled\"];\r\n this.isDeleted = _data[\"isDeleted\"];\r\n this.deleterUserId = _data[\"deleterUserId\"];\r\n this.deletionTime = _data[\"deletionTime\"] ? DateTime.fromISO(_data[\"deletionTime\"].toString()) : undefined;\r\n this.lastModificationTime = _data[\"lastModificationTime\"] ? DateTime.fromISO(_data[\"lastModificationTime\"].toString()) : undefined;\r\n this.lastModifierUserId = _data[\"lastModifierUserId\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n this.creatorUserId = _data[\"creatorUserId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ApplicationLanguageListDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ApplicationLanguageListDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"name\"] = this.name;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"icon\"] = this.icon;\r\n data[\"isDisabled\"] = this.isDisabled;\r\n data[\"isDeleted\"] = this.isDeleted;\r\n data[\"deleterUserId\"] = this.deleterUserId;\r\n data[\"deletionTime\"] = this.deletionTime ? this.deletionTime.toString() : undefined;\r\n data[\"lastModificationTime\"] = this.lastModificationTime ? this.lastModificationTime.toString() : undefined;\r\n data[\"lastModifierUserId\"] = this.lastModifierUserId;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n data[\"creatorUserId\"] = this.creatorUserId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IApplicationLanguageListDto {\r\n tenantId: number | undefined;\r\n name: string | undefined;\r\n displayName: string | undefined;\r\n icon: string | undefined;\r\n isDisabled: boolean;\r\n isDeleted: boolean;\r\n deleterUserId: number | undefined;\r\n deletionTime: DateTime | undefined;\r\n lastModificationTime: DateTime | undefined;\r\n lastModifierUserId: number | undefined;\r\n creationTime: DateTime;\r\n creatorUserId: number | undefined;\r\n id: number;\r\n}\r\n\r\nexport class AuditLogListDto implements IAuditLogListDto {\r\n userId!: number | undefined;\r\n userName!: string | undefined;\r\n impersonatorTenantId!: number | undefined;\r\n impersonatorUserId!: number | undefined;\r\n serviceName!: string | undefined;\r\n methodName!: string | undefined;\r\n parameters!: string | undefined;\r\n executionTime!: DateTime;\r\n executionDuration!: number;\r\n clientIpAddress!: string | undefined;\r\n clientName!: string | undefined;\r\n browserInfo!: string | undefined;\r\n exception!: string | undefined;\r\n customData!: string | undefined;\r\n id!: number;\r\n\r\n constructor(data?: IAuditLogListDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"];\r\n this.userName = _data[\"userName\"];\r\n this.impersonatorTenantId = _data[\"impersonatorTenantId\"];\r\n this.impersonatorUserId = _data[\"impersonatorUserId\"];\r\n this.serviceName = _data[\"serviceName\"];\r\n this.methodName = _data[\"methodName\"];\r\n this.parameters = _data[\"parameters\"];\r\n this.executionTime = _data[\"executionTime\"] ? DateTime.fromISO(_data[\"executionTime\"].toString()) : undefined;\r\n this.executionDuration = _data[\"executionDuration\"];\r\n this.clientIpAddress = _data[\"clientIpAddress\"];\r\n this.clientName = _data[\"clientName\"];\r\n this.browserInfo = _data[\"browserInfo\"];\r\n this.exception = _data[\"exception\"];\r\n this.customData = _data[\"customData\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): AuditLogListDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new AuditLogListDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId;\r\n data[\"userName\"] = this.userName;\r\n data[\"impersonatorTenantId\"] = this.impersonatorTenantId;\r\n data[\"impersonatorUserId\"] = this.impersonatorUserId;\r\n data[\"serviceName\"] = this.serviceName;\r\n data[\"methodName\"] = this.methodName;\r\n data[\"parameters\"] = this.parameters;\r\n data[\"executionTime\"] = this.executionTime ? this.executionTime.toString() : undefined;\r\n data[\"executionDuration\"] = this.executionDuration;\r\n data[\"clientIpAddress\"] = this.clientIpAddress;\r\n data[\"clientName\"] = this.clientName;\r\n data[\"browserInfo\"] = this.browserInfo;\r\n data[\"exception\"] = this.exception;\r\n data[\"customData\"] = this.customData;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IAuditLogListDto {\r\n userId: number | undefined;\r\n userName: string | undefined;\r\n impersonatorTenantId: number | undefined;\r\n impersonatorUserId: number | undefined;\r\n serviceName: string | undefined;\r\n methodName: string | undefined;\r\n parameters: string | undefined;\r\n executionTime: DateTime;\r\n executionDuration: number;\r\n clientIpAddress: string | undefined;\r\n clientName: string | undefined;\r\n browserInfo: string | undefined;\r\n exception: string | undefined;\r\n customData: string | undefined;\r\n id: number;\r\n}\r\n\r\nexport class AuditLogListDtoPagedResultDto implements IAuditLogListDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: AuditLogListDto[] | undefined;\r\n\r\n constructor(data?: IAuditLogListDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(AuditLogListDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): AuditLogListDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new AuditLogListDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IAuditLogListDtoPagedResultDto {\r\n totalCount: number;\r\n items: AuditLogListDto[] | undefined;\r\n}\r\n\r\nexport class AuthenticateModel implements IAuthenticateModel {\r\n userNameOrEmailAddress!: string;\r\n password!: string;\r\n twoFactorVerificationCode!: string | undefined;\r\n rememberClient!: boolean;\r\n twoFactorRememberClientToken!: string | undefined;\r\n singleSignIn!: boolean | undefined;\r\n returnUrl!: string | undefined;\r\n captchaResponse!: string | undefined;\r\n\r\n constructor(data?: IAuthenticateModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userNameOrEmailAddress = _data[\"userNameOrEmailAddress\"];\r\n this.password = _data[\"password\"];\r\n this.twoFactorVerificationCode = _data[\"twoFactorVerificationCode\"];\r\n this.rememberClient = _data[\"rememberClient\"];\r\n this.twoFactorRememberClientToken = _data[\"twoFactorRememberClientToken\"];\r\n this.singleSignIn = _data[\"singleSignIn\"];\r\n this.returnUrl = _data[\"returnUrl\"];\r\n this.captchaResponse = _data[\"captchaResponse\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): AuthenticateModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new AuthenticateModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userNameOrEmailAddress\"] = this.userNameOrEmailAddress;\r\n data[\"password\"] = this.password;\r\n data[\"twoFactorVerificationCode\"] = this.twoFactorVerificationCode;\r\n data[\"rememberClient\"] = this.rememberClient;\r\n data[\"twoFactorRememberClientToken\"] = this.twoFactorRememberClientToken;\r\n data[\"singleSignIn\"] = this.singleSignIn;\r\n data[\"returnUrl\"] = this.returnUrl;\r\n data[\"captchaResponse\"] = this.captchaResponse;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IAuthenticateModel {\r\n userNameOrEmailAddress: string;\r\n password: string;\r\n twoFactorVerificationCode: string | undefined;\r\n rememberClient: boolean;\r\n twoFactorRememberClientToken: string | undefined;\r\n singleSignIn: boolean | undefined;\r\n returnUrl: string | undefined;\r\n captchaResponse: string | undefined;\r\n}\r\n\r\nexport class AuthenticateResultModel implements IAuthenticateResultModel {\r\n accessToken!: string | undefined;\r\n encryptedAccessToken!: string | undefined;\r\n expireInSeconds!: number;\r\n shouldResetPassword!: boolean;\r\n passwordResetCode!: string | undefined;\r\n userId!: number;\r\n requiresTwoFactorVerification!: boolean;\r\n twoFactorAuthProviders!: string[] | undefined;\r\n twoFactorRememberClientToken!: string | undefined;\r\n returnUrl!: string | undefined;\r\n refreshToken!: string | undefined;\r\n refreshTokenExpireInSeconds!: number;\r\n\r\n constructor(data?: IAuthenticateResultModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.accessToken = _data[\"accessToken\"];\r\n this.encryptedAccessToken = _data[\"encryptedAccessToken\"];\r\n this.expireInSeconds = _data[\"expireInSeconds\"];\r\n this.shouldResetPassword = _data[\"shouldResetPassword\"];\r\n this.passwordResetCode = _data[\"passwordResetCode\"];\r\n this.userId = _data[\"userId\"];\r\n this.requiresTwoFactorVerification = _data[\"requiresTwoFactorVerification\"];\r\n if (Array.isArray(_data[\"twoFactorAuthProviders\"])) {\r\n this.twoFactorAuthProviders = [] as any;\r\n for (let item of _data[\"twoFactorAuthProviders\"])\r\n this.twoFactorAuthProviders!.push(item);\r\n }\r\n this.twoFactorRememberClientToken = _data[\"twoFactorRememberClientToken\"];\r\n this.returnUrl = _data[\"returnUrl\"];\r\n this.refreshToken = _data[\"refreshToken\"];\r\n this.refreshTokenExpireInSeconds = _data[\"refreshTokenExpireInSeconds\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): AuthenticateResultModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new AuthenticateResultModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"accessToken\"] = this.accessToken;\r\n data[\"encryptedAccessToken\"] = this.encryptedAccessToken;\r\n data[\"expireInSeconds\"] = this.expireInSeconds;\r\n data[\"shouldResetPassword\"] = this.shouldResetPassword;\r\n data[\"passwordResetCode\"] = this.passwordResetCode;\r\n data[\"userId\"] = this.userId;\r\n data[\"requiresTwoFactorVerification\"] = this.requiresTwoFactorVerification;\r\n if (Array.isArray(this.twoFactorAuthProviders)) {\r\n data[\"twoFactorAuthProviders\"] = [];\r\n for (let item of this.twoFactorAuthProviders)\r\n data[\"twoFactorAuthProviders\"].push(item);\r\n }\r\n data[\"twoFactorRememberClientToken\"] = this.twoFactorRememberClientToken;\r\n data[\"returnUrl\"] = this.returnUrl;\r\n data[\"refreshToken\"] = this.refreshToken;\r\n data[\"refreshTokenExpireInSeconds\"] = this.refreshTokenExpireInSeconds;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IAuthenticateResultModel {\r\n accessToken: string | undefined;\r\n encryptedAccessToken: string | undefined;\r\n expireInSeconds: number;\r\n shouldResetPassword: boolean;\r\n passwordResetCode: string | undefined;\r\n userId: number;\r\n requiresTwoFactorVerification: boolean;\r\n twoFactorAuthProviders: string[] | undefined;\r\n twoFactorRememberClientToken: string | undefined;\r\n returnUrl: string | undefined;\r\n refreshToken: string | undefined;\r\n refreshTokenExpireInSeconds: number;\r\n}\r\n\r\nexport class BlockUserInput implements IBlockUserInput {\r\n userId!: number;\r\n tenantId!: number | undefined;\r\n\r\n constructor(data?: IBlockUserInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): BlockUserInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new BlockUserInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId;\r\n data[\"tenantId\"] = this.tenantId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IBlockUserInput {\r\n userId: number;\r\n tenantId: number | undefined;\r\n}\r\n\r\nexport class CacheDto implements ICacheDto {\r\n name!: string | undefined;\r\n\r\n constructor(data?: ICacheDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CacheDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CacheDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICacheDto {\r\n name: string | undefined;\r\n}\r\n\r\nexport class CacheDtoListResultDto implements ICacheDtoListResultDto {\r\n items!: CacheDto[] | undefined;\r\n\r\n constructor(data?: ICacheDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(CacheDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): CacheDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CacheDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICacheDtoListResultDto {\r\n items: CacheDto[] | undefined;\r\n}\r\n\r\nexport class CancelPaymentDto implements ICancelPaymentDto {\r\n paymentId!: string | undefined;\r\n gateway!: SubscriptionPaymentGatewayType;\r\n\r\n constructor(data?: ICancelPaymentDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.paymentId = _data[\"paymentId\"];\r\n this.gateway = _data[\"gateway\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CancelPaymentDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CancelPaymentDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"paymentId\"] = this.paymentId;\r\n data[\"gateway\"] = this.gateway;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICancelPaymentDto {\r\n paymentId: string | undefined;\r\n gateway: SubscriptionPaymentGatewayType;\r\n}\r\n\r\nexport class ChangePasswordInput implements IChangePasswordInput {\r\n currentPassword!: string;\r\n newPassword!: string;\r\n\r\n constructor(data?: IChangePasswordInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.currentPassword = _data[\"currentPassword\"];\r\n this.newPassword = _data[\"newPassword\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ChangePasswordInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ChangePasswordInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"currentPassword\"] = this.currentPassword;\r\n data[\"newPassword\"] = this.newPassword;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IChangePasswordInput {\r\n currentPassword: string;\r\n newPassword: string;\r\n}\r\n\r\nexport class ChangeUserLanguageDto implements IChangeUserLanguageDto {\r\n languageName!: string;\r\n\r\n constructor(data?: IChangeUserLanguageDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.languageName = _data[\"languageName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ChangeUserLanguageDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ChangeUserLanguageDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"languageName\"] = this.languageName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IChangeUserLanguageDto {\r\n languageName: string;\r\n}\r\n\r\nexport enum ChartDateInterval {\r\n Daily = 1,\r\n Weekly = 2,\r\n Monthly = 3,\r\n _Daily = Daily,\r\n _Weekly = Weekly,\r\n _Monthly = Monthly,\r\n}\r\n\r\nexport class ChatMessageDto implements IChatMessageDto {\r\n userId!: number;\r\n tenantId!: number | undefined;\r\n targetUserId!: number;\r\n targetTenantId!: number | undefined;\r\n side!: ChatSide;\r\n readState!: ChatMessageReadState;\r\n receiverReadState!: ChatMessageReadState;\r\n message!: string | undefined;\r\n creationTime!: DateTime;\r\n sharedMessageId!: string | undefined;\r\n id!: number;\r\n\r\n constructor(data?: IChatMessageDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n this.targetUserId = _data[\"targetUserId\"];\r\n this.targetTenantId = _data[\"targetTenantId\"];\r\n this.side = _data[\"side\"];\r\n this.readState = _data[\"readState\"];\r\n this.receiverReadState = _data[\"receiverReadState\"];\r\n this.message = _data[\"message\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n this.sharedMessageId = _data[\"sharedMessageId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ChatMessageDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ChatMessageDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId;\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"targetUserId\"] = this.targetUserId;\r\n data[\"targetTenantId\"] = this.targetTenantId;\r\n data[\"side\"] = this.side;\r\n data[\"readState\"] = this.readState;\r\n data[\"receiverReadState\"] = this.receiverReadState;\r\n data[\"message\"] = this.message;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n data[\"sharedMessageId\"] = this.sharedMessageId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IChatMessageDto {\r\n userId: number;\r\n tenantId: number | undefined;\r\n targetUserId: number;\r\n targetTenantId: number | undefined;\r\n side: ChatSide;\r\n readState: ChatMessageReadState;\r\n receiverReadState: ChatMessageReadState;\r\n message: string | undefined;\r\n creationTime: DateTime;\r\n sharedMessageId: string | undefined;\r\n id: number;\r\n}\r\n\r\nexport class ChatMessageDtoListResultDto implements IChatMessageDtoListResultDto {\r\n items!: ChatMessageDto[] | undefined;\r\n\r\n constructor(data?: IChatMessageDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(ChatMessageDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): ChatMessageDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ChatMessageDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IChatMessageDtoListResultDto {\r\n items: ChatMessageDto[] | undefined;\r\n}\r\n\r\nexport enum ChatMessageReadState {\r\n Unread = 1,\r\n Read = 2,\r\n _Unread = Unread,\r\n _Read = Read,\r\n}\r\n\r\nexport enum ChatSide {\r\n Sender = 1,\r\n Receiver = 2,\r\n _Sender = Sender,\r\n _Receiver = Receiver,\r\n}\r\n\r\nexport class CheckDatabaseOutput implements ICheckDatabaseOutput {\r\n isDatabaseExist!: boolean;\r\n\r\n constructor(data?: ICheckDatabaseOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.isDatabaseExist = _data[\"isDatabaseExist\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CheckDatabaseOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CheckDatabaseOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"isDatabaseExist\"] = this.isDatabaseExist;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICheckDatabaseOutput {\r\n isDatabaseExist: boolean;\r\n}\r\n\r\nexport class CleanValuesInput implements ICleanValuesInput {\r\n dynamicEntityPropertyId!: number;\r\n entityId!: string | undefined;\r\n\r\n constructor(data?: ICleanValuesInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.dynamicEntityPropertyId = _data[\"dynamicEntityPropertyId\"];\r\n this.entityId = _data[\"entityId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CleanValuesInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CleanValuesInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"dynamicEntityPropertyId\"] = this.dynamicEntityPropertyId;\r\n data[\"entityId\"] = this.entityId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICleanValuesInput {\r\n dynamicEntityPropertyId: number;\r\n entityId: string | undefined;\r\n}\r\n\r\nexport class ComboboxItemDto implements IComboboxItemDto {\r\n value!: string | undefined;\r\n displayText!: string | undefined;\r\n isSelected!: boolean;\r\n\r\n constructor(data?: IComboboxItemDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.value = _data[\"value\"];\r\n this.displayText = _data[\"displayText\"];\r\n this.isSelected = _data[\"isSelected\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ComboboxItemDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ComboboxItemDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"value\"] = this.value;\r\n data[\"displayText\"] = this.displayText;\r\n data[\"isSelected\"] = this.isSelected;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IComboboxItemDto {\r\n value: string | undefined;\r\n displayText: string | undefined;\r\n isSelected: boolean;\r\n}\r\n\r\nexport class CreateEditionDto implements ICreateEditionDto {\r\n edition!: EditionCreateDto;\r\n featureValues!: NameValueDto[];\r\n\r\n constructor(data?: ICreateEditionDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.edition = new EditionCreateDto();\r\n this.featureValues = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.edition = _data[\"edition\"] ? EditionCreateDto.fromJS(_data[\"edition\"]) : new EditionCreateDto();\r\n if (Array.isArray(_data[\"featureValues\"])) {\r\n this.featureValues = [] as any;\r\n for (let item of _data[\"featureValues\"])\r\n this.featureValues!.push(NameValueDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateEditionDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateEditionDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"edition\"] = this.edition ? this.edition.toJSON() : undefined;\r\n if (Array.isArray(this.featureValues)) {\r\n data[\"featureValues\"] = [];\r\n for (let item of this.featureValues)\r\n data[\"featureValues\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateEditionDto {\r\n edition: EditionCreateDto;\r\n featureValues: NameValueDto[];\r\n}\r\n\r\nexport class CreateEpisodeOutputDto implements ICreateEpisodeOutputDto {\r\n episodeId!: number;\r\n\r\n constructor(data?: ICreateEpisodeOutputDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.episodeId = _data[\"episodeId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateEpisodeOutputDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateEpisodeOutputDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"episodeId\"] = this.episodeId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateEpisodeOutputDto {\r\n episodeId: number;\r\n}\r\n\r\nexport class CreateFriendshipRequestByUserNameInput implements ICreateFriendshipRequestByUserNameInput {\r\n tenancyName!: string;\r\n userName!: string | undefined;\r\n\r\n constructor(data?: ICreateFriendshipRequestByUserNameInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenancyName = _data[\"tenancyName\"];\r\n this.userName = _data[\"userName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateFriendshipRequestByUserNameInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateFriendshipRequestByUserNameInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenancyName\"] = this.tenancyName;\r\n data[\"userName\"] = this.userName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateFriendshipRequestByUserNameInput {\r\n tenancyName: string;\r\n userName: string | undefined;\r\n}\r\n\r\nexport class CreateFriendshipRequestInput implements ICreateFriendshipRequestInput {\r\n userId!: number;\r\n tenantId!: number | undefined;\r\n\r\n constructor(data?: ICreateFriendshipRequestInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateFriendshipRequestInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateFriendshipRequestInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId;\r\n data[\"tenantId\"] = this.tenantId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateFriendshipRequestInput {\r\n userId: number;\r\n tenantId: number | undefined;\r\n}\r\n\r\nexport class CreateInvoiceDto implements ICreateInvoiceDto {\r\n subscriptionPaymentId!: number;\r\n\r\n constructor(data?: ICreateInvoiceDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.subscriptionPaymentId = _data[\"subscriptionPaymentId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateInvoiceDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateInvoiceDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"subscriptionPaymentId\"] = this.subscriptionPaymentId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateInvoiceDto {\r\n subscriptionPaymentId: number;\r\n}\r\n\r\nexport class CreateMassNotificationInput implements ICreateMassNotificationInput {\r\n message!: string | undefined;\r\n severity!: NotificationSeverity;\r\n userIds!: number[] | undefined;\r\n organizationUnitIds!: number[] | undefined;\r\n targetNotifiers!: string[] | undefined;\r\n\r\n constructor(data?: ICreateMassNotificationInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.message = _data[\"message\"];\r\n this.severity = _data[\"severity\"];\r\n if (Array.isArray(_data[\"userIds\"])) {\r\n this.userIds = [] as any;\r\n for (let item of _data[\"userIds\"])\r\n this.userIds!.push(item);\r\n }\r\n if (Array.isArray(_data[\"organizationUnitIds\"])) {\r\n this.organizationUnitIds = [] as any;\r\n for (let item of _data[\"organizationUnitIds\"])\r\n this.organizationUnitIds!.push(item);\r\n }\r\n if (Array.isArray(_data[\"targetNotifiers\"])) {\r\n this.targetNotifiers = [] as any;\r\n for (let item of _data[\"targetNotifiers\"])\r\n this.targetNotifiers!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateMassNotificationInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateMassNotificationInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"message\"] = this.message;\r\n data[\"severity\"] = this.severity;\r\n if (Array.isArray(this.userIds)) {\r\n data[\"userIds\"] = [];\r\n for (let item of this.userIds)\r\n data[\"userIds\"].push(item);\r\n }\r\n if (Array.isArray(this.organizationUnitIds)) {\r\n data[\"organizationUnitIds\"] = [];\r\n for (let item of this.organizationUnitIds)\r\n data[\"organizationUnitIds\"].push(item);\r\n }\r\n if (Array.isArray(this.targetNotifiers)) {\r\n data[\"targetNotifiers\"] = [];\r\n for (let item of this.targetNotifiers)\r\n data[\"targetNotifiers\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateMassNotificationInput {\r\n message: string | undefined;\r\n severity: NotificationSeverity;\r\n userIds: number[] | undefined;\r\n organizationUnitIds: number[] | undefined;\r\n targetNotifiers: string[] | undefined;\r\n}\r\n\r\nexport class CreateOrEditCustomAudioForEpisodeDto implements ICreateOrEditCustomAudioForEpisodeDto {\r\n customAudioContent!: string | undefined;\r\n customAudioContentToken!: string | undefined;\r\n episodeId!: number | undefined;\r\n schoolId!: number | undefined;\r\n id!: number | undefined;\r\n\r\n constructor(data?: ICreateOrEditCustomAudioForEpisodeDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.customAudioContent = _data[\"customAudioContent\"];\r\n this.customAudioContentToken = _data[\"customAudioContentToken\"];\r\n this.episodeId = _data[\"episodeId\"];\r\n this.schoolId = _data[\"schoolId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateOrEditCustomAudioForEpisodeDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateOrEditCustomAudioForEpisodeDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"customAudioContent\"] = this.customAudioContent;\r\n data[\"customAudioContentToken\"] = this.customAudioContentToken;\r\n data[\"episodeId\"] = this.episodeId;\r\n data[\"schoolId\"] = this.schoolId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateOrEditCustomAudioForEpisodeDto {\r\n customAudioContent: string | undefined;\r\n customAudioContentToken: string | undefined;\r\n episodeId: number | undefined;\r\n schoolId: number | undefined;\r\n id: number | undefined;\r\n}\r\n\r\nexport class CreateOrEditDifficultyLevelDto implements ICreateOrEditDifficultyLevelDto {\r\n name!: string;\r\n color!: string;\r\n id!: number | undefined;\r\n\r\n constructor(data?: ICreateOrEditDifficultyLevelDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.color = _data[\"color\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateOrEditDifficultyLevelDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateOrEditDifficultyLevelDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"color\"] = this.color;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateOrEditDifficultyLevelDto {\r\n name: string;\r\n color: string;\r\n id: number | undefined;\r\n}\r\n\r\nexport class CreateOrEditEpisodeDto implements ICreateOrEditEpisodeDto {\r\n name!: string;\r\n description!: string | undefined;\r\n title!: string | undefined;\r\n googleFormUrl!: string | undefined;\r\n imageContent!: string | undefined;\r\n imageContentToken!: string | undefined;\r\n scriptContent!: string | undefined;\r\n scriptContentToken!: string | undefined;\r\n vocabularyContent!: string | undefined;\r\n vocabularyContentToken!: string | undefined;\r\n audioContent!: string | undefined;\r\n audioContentToken!: string | undefined;\r\n applicationLanguageId!: number | undefined;\r\n episodeVideoId!: number | undefined;\r\n id!: number | undefined;\r\n\r\n constructor(data?: ICreateOrEditEpisodeDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.description = _data[\"description\"];\r\n this.title = _data[\"title\"];\r\n this.googleFormUrl = _data[\"googleFormUrl\"];\r\n this.imageContent = _data[\"imageContent\"];\r\n this.imageContentToken = _data[\"imageContentToken\"];\r\n this.scriptContent = _data[\"scriptContent\"];\r\n this.scriptContentToken = _data[\"scriptContentToken\"];\r\n this.vocabularyContent = _data[\"vocabularyContent\"];\r\n this.vocabularyContentToken = _data[\"vocabularyContentToken\"];\r\n this.audioContent = _data[\"audioContent\"];\r\n this.audioContentToken = _data[\"audioContentToken\"];\r\n this.applicationLanguageId = _data[\"applicationLanguageId\"];\r\n this.episodeVideoId = _data[\"episodeVideoId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateOrEditEpisodeDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateOrEditEpisodeDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"description\"] = this.description;\r\n data[\"title\"] = this.title;\r\n data[\"googleFormUrl\"] = this.googleFormUrl;\r\n data[\"imageContent\"] = this.imageContent;\r\n data[\"imageContentToken\"] = this.imageContentToken;\r\n data[\"scriptContent\"] = this.scriptContent;\r\n data[\"scriptContentToken\"] = this.scriptContentToken;\r\n data[\"vocabularyContent\"] = this.vocabularyContent;\r\n data[\"vocabularyContentToken\"] = this.vocabularyContentToken;\r\n data[\"audioContent\"] = this.audioContent;\r\n data[\"audioContentToken\"] = this.audioContentToken;\r\n data[\"applicationLanguageId\"] = this.applicationLanguageId;\r\n data[\"episodeVideoId\"] = this.episodeVideoId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateOrEditEpisodeDto {\r\n name: string;\r\n description: string | undefined;\r\n title: string | undefined;\r\n googleFormUrl: string | undefined;\r\n imageContent: string | undefined;\r\n imageContentToken: string | undefined;\r\n scriptContent: string | undefined;\r\n scriptContentToken: string | undefined;\r\n vocabularyContent: string | undefined;\r\n vocabularyContentToken: string | undefined;\r\n audioContent: string | undefined;\r\n audioContentToken: string | undefined;\r\n applicationLanguageId: number | undefined;\r\n episodeVideoId: number | undefined;\r\n id: number | undefined;\r\n}\r\n\r\nexport class CreateOrEditEpisodeOvalDto implements ICreateOrEditEpisodeOvalDto {\r\n file!: string | undefined;\r\n fileToken!: string | undefined;\r\n ovalId!: number;\r\n episodeId!: number;\r\n id!: number | undefined;\r\n\r\n constructor(data?: ICreateOrEditEpisodeOvalDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.file = _data[\"file\"];\r\n this.fileToken = _data[\"fileToken\"];\r\n this.ovalId = _data[\"ovalId\"];\r\n this.episodeId = _data[\"episodeId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateOrEditEpisodeOvalDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateOrEditEpisodeOvalDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"file\"] = this.file;\r\n data[\"fileToken\"] = this.fileToken;\r\n data[\"ovalId\"] = this.ovalId;\r\n data[\"episodeId\"] = this.episodeId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateOrEditEpisodeOvalDto {\r\n file: string | undefined;\r\n fileToken: string | undefined;\r\n ovalId: number;\r\n episodeId: number;\r\n id: number | undefined;\r\n}\r\n\r\nexport class CreateOrEditEpisodeUserDto implements ICreateOrEditEpisodeUserDto {\r\n hasFeedback!: boolean;\r\n hasWatched!: boolean;\r\n userId!: number | undefined;\r\n episodeId!: number | undefined;\r\n id!: number | undefined;\r\n\r\n constructor(data?: ICreateOrEditEpisodeUserDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.hasFeedback = _data[\"hasFeedback\"];\r\n this.hasWatched = _data[\"hasWatched\"];\r\n this.userId = _data[\"userId\"];\r\n this.episodeId = _data[\"episodeId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateOrEditEpisodeUserDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateOrEditEpisodeUserDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"hasFeedback\"] = this.hasFeedback;\r\n data[\"hasWatched\"] = this.hasWatched;\r\n data[\"userId\"] = this.userId;\r\n data[\"episodeId\"] = this.episodeId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateOrEditEpisodeUserDto {\r\n hasFeedback: boolean;\r\n hasWatched: boolean;\r\n userId: number | undefined;\r\n episodeId: number | undefined;\r\n id: number | undefined;\r\n}\r\n\r\nexport class CreateOrEditEpisodeVideoDto implements ICreateOrEditEpisodeVideoDto {\r\n videoContent!: string | undefined;\r\n videoContentToken!: string | undefined;\r\n id!: number | undefined;\r\n\r\n constructor(data?: ICreateOrEditEpisodeVideoDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.videoContent = _data[\"videoContent\"];\r\n this.videoContentToken = _data[\"videoContentToken\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateOrEditEpisodeVideoDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateOrEditEpisodeVideoDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"videoContent\"] = this.videoContent;\r\n data[\"videoContentToken\"] = this.videoContentToken;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateOrEditEpisodeVideoDto {\r\n videoContent: string | undefined;\r\n videoContentToken: string | undefined;\r\n id: number | undefined;\r\n}\r\n\r\nexport class CreateOrEditForMultipleDto implements ICreateOrEditForMultipleDto {\r\n file!: string[] | undefined;\r\n fileToken!: string[] | undefined;\r\n ovalId!: number;\r\n episodeId!: number;\r\n id!: number | undefined;\r\n\r\n constructor(data?: ICreateOrEditForMultipleDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"file\"])) {\r\n this.file = [] as any;\r\n for (let item of _data[\"file\"])\r\n this.file!.push(item);\r\n }\r\n if (Array.isArray(_data[\"fileToken\"])) {\r\n this.fileToken = [] as any;\r\n for (let item of _data[\"fileToken\"])\r\n this.fileToken!.push(item);\r\n }\r\n this.ovalId = _data[\"ovalId\"];\r\n this.episodeId = _data[\"episodeId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateOrEditForMultipleDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateOrEditForMultipleDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.file)) {\r\n data[\"file\"] = [];\r\n for (let item of this.file)\r\n data[\"file\"].push(item);\r\n }\r\n if (Array.isArray(this.fileToken)) {\r\n data[\"fileToken\"] = [];\r\n for (let item of this.fileToken)\r\n data[\"fileToken\"].push(item);\r\n }\r\n data[\"ovalId\"] = this.ovalId;\r\n data[\"episodeId\"] = this.episodeId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateOrEditForMultipleDto {\r\n file: string[] | undefined;\r\n fileToken: string[] | undefined;\r\n ovalId: number;\r\n episodeId: number;\r\n id: number | undefined;\r\n}\r\n\r\nexport class CreateOrEditOvalDto implements ICreateOrEditOvalDto {\r\n title!: string;\r\n textColor!: string;\r\n backgroundColor!: string;\r\n borderColor!: string;\r\n templateName!: TemplateName;\r\n order!: number;\r\n id!: number | undefined;\r\n\r\n constructor(data?: ICreateOrEditOvalDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.title = _data[\"title\"];\r\n this.textColor = _data[\"textColor\"];\r\n this.backgroundColor = _data[\"backgroundColor\"];\r\n this.borderColor = _data[\"borderColor\"];\r\n this.templateName = _data[\"templateName\"];\r\n this.order = _data[\"order\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateOrEditOvalDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateOrEditOvalDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"title\"] = this.title;\r\n data[\"textColor\"] = this.textColor;\r\n data[\"backgroundColor\"] = this.backgroundColor;\r\n data[\"borderColor\"] = this.borderColor;\r\n data[\"templateName\"] = this.templateName;\r\n data[\"order\"] = this.order;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateOrEditOvalDto {\r\n title: string;\r\n textColor: string;\r\n backgroundColor: string;\r\n borderColor: string;\r\n templateName: TemplateName;\r\n order: number;\r\n id: number | undefined;\r\n}\r\n\r\nexport class CreateOrUpdateLanguageInput implements ICreateOrUpdateLanguageInput {\r\n language!: ApplicationLanguageEditDto;\r\n\r\n constructor(data?: ICreateOrUpdateLanguageInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.language = new ApplicationLanguageEditDto();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.language = _data[\"language\"] ? ApplicationLanguageEditDto.fromJS(_data[\"language\"]) : new ApplicationLanguageEditDto();\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateOrUpdateLanguageInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateOrUpdateLanguageInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"language\"] = this.language ? this.language.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateOrUpdateLanguageInput {\r\n language: ApplicationLanguageEditDto;\r\n}\r\n\r\nexport class CreateOrUpdateRoleInput implements ICreateOrUpdateRoleInput {\r\n role!: RoleEditDto;\r\n grantedPermissionNames!: string[];\r\n\r\n constructor(data?: ICreateOrUpdateRoleInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.role = new RoleEditDto();\r\n this.grantedPermissionNames = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.role = _data[\"role\"] ? RoleEditDto.fromJS(_data[\"role\"]) : new RoleEditDto();\r\n if (Array.isArray(_data[\"grantedPermissionNames\"])) {\r\n this.grantedPermissionNames = [] as any;\r\n for (let item of _data[\"grantedPermissionNames\"])\r\n this.grantedPermissionNames!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateOrUpdateRoleInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateOrUpdateRoleInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"role\"] = this.role ? this.role.toJSON() : undefined;\r\n if (Array.isArray(this.grantedPermissionNames)) {\r\n data[\"grantedPermissionNames\"] = [];\r\n for (let item of this.grantedPermissionNames)\r\n data[\"grantedPermissionNames\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateOrUpdateRoleInput {\r\n role: RoleEditDto;\r\n grantedPermissionNames: string[];\r\n}\r\n\r\nexport class CreateOrUpdateUserInput implements ICreateOrUpdateUserInput {\r\n user!: UserEditDto;\r\n assignedRoleNames!: string[];\r\n sendActivationEmail!: boolean;\r\n setRandomPassword!: boolean;\r\n organizationUnits!: number[] | undefined;\r\n\r\n constructor(data?: ICreateOrUpdateUserInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.user = new UserEditDto();\r\n this.assignedRoleNames = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.user = _data[\"user\"] ? UserEditDto.fromJS(_data[\"user\"]) : new UserEditDto();\r\n if (Array.isArray(_data[\"assignedRoleNames\"])) {\r\n this.assignedRoleNames = [] as any;\r\n for (let item of _data[\"assignedRoleNames\"])\r\n this.assignedRoleNames!.push(item);\r\n }\r\n this.sendActivationEmail = _data[\"sendActivationEmail\"];\r\n this.setRandomPassword = _data[\"setRandomPassword\"];\r\n if (Array.isArray(_data[\"organizationUnits\"])) {\r\n this.organizationUnits = [] as any;\r\n for (let item of _data[\"organizationUnits\"])\r\n this.organizationUnits!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateOrUpdateUserInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateOrUpdateUserInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"user\"] = this.user ? this.user.toJSON() : undefined;\r\n if (Array.isArray(this.assignedRoleNames)) {\r\n data[\"assignedRoleNames\"] = [];\r\n for (let item of this.assignedRoleNames)\r\n data[\"assignedRoleNames\"].push(item);\r\n }\r\n data[\"sendActivationEmail\"] = this.sendActivationEmail;\r\n data[\"setRandomPassword\"] = this.setRandomPassword;\r\n if (Array.isArray(this.organizationUnits)) {\r\n data[\"organizationUnits\"] = [];\r\n for (let item of this.organizationUnits)\r\n data[\"organizationUnits\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateOrUpdateUserInput {\r\n user: UserEditDto;\r\n assignedRoleNames: string[];\r\n sendActivationEmail: boolean;\r\n setRandomPassword: boolean;\r\n organizationUnits: number[] | undefined;\r\n}\r\n\r\nexport class CreateOrganizationUnitInput implements ICreateOrganizationUnitInput {\r\n parentId!: number | undefined;\r\n displayName!: string;\r\n\r\n constructor(data?: ICreateOrganizationUnitInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.parentId = _data[\"parentId\"];\r\n this.displayName = _data[\"displayName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateOrganizationUnitInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateOrganizationUnitInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"parentId\"] = this.parentId;\r\n data[\"displayName\"] = this.displayName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateOrganizationUnitInput {\r\n parentId: number | undefined;\r\n displayName: string;\r\n}\r\n\r\nexport class CreatePaymentDto implements ICreatePaymentDto {\r\n editionId!: number;\r\n editionPaymentType!: EditionPaymentType;\r\n paymentPeriodType!: PaymentPeriodType;\r\n subscriptionPaymentGatewayType!: SubscriptionPaymentGatewayType;\r\n recurringPaymentEnabled!: boolean;\r\n successUrl!: string | undefined;\r\n errorUrl!: string | undefined;\r\n\r\n constructor(data?: ICreatePaymentDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.editionId = _data[\"editionId\"];\r\n this.editionPaymentType = _data[\"editionPaymentType\"];\r\n this.paymentPeriodType = _data[\"paymentPeriodType\"];\r\n this.subscriptionPaymentGatewayType = _data[\"subscriptionPaymentGatewayType\"];\r\n this.recurringPaymentEnabled = _data[\"recurringPaymentEnabled\"];\r\n this.successUrl = _data[\"successUrl\"];\r\n this.errorUrl = _data[\"errorUrl\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreatePaymentDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreatePaymentDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"editionId\"] = this.editionId;\r\n data[\"editionPaymentType\"] = this.editionPaymentType;\r\n data[\"paymentPeriodType\"] = this.paymentPeriodType;\r\n data[\"subscriptionPaymentGatewayType\"] = this.subscriptionPaymentGatewayType;\r\n data[\"recurringPaymentEnabled\"] = this.recurringPaymentEnabled;\r\n data[\"successUrl\"] = this.successUrl;\r\n data[\"errorUrl\"] = this.errorUrl;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreatePaymentDto {\r\n editionId: number;\r\n editionPaymentType: EditionPaymentType;\r\n paymentPeriodType: PaymentPeriodType;\r\n subscriptionPaymentGatewayType: SubscriptionPaymentGatewayType;\r\n recurringPaymentEnabled: boolean;\r\n successUrl: string | undefined;\r\n errorUrl: string | undefined;\r\n}\r\n\r\nexport class CreateTenantInput implements ICreateTenantInput {\r\n tenancyName!: string;\r\n name!: string;\r\n adminEmailAddress!: string;\r\n adminName!: string | undefined;\r\n adminSurname!: string | undefined;\r\n adminPassword!: string | undefined;\r\n connectionString!: string | undefined;\r\n shouldChangePasswordOnNextLogin!: boolean;\r\n sendActivationEmail!: boolean;\r\n editionId!: number | undefined;\r\n tenantLanguageId!: number | undefined;\r\n isActive!: boolean;\r\n subscriptionEndDateUtc!: DateTime | undefined;\r\n isInTrialPeriod!: boolean;\r\n\r\n constructor(data?: ICreateTenantInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenancyName = _data[\"tenancyName\"];\r\n this.name = _data[\"name\"];\r\n this.adminEmailAddress = _data[\"adminEmailAddress\"];\r\n this.adminName = _data[\"adminName\"];\r\n this.adminSurname = _data[\"adminSurname\"];\r\n this.adminPassword = _data[\"adminPassword\"];\r\n this.connectionString = _data[\"connectionString\"];\r\n this.shouldChangePasswordOnNextLogin = _data[\"shouldChangePasswordOnNextLogin\"];\r\n this.sendActivationEmail = _data[\"sendActivationEmail\"];\r\n this.editionId = _data[\"editionId\"];\r\n this.tenantLanguageId = _data[\"tenantLanguageId\"];\r\n this.isActive = _data[\"isActive\"];\r\n this.subscriptionEndDateUtc = _data[\"subscriptionEndDateUtc\"] ? DateTime.fromISO(_data[\"subscriptionEndDateUtc\"].toString()) : undefined;\r\n this.isInTrialPeriod = _data[\"isInTrialPeriod\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateTenantInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateTenantInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenancyName\"] = this.tenancyName;\r\n data[\"name\"] = this.name;\r\n data[\"adminEmailAddress\"] = this.adminEmailAddress;\r\n data[\"adminName\"] = this.adminName;\r\n data[\"adminSurname\"] = this.adminSurname;\r\n data[\"adminPassword\"] = this.adminPassword;\r\n data[\"connectionString\"] = this.connectionString;\r\n data[\"shouldChangePasswordOnNextLogin\"] = this.shouldChangePasswordOnNextLogin;\r\n data[\"sendActivationEmail\"] = this.sendActivationEmail;\r\n data[\"editionId\"] = this.editionId;\r\n data[\"tenantLanguageId\"] = this.tenantLanguageId;\r\n data[\"isActive\"] = this.isActive;\r\n data[\"subscriptionEndDateUtc\"] = this.subscriptionEndDateUtc ? this.subscriptionEndDateUtc.toString() : undefined;\r\n data[\"isInTrialPeriod\"] = this.isInTrialPeriod;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateTenantInput {\r\n tenancyName: string;\r\n name: string;\r\n adminEmailAddress: string;\r\n adminName: string | undefined;\r\n adminSurname: string | undefined;\r\n adminPassword: string | undefined;\r\n connectionString: string | undefined;\r\n shouldChangePasswordOnNextLogin: boolean;\r\n sendActivationEmail: boolean;\r\n editionId: number | undefined;\r\n tenantLanguageId: number | undefined;\r\n isActive: boolean;\r\n subscriptionEndDateUtc: DateTime | undefined;\r\n isInTrialPeriod: boolean;\r\n}\r\n\r\nexport class CreateUserDelegationDto implements ICreateUserDelegationDto {\r\n targetUserId!: number;\r\n startTime!: DateTime;\r\n endTime!: DateTime;\r\n\r\n constructor(data?: ICreateUserDelegationDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.targetUserId = _data[\"targetUserId\"];\r\n this.startTime = _data[\"startTime\"] ? DateTime.fromISO(_data[\"startTime\"].toString()) : undefined;\r\n this.endTime = _data[\"endTime\"] ? DateTime.fromISO(_data[\"endTime\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): CreateUserDelegationDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CreateUserDelegationDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"targetUserId\"] = this.targetUserId;\r\n data[\"startTime\"] = this.startTime ? this.startTime.toString() : undefined;\r\n data[\"endTime\"] = this.endTime ? this.endTime.toString() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICreateUserDelegationDto {\r\n targetUserId: number;\r\n startTime: DateTime;\r\n endTime: DateTime;\r\n}\r\n\r\nexport class CurrentUserProfileEditDto implements ICurrentUserProfileEditDto {\r\n name!: string;\r\n surname!: string;\r\n userName!: string;\r\n emailAddress!: string;\r\n phoneNumber!: string | undefined;\r\n isPhoneNumberConfirmed!: boolean;\r\n timezone!: string | undefined;\r\n qrCodeSetupImageUrl!: string | undefined;\r\n isGoogleAuthenticatorEnabled!: boolean;\r\n\r\n constructor(data?: ICurrentUserProfileEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.surname = _data[\"surname\"];\r\n this.userName = _data[\"userName\"];\r\n this.emailAddress = _data[\"emailAddress\"];\r\n this.phoneNumber = _data[\"phoneNumber\"];\r\n this.isPhoneNumberConfirmed = _data[\"isPhoneNumberConfirmed\"];\r\n this.timezone = _data[\"timezone\"];\r\n this.qrCodeSetupImageUrl = _data[\"qrCodeSetupImageUrl\"];\r\n this.isGoogleAuthenticatorEnabled = _data[\"isGoogleAuthenticatorEnabled\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CurrentUserProfileEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CurrentUserProfileEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"surname\"] = this.surname;\r\n data[\"userName\"] = this.userName;\r\n data[\"emailAddress\"] = this.emailAddress;\r\n data[\"phoneNumber\"] = this.phoneNumber;\r\n data[\"isPhoneNumberConfirmed\"] = this.isPhoneNumberConfirmed;\r\n data[\"timezone\"] = this.timezone;\r\n data[\"qrCodeSetupImageUrl\"] = this.qrCodeSetupImageUrl;\r\n data[\"isGoogleAuthenticatorEnabled\"] = this.isGoogleAuthenticatorEnabled;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICurrentUserProfileEditDto {\r\n name: string;\r\n surname: string;\r\n userName: string;\r\n emailAddress: string;\r\n phoneNumber: string | undefined;\r\n isPhoneNumberConfirmed: boolean;\r\n timezone: string | undefined;\r\n qrCodeSetupImageUrl: string | undefined;\r\n isGoogleAuthenticatorEnabled: boolean;\r\n}\r\n\r\nexport class CustomAudioForEpisodeDto implements ICustomAudioForEpisodeDto {\r\n customAudioContent!: string | undefined;\r\n customAudioContentFileName!: string | undefined;\r\n episodeId!: number | undefined;\r\n tenantId!: number | undefined;\r\n id!: number;\r\n\r\n constructor(data?: ICustomAudioForEpisodeDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.customAudioContent = _data[\"customAudioContent\"];\r\n this.customAudioContentFileName = _data[\"customAudioContentFileName\"];\r\n this.episodeId = _data[\"episodeId\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CustomAudioForEpisodeDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CustomAudioForEpisodeDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"customAudioContent\"] = this.customAudioContent;\r\n data[\"customAudioContentFileName\"] = this.customAudioContentFileName;\r\n data[\"episodeId\"] = this.episodeId;\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICustomAudioForEpisodeDto {\r\n customAudioContent: string | undefined;\r\n customAudioContentFileName: string | undefined;\r\n episodeId: number | undefined;\r\n tenantId: number | undefined;\r\n id: number;\r\n}\r\n\r\nexport class CustomAudioForEpisodeEpisodeLookupTableDto implements ICustomAudioForEpisodeEpisodeLookupTableDto {\r\n id!: number;\r\n displayName!: string | undefined;\r\n languageId!: number | undefined;\r\n\r\n constructor(data?: ICustomAudioForEpisodeEpisodeLookupTableDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.languageId = _data[\"languageId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CustomAudioForEpisodeEpisodeLookupTableDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CustomAudioForEpisodeEpisodeLookupTableDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"languageId\"] = this.languageId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICustomAudioForEpisodeEpisodeLookupTableDto {\r\n id: number;\r\n displayName: string | undefined;\r\n languageId: number | undefined;\r\n}\r\n\r\nexport class CustomAudioForEpisodeForSchoolOutputDto implements ICustomAudioForEpisodeForSchoolOutputDto {\r\n customAudioContent!: string | undefined;\r\n customAudioContentToken!: string | undefined;\r\n\r\n constructor(data?: ICustomAudioForEpisodeForSchoolOutputDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.customAudioContent = _data[\"customAudioContent\"];\r\n this.customAudioContentToken = _data[\"customAudioContentToken\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CustomAudioForEpisodeForSchoolOutputDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CustomAudioForEpisodeForSchoolOutputDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"customAudioContent\"] = this.customAudioContent;\r\n data[\"customAudioContentToken\"] = this.customAudioContentToken;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICustomAudioForEpisodeForSchoolOutputDto {\r\n customAudioContent: string | undefined;\r\n customAudioContentToken: string | undefined;\r\n}\r\n\r\nexport class CustomAudioForEpisodeTenantLookupTableDto implements ICustomAudioForEpisodeTenantLookupTableDto {\r\n id!: number;\r\n displayName!: string | undefined;\r\n languageId!: number | undefined;\r\n\r\n constructor(data?: ICustomAudioForEpisodeTenantLookupTableDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.languageId = _data[\"languageId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): CustomAudioForEpisodeTenantLookupTableDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new CustomAudioForEpisodeTenantLookupTableDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"languageId\"] = this.languageId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ICustomAudioForEpisodeTenantLookupTableDto {\r\n id: number;\r\n displayName: string | undefined;\r\n languageId: number | undefined;\r\n}\r\n\r\nexport class Dashboard implements IDashboard {\r\n dashboardName!: string | undefined;\r\n pages!: Page[] | undefined;\r\n\r\n constructor(data?: IDashboard) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.dashboardName = _data[\"dashboardName\"];\r\n if (Array.isArray(_data[\"pages\"])) {\r\n this.pages = [] as any;\r\n for (let item of _data[\"pages\"])\r\n this.pages!.push(Page.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): Dashboard {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Dashboard();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"dashboardName\"] = this.dashboardName;\r\n if (Array.isArray(this.pages)) {\r\n data[\"pages\"] = [];\r\n for (let item of this.pages)\r\n data[\"pages\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDashboard {\r\n dashboardName: string | undefined;\r\n pages: Page[] | undefined;\r\n}\r\n\r\nexport class DashboardOutput implements IDashboardOutput {\r\n name!: string | undefined;\r\n widgets!: WidgetOutput[] | undefined;\r\n\r\n constructor(data?: IDashboardOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n if (Array.isArray(_data[\"widgets\"])) {\r\n this.widgets = [] as any;\r\n for (let item of _data[\"widgets\"])\r\n this.widgets!.push(WidgetOutput.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): DashboardOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DashboardOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n if (Array.isArray(this.widgets)) {\r\n data[\"widgets\"] = [];\r\n for (let item of this.widgets)\r\n data[\"widgets\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDashboardOutput {\r\n name: string | undefined;\r\n widgets: WidgetOutput[] | undefined;\r\n}\r\n\r\nexport class DateFieldOutput implements IDateFieldOutput {\r\n date!: DateTime;\r\n\r\n constructor(data?: IDateFieldOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.date = _data[\"date\"] ? DateTime.fromISO(_data[\"date\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): DateFieldOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DateFieldOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"date\"] = this.date ? this.date.toString() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDateFieldOutput {\r\n date: DateTime;\r\n}\r\n\r\nexport class DateRangeFieldOutput implements IDateRangeFieldOutput {\r\n startDate!: DateTime;\r\n endDate!: DateTime;\r\n\r\n constructor(data?: IDateRangeFieldOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.startDate = _data[\"startDate\"] ? DateTime.fromISO(_data[\"startDate\"].toString()) : undefined;\r\n this.endDate = _data[\"endDate\"] ? DateTime.fromISO(_data[\"endDate\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): DateRangeFieldOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DateRangeFieldOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"startDate\"] = this.startDate ? this.startDate.toString() : undefined;\r\n data[\"endDate\"] = this.endDate ? this.endDate.toString() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDateRangeFieldOutput {\r\n startDate: DateTime;\r\n endDate: DateTime;\r\n}\r\n\r\nexport class DateWithTextFieldOutput implements IDateWithTextFieldOutput {\r\n text!: string | undefined;\r\n date!: DateTime;\r\n\r\n constructor(data?: IDateWithTextFieldOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.text = _data[\"text\"];\r\n this.date = _data[\"date\"] ? DateTime.fromISO(_data[\"date\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): DateWithTextFieldOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DateWithTextFieldOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"text\"] = this.text;\r\n data[\"date\"] = this.date ? this.date.toString() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDateWithTextFieldOutput {\r\n text: string | undefined;\r\n date: DateTime;\r\n}\r\n\r\nexport class DelegatedImpersonateInput implements IDelegatedImpersonateInput {\r\n userDelegationId!: number;\r\n\r\n constructor(data?: IDelegatedImpersonateInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userDelegationId = _data[\"userDelegationId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): DelegatedImpersonateInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DelegatedImpersonateInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userDelegationId\"] = this.userDelegationId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDelegatedImpersonateInput {\r\n userDelegationId: number;\r\n}\r\n\r\nexport class DifficultyLevelDto implements IDifficultyLevelDto {\r\n name!: string | undefined;\r\n color!: string | undefined;\r\n id!: number;\r\n\r\n constructor(data?: IDifficultyLevelDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.color = _data[\"color\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): DifficultyLevelDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DifficultyLevelDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"color\"] = this.color;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDifficultyLevelDto {\r\n name: string | undefined;\r\n color: string | undefined;\r\n id: number;\r\n}\r\n\r\nexport class DynamicEntityPropertyDto implements IDynamicEntityPropertyDto {\r\n entityFullName!: string | undefined;\r\n dynamicPropertyName!: string | undefined;\r\n dynamicPropertyId!: number;\r\n tenantId!: number | undefined;\r\n id!: number;\r\n\r\n constructor(data?: IDynamicEntityPropertyDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.entityFullName = _data[\"entityFullName\"];\r\n this.dynamicPropertyName = _data[\"dynamicPropertyName\"];\r\n this.dynamicPropertyId = _data[\"dynamicPropertyId\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): DynamicEntityPropertyDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DynamicEntityPropertyDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"entityFullName\"] = this.entityFullName;\r\n data[\"dynamicPropertyName\"] = this.dynamicPropertyName;\r\n data[\"dynamicPropertyId\"] = this.dynamicPropertyId;\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDynamicEntityPropertyDto {\r\n entityFullName: string | undefined;\r\n dynamicPropertyName: string | undefined;\r\n dynamicPropertyId: number;\r\n tenantId: number | undefined;\r\n id: number;\r\n}\r\n\r\nexport class DynamicEntityPropertyDtoListResultDto implements IDynamicEntityPropertyDtoListResultDto {\r\n items!: DynamicEntityPropertyDto[] | undefined;\r\n\r\n constructor(data?: IDynamicEntityPropertyDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(DynamicEntityPropertyDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): DynamicEntityPropertyDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DynamicEntityPropertyDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDynamicEntityPropertyDtoListResultDto {\r\n items: DynamicEntityPropertyDto[] | undefined;\r\n}\r\n\r\nexport class DynamicEntityPropertyValueDto implements IDynamicEntityPropertyValueDto {\r\n value!: string | undefined;\r\n entityId!: string | undefined;\r\n dynamicEntityPropertyId!: number;\r\n id!: number;\r\n\r\n constructor(data?: IDynamicEntityPropertyValueDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.value = _data[\"value\"];\r\n this.entityId = _data[\"entityId\"];\r\n this.dynamicEntityPropertyId = _data[\"dynamicEntityPropertyId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): DynamicEntityPropertyValueDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DynamicEntityPropertyValueDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"value\"] = this.value;\r\n data[\"entityId\"] = this.entityId;\r\n data[\"dynamicEntityPropertyId\"] = this.dynamicEntityPropertyId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDynamicEntityPropertyValueDto {\r\n value: string | undefined;\r\n entityId: string | undefined;\r\n dynamicEntityPropertyId: number;\r\n id: number;\r\n}\r\n\r\nexport class DynamicEntityPropertyValueDtoListResultDto implements IDynamicEntityPropertyValueDtoListResultDto {\r\n items!: DynamicEntityPropertyValueDto[] | undefined;\r\n\r\n constructor(data?: IDynamicEntityPropertyValueDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(DynamicEntityPropertyValueDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): DynamicEntityPropertyValueDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DynamicEntityPropertyValueDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDynamicEntityPropertyValueDtoListResultDto {\r\n items: DynamicEntityPropertyValueDto[] | undefined;\r\n}\r\n\r\nexport class DynamicPropertyDto implements IDynamicPropertyDto {\r\n propertyName!: string | undefined;\r\n displayName!: string | undefined;\r\n inputType!: string | undefined;\r\n permission!: string | undefined;\r\n tenantId!: number | undefined;\r\n id!: number;\r\n\r\n constructor(data?: IDynamicPropertyDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.propertyName = _data[\"propertyName\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.inputType = _data[\"inputType\"];\r\n this.permission = _data[\"permission\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): DynamicPropertyDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DynamicPropertyDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"propertyName\"] = this.propertyName;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"inputType\"] = this.inputType;\r\n data[\"permission\"] = this.permission;\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDynamicPropertyDto {\r\n propertyName: string | undefined;\r\n displayName: string | undefined;\r\n inputType: string | undefined;\r\n permission: string | undefined;\r\n tenantId: number | undefined;\r\n id: number;\r\n}\r\n\r\nexport class DynamicPropertyDtoListResultDto implements IDynamicPropertyDtoListResultDto {\r\n items!: DynamicPropertyDto[] | undefined;\r\n\r\n constructor(data?: IDynamicPropertyDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(DynamicPropertyDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): DynamicPropertyDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DynamicPropertyDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDynamicPropertyDtoListResultDto {\r\n items: DynamicPropertyDto[] | undefined;\r\n}\r\n\r\nexport class DynamicPropertyValueDto implements IDynamicPropertyValueDto {\r\n value!: string | undefined;\r\n tenantId!: number | undefined;\r\n dynamicPropertyId!: number;\r\n id!: number;\r\n\r\n constructor(data?: IDynamicPropertyValueDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.value = _data[\"value\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n this.dynamicPropertyId = _data[\"dynamicPropertyId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): DynamicPropertyValueDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DynamicPropertyValueDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"value\"] = this.value;\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"dynamicPropertyId\"] = this.dynamicPropertyId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDynamicPropertyValueDto {\r\n value: string | undefined;\r\n tenantId: number | undefined;\r\n dynamicPropertyId: number;\r\n id: number;\r\n}\r\n\r\nexport class DynamicPropertyValueDtoListResultDto implements IDynamicPropertyValueDtoListResultDto {\r\n items!: DynamicPropertyValueDto[] | undefined;\r\n\r\n constructor(data?: IDynamicPropertyValueDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(DynamicPropertyValueDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): DynamicPropertyValueDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new DynamicPropertyValueDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IDynamicPropertyValueDtoListResultDto {\r\n items: DynamicPropertyValueDto[] | undefined;\r\n}\r\n\r\nexport class EasyAuthenticateModel implements IEasyAuthenticateModel {\r\n name!: string;\r\n surname!: string;\r\n tenantName!: string;\r\n twoFactorVerificationCode!: string | undefined;\r\n rememberClient!: boolean;\r\n twoFactorRememberClientToken!: string | undefined;\r\n singleSignIn!: boolean | undefined;\r\n returnUrl!: string | undefined;\r\n captchaResponse!: string | undefined;\r\n\r\n constructor(data?: IEasyAuthenticateModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.surname = _data[\"surname\"];\r\n this.tenantName = _data[\"tenantName\"];\r\n this.twoFactorVerificationCode = _data[\"twoFactorVerificationCode\"];\r\n this.rememberClient = _data[\"rememberClient\"];\r\n this.twoFactorRememberClientToken = _data[\"twoFactorRememberClientToken\"];\r\n this.singleSignIn = _data[\"singleSignIn\"];\r\n this.returnUrl = _data[\"returnUrl\"];\r\n this.captchaResponse = _data[\"captchaResponse\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EasyAuthenticateModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EasyAuthenticateModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"surname\"] = this.surname;\r\n data[\"tenantName\"] = this.tenantName;\r\n data[\"twoFactorVerificationCode\"] = this.twoFactorVerificationCode;\r\n data[\"rememberClient\"] = this.rememberClient;\r\n data[\"twoFactorRememberClientToken\"] = this.twoFactorRememberClientToken;\r\n data[\"singleSignIn\"] = this.singleSignIn;\r\n data[\"returnUrl\"] = this.returnUrl;\r\n data[\"captchaResponse\"] = this.captchaResponse;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEasyAuthenticateModel {\r\n name: string;\r\n surname: string;\r\n tenantName: string;\r\n twoFactorVerificationCode: string | undefined;\r\n rememberClient: boolean;\r\n twoFactorRememberClientToken: string | undefined;\r\n singleSignIn: boolean | undefined;\r\n returnUrl: string | undefined;\r\n captchaResponse: string | undefined;\r\n}\r\n\r\nexport class EasyRegisterInput implements IEasyRegisterInput {\r\n name!: string;\r\n surname!: string;\r\n tenantName!: string;\r\n gender!: GenderType;\r\n birthDate!: DateTime;\r\n\r\n constructor(data?: IEasyRegisterInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.surname = _data[\"surname\"];\r\n this.tenantName = _data[\"tenantName\"];\r\n this.gender = _data[\"gender\"];\r\n this.birthDate = _data[\"birthDate\"] ? DateTime.fromISO(_data[\"birthDate\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): EasyRegisterInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EasyRegisterInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"surname\"] = this.surname;\r\n data[\"tenantName\"] = this.tenantName;\r\n data[\"gender\"] = this.gender;\r\n data[\"birthDate\"] = this.birthDate ? this.birthDate.toString() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEasyRegisterInput {\r\n name: string;\r\n surname: string;\r\n tenantName: string;\r\n gender: GenderType;\r\n birthDate: DateTime;\r\n}\r\n\r\nexport class EasyRegisterOutput implements IEasyRegisterOutput {\r\n canLogin!: boolean;\r\n\r\n constructor(data?: IEasyRegisterOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.canLogin = _data[\"canLogin\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EasyRegisterOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EasyRegisterOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"canLogin\"] = this.canLogin;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEasyRegisterOutput {\r\n canLogin: boolean;\r\n}\r\n\r\nexport class EditionCreateDto implements IEditionCreateDto {\r\n id!: number | undefined;\r\n displayName!: string;\r\n dailyPrice!: number | undefined;\r\n weeklyPrice!: number | undefined;\r\n monthlyPrice!: number | undefined;\r\n annualPrice!: number | undefined;\r\n trialDayCount!: number | undefined;\r\n waitingDayAfterExpire!: number | undefined;\r\n expiringEditionId!: number | undefined;\r\n\r\n constructor(data?: IEditionCreateDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.dailyPrice = _data[\"dailyPrice\"];\r\n this.weeklyPrice = _data[\"weeklyPrice\"];\r\n this.monthlyPrice = _data[\"monthlyPrice\"];\r\n this.annualPrice = _data[\"annualPrice\"];\r\n this.trialDayCount = _data[\"trialDayCount\"];\r\n this.waitingDayAfterExpire = _data[\"waitingDayAfterExpire\"];\r\n this.expiringEditionId = _data[\"expiringEditionId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EditionCreateDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EditionCreateDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"dailyPrice\"] = this.dailyPrice;\r\n data[\"weeklyPrice\"] = this.weeklyPrice;\r\n data[\"monthlyPrice\"] = this.monthlyPrice;\r\n data[\"annualPrice\"] = this.annualPrice;\r\n data[\"trialDayCount\"] = this.trialDayCount;\r\n data[\"waitingDayAfterExpire\"] = this.waitingDayAfterExpire;\r\n data[\"expiringEditionId\"] = this.expiringEditionId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEditionCreateDto {\r\n id: number | undefined;\r\n displayName: string;\r\n dailyPrice: number | undefined;\r\n weeklyPrice: number | undefined;\r\n monthlyPrice: number | undefined;\r\n annualPrice: number | undefined;\r\n trialDayCount: number | undefined;\r\n waitingDayAfterExpire: number | undefined;\r\n expiringEditionId: number | undefined;\r\n}\r\n\r\nexport class EditionEditDto implements IEditionEditDto {\r\n id!: number | undefined;\r\n displayName!: string;\r\n expiringEditionId!: number | undefined;\r\n\r\n constructor(data?: IEditionEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.expiringEditionId = _data[\"expiringEditionId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EditionEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EditionEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"expiringEditionId\"] = this.expiringEditionId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEditionEditDto {\r\n id: number | undefined;\r\n displayName: string;\r\n expiringEditionId: number | undefined;\r\n}\r\n\r\nexport class EditionInfoDto implements IEditionInfoDto {\r\n displayName!: string | undefined;\r\n trialDayCount!: number | undefined;\r\n monthlyPrice!: number | undefined;\r\n annualPrice!: number | undefined;\r\n isHighestEdition!: boolean;\r\n isFree!: boolean;\r\n id!: number;\r\n\r\n constructor(data?: IEditionInfoDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.displayName = _data[\"displayName\"];\r\n this.trialDayCount = _data[\"trialDayCount\"];\r\n this.monthlyPrice = _data[\"monthlyPrice\"];\r\n this.annualPrice = _data[\"annualPrice\"];\r\n this.isHighestEdition = _data[\"isHighestEdition\"];\r\n this.isFree = _data[\"isFree\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EditionInfoDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EditionInfoDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"displayName\"] = this.displayName;\r\n data[\"trialDayCount\"] = this.trialDayCount;\r\n data[\"monthlyPrice\"] = this.monthlyPrice;\r\n data[\"annualPrice\"] = this.annualPrice;\r\n data[\"isHighestEdition\"] = this.isHighestEdition;\r\n data[\"isFree\"] = this.isFree;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEditionInfoDto {\r\n displayName: string | undefined;\r\n trialDayCount: number | undefined;\r\n monthlyPrice: number | undefined;\r\n annualPrice: number | undefined;\r\n isHighestEdition: boolean;\r\n isFree: boolean;\r\n id: number;\r\n}\r\n\r\nexport class EditionListDto implements IEditionListDto {\r\n name!: string | undefined;\r\n displayName!: string | undefined;\r\n dailyPrice!: number | undefined;\r\n weeklyPrice!: number | undefined;\r\n monthlyPrice!: number | undefined;\r\n annualPrice!: number | undefined;\r\n waitingDayAfterExpire!: number | undefined;\r\n trialDayCount!: number | undefined;\r\n expiringEditionDisplayName!: string | undefined;\r\n id!: number;\r\n\r\n constructor(data?: IEditionListDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.dailyPrice = _data[\"dailyPrice\"];\r\n this.weeklyPrice = _data[\"weeklyPrice\"];\r\n this.monthlyPrice = _data[\"monthlyPrice\"];\r\n this.annualPrice = _data[\"annualPrice\"];\r\n this.waitingDayAfterExpire = _data[\"waitingDayAfterExpire\"];\r\n this.trialDayCount = _data[\"trialDayCount\"];\r\n this.expiringEditionDisplayName = _data[\"expiringEditionDisplayName\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EditionListDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EditionListDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"dailyPrice\"] = this.dailyPrice;\r\n data[\"weeklyPrice\"] = this.weeklyPrice;\r\n data[\"monthlyPrice\"] = this.monthlyPrice;\r\n data[\"annualPrice\"] = this.annualPrice;\r\n data[\"waitingDayAfterExpire\"] = this.waitingDayAfterExpire;\r\n data[\"trialDayCount\"] = this.trialDayCount;\r\n data[\"expiringEditionDisplayName\"] = this.expiringEditionDisplayName;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEditionListDto {\r\n name: string | undefined;\r\n displayName: string | undefined;\r\n dailyPrice: number | undefined;\r\n weeklyPrice: number | undefined;\r\n monthlyPrice: number | undefined;\r\n annualPrice: number | undefined;\r\n waitingDayAfterExpire: number | undefined;\r\n trialDayCount: number | undefined;\r\n expiringEditionDisplayName: string | undefined;\r\n id: number;\r\n}\r\n\r\nexport class EditionListDtoListResultDto implements IEditionListDtoListResultDto {\r\n items!: EditionListDto[] | undefined;\r\n\r\n constructor(data?: IEditionListDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(EditionListDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): EditionListDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EditionListDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEditionListDtoListResultDto {\r\n items: EditionListDto[] | undefined;\r\n}\r\n\r\nexport enum EditionPaymentType {\r\n NewRegistration = 0,\r\n BuyNow = 1,\r\n Upgrade = 2,\r\n Extend = 3,\r\n _NewRegistration = NewRegistration,\r\n _BuyNow = BuyNow,\r\n _Upgrade = Upgrade,\r\n _Extend = Extend,\r\n}\r\n\r\nexport class EditionSelectDto implements IEditionSelectDto {\r\n id!: number;\r\n name!: string | undefined;\r\n displayName!: string | undefined;\r\n expiringEditionId!: number | undefined;\r\n dailyPrice!: number | undefined;\r\n weeklyPrice!: number | undefined;\r\n monthlyPrice!: number | undefined;\r\n annualPrice!: number | undefined;\r\n trialDayCount!: number | undefined;\r\n waitingDayAfterExpire!: number | undefined;\r\n isFree!: boolean;\r\n\r\n constructor(data?: IEditionSelectDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.name = _data[\"name\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.expiringEditionId = _data[\"expiringEditionId\"];\r\n this.dailyPrice = _data[\"dailyPrice\"];\r\n this.weeklyPrice = _data[\"weeklyPrice\"];\r\n this.monthlyPrice = _data[\"monthlyPrice\"];\r\n this.annualPrice = _data[\"annualPrice\"];\r\n this.trialDayCount = _data[\"trialDayCount\"];\r\n this.waitingDayAfterExpire = _data[\"waitingDayAfterExpire\"];\r\n this.isFree = _data[\"isFree\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EditionSelectDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EditionSelectDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"name\"] = this.name;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"expiringEditionId\"] = this.expiringEditionId;\r\n data[\"dailyPrice\"] = this.dailyPrice;\r\n data[\"weeklyPrice\"] = this.weeklyPrice;\r\n data[\"monthlyPrice\"] = this.monthlyPrice;\r\n data[\"annualPrice\"] = this.annualPrice;\r\n data[\"trialDayCount\"] = this.trialDayCount;\r\n data[\"waitingDayAfterExpire\"] = this.waitingDayAfterExpire;\r\n data[\"isFree\"] = this.isFree;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEditionSelectDto {\r\n id: number;\r\n name: string | undefined;\r\n displayName: string | undefined;\r\n expiringEditionId: number | undefined;\r\n dailyPrice: number | undefined;\r\n weeklyPrice: number | undefined;\r\n monthlyPrice: number | undefined;\r\n annualPrice: number | undefined;\r\n trialDayCount: number | undefined;\r\n waitingDayAfterExpire: number | undefined;\r\n isFree: boolean;\r\n}\r\n\r\nexport class EditionWithFeaturesDto implements IEditionWithFeaturesDto {\r\n edition!: EditionSelectDto;\r\n featureValues!: NameValueDto[] | undefined;\r\n\r\n constructor(data?: IEditionWithFeaturesDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.edition = _data[\"edition\"] ? EditionSelectDto.fromJS(_data[\"edition\"]) : undefined;\r\n if (Array.isArray(_data[\"featureValues\"])) {\r\n this.featureValues = [] as any;\r\n for (let item of _data[\"featureValues\"])\r\n this.featureValues!.push(NameValueDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): EditionWithFeaturesDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EditionWithFeaturesDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"edition\"] = this.edition ? this.edition.toJSON() : undefined;\r\n if (Array.isArray(this.featureValues)) {\r\n data[\"featureValues\"] = [];\r\n for (let item of this.featureValues)\r\n data[\"featureValues\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEditionWithFeaturesDto {\r\n edition: EditionSelectDto;\r\n featureValues: NameValueDto[] | undefined;\r\n}\r\n\r\nexport class EditionsSelectOutput implements IEditionsSelectOutput {\r\n allFeatures!: FlatFeatureSelectDto[] | undefined;\r\n editionsWithFeatures!: EditionWithFeaturesDto[] | undefined;\r\n\r\n constructor(data?: IEditionsSelectOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"allFeatures\"])) {\r\n this.allFeatures = [] as any;\r\n for (let item of _data[\"allFeatures\"])\r\n this.allFeatures!.push(FlatFeatureSelectDto.fromJS(item));\r\n }\r\n if (Array.isArray(_data[\"editionsWithFeatures\"])) {\r\n this.editionsWithFeatures = [] as any;\r\n for (let item of _data[\"editionsWithFeatures\"])\r\n this.editionsWithFeatures!.push(EditionWithFeaturesDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): EditionsSelectOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EditionsSelectOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.allFeatures)) {\r\n data[\"allFeatures\"] = [];\r\n for (let item of this.allFeatures)\r\n data[\"allFeatures\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.editionsWithFeatures)) {\r\n data[\"editionsWithFeatures\"] = [];\r\n for (let item of this.editionsWithFeatures)\r\n data[\"editionsWithFeatures\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEditionsSelectOutput {\r\n allFeatures: FlatFeatureSelectDto[] | undefined;\r\n editionsWithFeatures: EditionWithFeaturesDto[] | undefined;\r\n}\r\n\r\nexport class EmailSettingsEditDto implements IEmailSettingsEditDto {\r\n defaultFromAddress!: string | undefined;\r\n defaultFromDisplayName!: string | undefined;\r\n smtpHost!: string | undefined;\r\n smtpPort!: number;\r\n smtpUserName!: string | undefined;\r\n smtpPassword!: string | undefined;\r\n smtpDomain!: string | undefined;\r\n smtpEnableSsl!: boolean;\r\n smtpUseDefaultCredentials!: boolean;\r\n\r\n constructor(data?: IEmailSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.defaultFromAddress = _data[\"defaultFromAddress\"];\r\n this.defaultFromDisplayName = _data[\"defaultFromDisplayName\"];\r\n this.smtpHost = _data[\"smtpHost\"];\r\n this.smtpPort = _data[\"smtpPort\"];\r\n this.smtpUserName = _data[\"smtpUserName\"];\r\n this.smtpPassword = _data[\"smtpPassword\"];\r\n this.smtpDomain = _data[\"smtpDomain\"];\r\n this.smtpEnableSsl = _data[\"smtpEnableSsl\"];\r\n this.smtpUseDefaultCredentials = _data[\"smtpUseDefaultCredentials\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EmailSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EmailSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"defaultFromAddress\"] = this.defaultFromAddress;\r\n data[\"defaultFromDisplayName\"] = this.defaultFromDisplayName;\r\n data[\"smtpHost\"] = this.smtpHost;\r\n data[\"smtpPort\"] = this.smtpPort;\r\n data[\"smtpUserName\"] = this.smtpUserName;\r\n data[\"smtpPassword\"] = this.smtpPassword;\r\n data[\"smtpDomain\"] = this.smtpDomain;\r\n data[\"smtpEnableSsl\"] = this.smtpEnableSsl;\r\n data[\"smtpUseDefaultCredentials\"] = this.smtpUseDefaultCredentials;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEmailSettingsEditDto {\r\n defaultFromAddress: string | undefined;\r\n defaultFromDisplayName: string | undefined;\r\n smtpHost: string | undefined;\r\n smtpPort: number;\r\n smtpUserName: string | undefined;\r\n smtpPassword: string | undefined;\r\n smtpDomain: string | undefined;\r\n smtpEnableSsl: boolean;\r\n smtpUseDefaultCredentials: boolean;\r\n}\r\n\r\nexport class EntityChangeListDto implements IEntityChangeListDto {\r\n userId!: number | undefined;\r\n userName!: string | undefined;\r\n changeTime!: DateTime;\r\n entityTypeFullName!: string | undefined;\r\n changeType!: EntityChangeType;\r\n readonly changeTypeName!: string | undefined;\r\n entityChangeSetId!: number;\r\n id!: number;\r\n\r\n constructor(data?: IEntityChangeListDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"];\r\n this.userName = _data[\"userName\"];\r\n this.changeTime = _data[\"changeTime\"] ? DateTime.fromISO(_data[\"changeTime\"].toString()) : undefined;\r\n this.entityTypeFullName = _data[\"entityTypeFullName\"];\r\n this.changeType = _data[\"changeType\"];\r\n (this).changeTypeName = _data[\"changeTypeName\"];\r\n this.entityChangeSetId = _data[\"entityChangeSetId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EntityChangeListDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EntityChangeListDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId;\r\n data[\"userName\"] = this.userName;\r\n data[\"changeTime\"] = this.changeTime ? this.changeTime.toString() : undefined;\r\n data[\"entityTypeFullName\"] = this.entityTypeFullName;\r\n data[\"changeType\"] = this.changeType;\r\n data[\"changeTypeName\"] = this.changeTypeName;\r\n data[\"entityChangeSetId\"] = this.entityChangeSetId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEntityChangeListDto {\r\n userId: number | undefined;\r\n userName: string | undefined;\r\n changeTime: DateTime;\r\n entityTypeFullName: string | undefined;\r\n changeType: EntityChangeType;\r\n changeTypeName: string | undefined;\r\n entityChangeSetId: number;\r\n id: number;\r\n}\r\n\r\nexport class EntityChangeListDtoPagedResultDto implements IEntityChangeListDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: EntityChangeListDto[] | undefined;\r\n\r\n constructor(data?: IEntityChangeListDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(EntityChangeListDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): EntityChangeListDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EntityChangeListDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEntityChangeListDtoPagedResultDto {\r\n totalCount: number;\r\n items: EntityChangeListDto[] | undefined;\r\n}\r\n\r\nexport enum EntityChangeType {\r\n Created = 0,\r\n Updated = 1,\r\n Deleted = 2,\r\n _Created = Created,\r\n _Updated = Updated,\r\n _Deleted = Deleted,\r\n}\r\n\r\nexport class EntityDto implements IEntityDto {\r\n id!: number;\r\n\r\n constructor(data?: IEntityDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EntityDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EntityDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEntityDto {\r\n id: number;\r\n}\r\n\r\nexport class EntityPropertyChangeDto implements IEntityPropertyChangeDto {\r\n entityChangeId!: number;\r\n newValue!: string | undefined;\r\n originalValue!: string | undefined;\r\n propertyName!: string | undefined;\r\n propertyTypeFullName!: string | undefined;\r\n tenantId!: number | undefined;\r\n id!: number;\r\n\r\n constructor(data?: IEntityPropertyChangeDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.entityChangeId = _data[\"entityChangeId\"];\r\n this.newValue = _data[\"newValue\"];\r\n this.originalValue = _data[\"originalValue\"];\r\n this.propertyName = _data[\"propertyName\"];\r\n this.propertyTypeFullName = _data[\"propertyTypeFullName\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EntityPropertyChangeDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EntityPropertyChangeDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"entityChangeId\"] = this.entityChangeId;\r\n data[\"newValue\"] = this.newValue;\r\n data[\"originalValue\"] = this.originalValue;\r\n data[\"propertyName\"] = this.propertyName;\r\n data[\"propertyTypeFullName\"] = this.propertyTypeFullName;\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEntityPropertyChangeDto {\r\n entityChangeId: number;\r\n newValue: string | undefined;\r\n originalValue: string | undefined;\r\n propertyName: string | undefined;\r\n propertyTypeFullName: string | undefined;\r\n tenantId: number | undefined;\r\n id: number;\r\n}\r\n\r\nexport class EpisodeApplicationLanguageLookupTableDto implements IEpisodeApplicationLanguageLookupTableDto {\r\n id!: number;\r\n displayName!: string | undefined;\r\n\r\n constructor(data?: IEpisodeApplicationLanguageLookupTableDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EpisodeApplicationLanguageLookupTableDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EpisodeApplicationLanguageLookupTableDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEpisodeApplicationLanguageLookupTableDto {\r\n id: number;\r\n displayName: string | undefined;\r\n}\r\n\r\nexport class EpisodeDto implements IEpisodeDto {\r\n name!: string | undefined;\r\n description!: string | undefined;\r\n title!: string | undefined;\r\n googleFormUrl!: string | undefined;\r\n imageContent!: string | undefined;\r\n imageContentFileName!: string | undefined;\r\n scriptContent!: string | undefined;\r\n scriptContentFileName!: string | undefined;\r\n vocabularyContent!: string | undefined;\r\n vocabularyContentFileName!: string | undefined;\r\n audioContent!: string | undefined;\r\n audioContentFileName!: string | undefined;\r\n applicationLanguageId!: number | undefined;\r\n applicationLanguageName!: string | undefined;\r\n episodeVideoId!: number | undefined;\r\n episodeVideoName!: string | undefined;\r\n episodeVideoContent!: string | undefined;\r\n id!: number;\r\n\r\n constructor(data?: IEpisodeDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.description = _data[\"description\"];\r\n this.title = _data[\"title\"];\r\n this.googleFormUrl = _data[\"googleFormUrl\"];\r\n this.imageContent = _data[\"imageContent\"];\r\n this.imageContentFileName = _data[\"imageContentFileName\"];\r\n this.scriptContent = _data[\"scriptContent\"];\r\n this.scriptContentFileName = _data[\"scriptContentFileName\"];\r\n this.vocabularyContent = _data[\"vocabularyContent\"];\r\n this.vocabularyContentFileName = _data[\"vocabularyContentFileName\"];\r\n this.audioContent = _data[\"audioContent\"];\r\n this.audioContentFileName = _data[\"audioContentFileName\"];\r\n this.applicationLanguageId = _data[\"applicationLanguageId\"];\r\n this.applicationLanguageName = _data[\"applicationLanguageName\"];\r\n this.episodeVideoId = _data[\"episodeVideoId\"];\r\n this.episodeVideoName = _data[\"episodeVideoName\"];\r\n this.episodeVideoContent = _data[\"episodeVideoContent\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EpisodeDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EpisodeDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"description\"] = this.description;\r\n data[\"title\"] = this.title;\r\n data[\"googleFormUrl\"] = this.googleFormUrl;\r\n data[\"imageContent\"] = this.imageContent;\r\n data[\"imageContentFileName\"] = this.imageContentFileName;\r\n data[\"scriptContent\"] = this.scriptContent;\r\n data[\"scriptContentFileName\"] = this.scriptContentFileName;\r\n data[\"vocabularyContent\"] = this.vocabularyContent;\r\n data[\"vocabularyContentFileName\"] = this.vocabularyContentFileName;\r\n data[\"audioContent\"] = this.audioContent;\r\n data[\"audioContentFileName\"] = this.audioContentFileName;\r\n data[\"applicationLanguageId\"] = this.applicationLanguageId;\r\n data[\"applicationLanguageName\"] = this.applicationLanguageName;\r\n data[\"episodeVideoId\"] = this.episodeVideoId;\r\n data[\"episodeVideoName\"] = this.episodeVideoName;\r\n data[\"episodeVideoContent\"] = this.episodeVideoContent;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEpisodeDto {\r\n name: string | undefined;\r\n description: string | undefined;\r\n title: string | undefined;\r\n googleFormUrl: string | undefined;\r\n imageContent: string | undefined;\r\n imageContentFileName: string | undefined;\r\n scriptContent: string | undefined;\r\n scriptContentFileName: string | undefined;\r\n vocabularyContent: string | undefined;\r\n vocabularyContentFileName: string | undefined;\r\n audioContent: string | undefined;\r\n audioContentFileName: string | undefined;\r\n applicationLanguageId: number | undefined;\r\n applicationLanguageName: string | undefined;\r\n episodeVideoId: number | undefined;\r\n episodeVideoName: string | undefined;\r\n episodeVideoContent: string | undefined;\r\n id: number;\r\n}\r\n\r\nexport class EpisodeOvalDto implements IEpisodeOvalDto {\r\n file!: string | undefined;\r\n fileFileName!: string | undefined;\r\n difficultyLevelId!: number | undefined;\r\n ovalId!: number;\r\n episodeId!: number;\r\n oval!: OvalDto;\r\n id!: number;\r\n\r\n constructor(data?: IEpisodeOvalDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.file = _data[\"file\"];\r\n this.fileFileName = _data[\"fileFileName\"];\r\n this.difficultyLevelId = _data[\"difficultyLevelId\"];\r\n this.ovalId = _data[\"ovalId\"];\r\n this.episodeId = _data[\"episodeId\"];\r\n this.oval = _data[\"oval\"] ? OvalDto.fromJS(_data[\"oval\"]) : undefined;\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EpisodeOvalDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EpisodeOvalDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"file\"] = this.file;\r\n data[\"fileFileName\"] = this.fileFileName;\r\n data[\"difficultyLevelId\"] = this.difficultyLevelId;\r\n data[\"ovalId\"] = this.ovalId;\r\n data[\"episodeId\"] = this.episodeId;\r\n data[\"oval\"] = this.oval ? this.oval.toJSON() : undefined;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEpisodeOvalDto {\r\n file: string | undefined;\r\n fileFileName: string | undefined;\r\n difficultyLevelId: number | undefined;\r\n ovalId: number;\r\n episodeId: number;\r\n oval: OvalDto;\r\n id: number;\r\n}\r\n\r\nexport class EpisodeOvalEpisodeLookupTableDto implements IEpisodeOvalEpisodeLookupTableDto {\r\n id!: number;\r\n displayName!: string | undefined;\r\n\r\n constructor(data?: IEpisodeOvalEpisodeLookupTableDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EpisodeOvalEpisodeLookupTableDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EpisodeOvalEpisodeLookupTableDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEpisodeOvalEpisodeLookupTableDto {\r\n id: number;\r\n displayName: string | undefined;\r\n}\r\n\r\nexport class EpisodeOvalOvalLookupTableDto implements IEpisodeOvalOvalLookupTableDto {\r\n id!: number;\r\n displayName!: string | undefined;\r\n\r\n constructor(data?: IEpisodeOvalOvalLookupTableDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EpisodeOvalOvalLookupTableDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EpisodeOvalOvalLookupTableDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEpisodeOvalOvalLookupTableDto {\r\n id: number;\r\n displayName: string | undefined;\r\n}\r\n\r\nexport class EpisodeStatusDto implements IEpisodeStatusDto {\r\n mustFinishEpisodeId!: number | undefined;\r\n\r\n constructor(data?: IEpisodeStatusDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.mustFinishEpisodeId = _data[\"mustFinishEpisodeId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EpisodeStatusDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EpisodeStatusDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"mustFinishEpisodeId\"] = this.mustFinishEpisodeId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEpisodeStatusDto {\r\n mustFinishEpisodeId: number | undefined;\r\n}\r\n\r\nexport class EpisodeUserDto implements IEpisodeUserDto {\r\n hasFeedback!: boolean;\r\n hasWatched!: boolean;\r\n userId!: number | undefined;\r\n episodeId!: number | undefined;\r\n id!: number;\r\n\r\n constructor(data?: IEpisodeUserDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.hasFeedback = _data[\"hasFeedback\"];\r\n this.hasWatched = _data[\"hasWatched\"];\r\n this.userId = _data[\"userId\"];\r\n this.episodeId = _data[\"episodeId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EpisodeUserDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EpisodeUserDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"hasFeedback\"] = this.hasFeedback;\r\n data[\"hasWatched\"] = this.hasWatched;\r\n data[\"userId\"] = this.userId;\r\n data[\"episodeId\"] = this.episodeId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEpisodeUserDto {\r\n hasFeedback: boolean;\r\n hasWatched: boolean;\r\n userId: number | undefined;\r\n episodeId: number | undefined;\r\n id: number;\r\n}\r\n\r\nexport class EpisodeUserEpisodeLookupTableDto implements IEpisodeUserEpisodeLookupTableDto {\r\n id!: number;\r\n displayName!: string | undefined;\r\n\r\n constructor(data?: IEpisodeUserEpisodeLookupTableDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EpisodeUserEpisodeLookupTableDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EpisodeUserEpisodeLookupTableDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEpisodeUserEpisodeLookupTableDto {\r\n id: number;\r\n displayName: string | undefined;\r\n}\r\n\r\nexport class EpisodeUserUserLookupTableDto implements IEpisodeUserUserLookupTableDto {\r\n id!: number;\r\n displayName!: string | undefined;\r\n\r\n constructor(data?: IEpisodeUserUserLookupTableDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EpisodeUserUserLookupTableDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EpisodeUserUserLookupTableDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEpisodeUserUserLookupTableDto {\r\n id: number;\r\n displayName: string | undefined;\r\n}\r\n\r\nexport class EpisodeVideoDto implements IEpisodeVideoDto {\r\n videoContent!: string | undefined;\r\n videoContentFileName!: string | undefined;\r\n id!: number;\r\n\r\n constructor(data?: IEpisodeVideoDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.videoContent = _data[\"videoContent\"];\r\n this.videoContentFileName = _data[\"videoContentFileName\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EpisodeVideoDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EpisodeVideoDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"videoContent\"] = this.videoContent;\r\n data[\"videoContentFileName\"] = this.videoContentFileName;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEpisodeVideoDto {\r\n videoContent: string | undefined;\r\n videoContentFileName: string | undefined;\r\n id: number;\r\n}\r\n\r\nexport class EpisodeVideoLookupTableDto implements IEpisodeVideoLookupTableDto {\r\n id!: number;\r\n displayName!: string | undefined;\r\n\r\n constructor(data?: IEpisodeVideoLookupTableDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): EpisodeVideoLookupTableDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new EpisodeVideoLookupTableDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IEpisodeVideoLookupTableDto {\r\n id: number;\r\n displayName: string | undefined;\r\n}\r\n\r\nexport class ExpiringTenant implements IExpiringTenant {\r\n tenantName!: string | undefined;\r\n remainingDayCount!: number;\r\n\r\n constructor(data?: IExpiringTenant) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenantName = _data[\"tenantName\"];\r\n this.remainingDayCount = _data[\"remainingDayCount\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ExpiringTenant {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ExpiringTenant();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenantName\"] = this.tenantName;\r\n data[\"remainingDayCount\"] = this.remainingDayCount;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IExpiringTenant {\r\n tenantName: string | undefined;\r\n remainingDayCount: number;\r\n}\r\n\r\nexport class ExternalAuthenticateModel implements IExternalAuthenticateModel {\r\n authProvider!: string;\r\n providerKey!: string;\r\n providerAccessCode!: string;\r\n returnUrl!: string | undefined;\r\n singleSignIn!: boolean | undefined;\r\n\r\n constructor(data?: IExternalAuthenticateModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.authProvider = _data[\"authProvider\"];\r\n this.providerKey = _data[\"providerKey\"];\r\n this.providerAccessCode = _data[\"providerAccessCode\"];\r\n this.returnUrl = _data[\"returnUrl\"];\r\n this.singleSignIn = _data[\"singleSignIn\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ExternalAuthenticateModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ExternalAuthenticateModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"authProvider\"] = this.authProvider;\r\n data[\"providerKey\"] = this.providerKey;\r\n data[\"providerAccessCode\"] = this.providerAccessCode;\r\n data[\"returnUrl\"] = this.returnUrl;\r\n data[\"singleSignIn\"] = this.singleSignIn;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IExternalAuthenticateModel {\r\n authProvider: string;\r\n providerKey: string;\r\n providerAccessCode: string;\r\n returnUrl: string | undefined;\r\n singleSignIn: boolean | undefined;\r\n}\r\n\r\nexport class ExternalAuthenticateResultModel implements IExternalAuthenticateResultModel {\r\n accessToken!: string | undefined;\r\n encryptedAccessToken!: string | undefined;\r\n expireInSeconds!: number;\r\n waitingForActivation!: boolean;\r\n returnUrl!: string | undefined;\r\n refreshToken!: string | undefined;\r\n refreshTokenExpireInSeconds!: number;\r\n\r\n constructor(data?: IExternalAuthenticateResultModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.accessToken = _data[\"accessToken\"];\r\n this.encryptedAccessToken = _data[\"encryptedAccessToken\"];\r\n this.expireInSeconds = _data[\"expireInSeconds\"];\r\n this.waitingForActivation = _data[\"waitingForActivation\"];\r\n this.returnUrl = _data[\"returnUrl\"];\r\n this.refreshToken = _data[\"refreshToken\"];\r\n this.refreshTokenExpireInSeconds = _data[\"refreshTokenExpireInSeconds\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ExternalAuthenticateResultModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ExternalAuthenticateResultModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"accessToken\"] = this.accessToken;\r\n data[\"encryptedAccessToken\"] = this.encryptedAccessToken;\r\n data[\"expireInSeconds\"] = this.expireInSeconds;\r\n data[\"waitingForActivation\"] = this.waitingForActivation;\r\n data[\"returnUrl\"] = this.returnUrl;\r\n data[\"refreshToken\"] = this.refreshToken;\r\n data[\"refreshTokenExpireInSeconds\"] = this.refreshTokenExpireInSeconds;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IExternalAuthenticateResultModel {\r\n accessToken: string | undefined;\r\n encryptedAccessToken: string | undefined;\r\n expireInSeconds: number;\r\n waitingForActivation: boolean;\r\n returnUrl: string | undefined;\r\n refreshToken: string | undefined;\r\n refreshTokenExpireInSeconds: number;\r\n}\r\n\r\nexport class ExternalLoginProviderInfoModel implements IExternalLoginProviderInfoModel {\r\n name!: string | undefined;\r\n clientId!: string | undefined;\r\n additionalParams!: { [key: string]: string; } | undefined;\r\n\r\n constructor(data?: IExternalLoginProviderInfoModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.clientId = _data[\"clientId\"];\r\n if (_data[\"additionalParams\"]) {\r\n this.additionalParams = {} as any;\r\n for (let key in _data[\"additionalParams\"]) {\r\n if (_data[\"additionalParams\"].hasOwnProperty(key))\r\n (this.additionalParams)![key] = _data[\"additionalParams\"][key];\r\n }\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): ExternalLoginProviderInfoModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ExternalLoginProviderInfoModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"clientId\"] = this.clientId;\r\n if (this.additionalParams) {\r\n data[\"additionalParams\"] = {};\r\n for (let key in this.additionalParams) {\r\n if (this.additionalParams.hasOwnProperty(key))\r\n (data[\"additionalParams\"])[key] = (this.additionalParams)[key];\r\n }\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IExternalLoginProviderInfoModel {\r\n name: string | undefined;\r\n clientId: string | undefined;\r\n additionalParams: { [key: string]: string; } | undefined;\r\n}\r\n\r\nexport class ExternalLoginProviderSettingsEditDto implements IExternalLoginProviderSettingsEditDto {\r\n facebook_IsDeactivated!: boolean;\r\n facebook!: FacebookExternalLoginProviderSettings;\r\n google_IsDeactivated!: boolean;\r\n google!: GoogleExternalLoginProviderSettings;\r\n twitter_IsDeactivated!: boolean;\r\n twitter!: TwitterExternalLoginProviderSettings;\r\n microsoft_IsDeactivated!: boolean;\r\n microsoft!: MicrosoftExternalLoginProviderSettings;\r\n openIdConnect_IsDeactivated!: boolean;\r\n openIdConnect!: OpenIdConnectExternalLoginProviderSettings;\r\n openIdConnectClaimsMapping!: JsonClaimMapDto[] | undefined;\r\n wsFederation_IsDeactivated!: boolean;\r\n wsFederation!: WsFederationExternalLoginProviderSettings;\r\n wsFederationClaimsMapping!: JsonClaimMapDto[] | undefined;\r\n\r\n constructor(data?: IExternalLoginProviderSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.facebook_IsDeactivated = _data[\"facebook_IsDeactivated\"];\r\n this.facebook = _data[\"facebook\"] ? FacebookExternalLoginProviderSettings.fromJS(_data[\"facebook\"]) : undefined;\r\n this.google_IsDeactivated = _data[\"google_IsDeactivated\"];\r\n this.google = _data[\"google\"] ? GoogleExternalLoginProviderSettings.fromJS(_data[\"google\"]) : undefined;\r\n this.twitter_IsDeactivated = _data[\"twitter_IsDeactivated\"];\r\n this.twitter = _data[\"twitter\"] ? TwitterExternalLoginProviderSettings.fromJS(_data[\"twitter\"]) : undefined;\r\n this.microsoft_IsDeactivated = _data[\"microsoft_IsDeactivated\"];\r\n this.microsoft = _data[\"microsoft\"] ? MicrosoftExternalLoginProviderSettings.fromJS(_data[\"microsoft\"]) : undefined;\r\n this.openIdConnect_IsDeactivated = _data[\"openIdConnect_IsDeactivated\"];\r\n this.openIdConnect = _data[\"openIdConnect\"] ? OpenIdConnectExternalLoginProviderSettings.fromJS(_data[\"openIdConnect\"]) : undefined;\r\n if (Array.isArray(_data[\"openIdConnectClaimsMapping\"])) {\r\n this.openIdConnectClaimsMapping = [] as any;\r\n for (let item of _data[\"openIdConnectClaimsMapping\"])\r\n this.openIdConnectClaimsMapping!.push(JsonClaimMapDto.fromJS(item));\r\n }\r\n this.wsFederation_IsDeactivated = _data[\"wsFederation_IsDeactivated\"];\r\n this.wsFederation = _data[\"wsFederation\"] ? WsFederationExternalLoginProviderSettings.fromJS(_data[\"wsFederation\"]) : undefined;\r\n if (Array.isArray(_data[\"wsFederationClaimsMapping\"])) {\r\n this.wsFederationClaimsMapping = [] as any;\r\n for (let item of _data[\"wsFederationClaimsMapping\"])\r\n this.wsFederationClaimsMapping!.push(JsonClaimMapDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): ExternalLoginProviderSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ExternalLoginProviderSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"facebook_IsDeactivated\"] = this.facebook_IsDeactivated;\r\n data[\"facebook\"] = this.facebook ? this.facebook.toJSON() : undefined;\r\n data[\"google_IsDeactivated\"] = this.google_IsDeactivated;\r\n data[\"google\"] = this.google ? this.google.toJSON() : undefined;\r\n data[\"twitter_IsDeactivated\"] = this.twitter_IsDeactivated;\r\n data[\"twitter\"] = this.twitter ? this.twitter.toJSON() : undefined;\r\n data[\"microsoft_IsDeactivated\"] = this.microsoft_IsDeactivated;\r\n data[\"microsoft\"] = this.microsoft ? this.microsoft.toJSON() : undefined;\r\n data[\"openIdConnect_IsDeactivated\"] = this.openIdConnect_IsDeactivated;\r\n data[\"openIdConnect\"] = this.openIdConnect ? this.openIdConnect.toJSON() : undefined;\r\n if (Array.isArray(this.openIdConnectClaimsMapping)) {\r\n data[\"openIdConnectClaimsMapping\"] = [];\r\n for (let item of this.openIdConnectClaimsMapping)\r\n data[\"openIdConnectClaimsMapping\"].push(item.toJSON());\r\n }\r\n data[\"wsFederation_IsDeactivated\"] = this.wsFederation_IsDeactivated;\r\n data[\"wsFederation\"] = this.wsFederation ? this.wsFederation.toJSON() : undefined;\r\n if (Array.isArray(this.wsFederationClaimsMapping)) {\r\n data[\"wsFederationClaimsMapping\"] = [];\r\n for (let item of this.wsFederationClaimsMapping)\r\n data[\"wsFederationClaimsMapping\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IExternalLoginProviderSettingsEditDto {\r\n facebook_IsDeactivated: boolean;\r\n facebook: FacebookExternalLoginProviderSettings;\r\n google_IsDeactivated: boolean;\r\n google: GoogleExternalLoginProviderSettings;\r\n twitter_IsDeactivated: boolean;\r\n twitter: TwitterExternalLoginProviderSettings;\r\n microsoft_IsDeactivated: boolean;\r\n microsoft: MicrosoftExternalLoginProviderSettings;\r\n openIdConnect_IsDeactivated: boolean;\r\n openIdConnect: OpenIdConnectExternalLoginProviderSettings;\r\n openIdConnectClaimsMapping: JsonClaimMapDto[] | undefined;\r\n wsFederation_IsDeactivated: boolean;\r\n wsFederation: WsFederationExternalLoginProviderSettings;\r\n wsFederationClaimsMapping: JsonClaimMapDto[] | undefined;\r\n}\r\n\r\nexport class ExternalLoginSettingsDto implements IExternalLoginSettingsDto {\r\n enabledSocialLoginSettings!: string[] | undefined;\r\n\r\n constructor(data?: IExternalLoginSettingsDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"enabledSocialLoginSettings\"])) {\r\n this.enabledSocialLoginSettings = [] as any;\r\n for (let item of _data[\"enabledSocialLoginSettings\"])\r\n this.enabledSocialLoginSettings!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): ExternalLoginSettingsDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ExternalLoginSettingsDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.enabledSocialLoginSettings)) {\r\n data[\"enabledSocialLoginSettings\"] = [];\r\n for (let item of this.enabledSocialLoginSettings)\r\n data[\"enabledSocialLoginSettings\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IExternalLoginSettingsDto {\r\n enabledSocialLoginSettings: string[] | undefined;\r\n}\r\n\r\nexport class FacebookExternalLoginProviderSettings implements IFacebookExternalLoginProviderSettings {\r\n appId!: string | undefined;\r\n appSecret!: string | undefined;\r\n\r\n constructor(data?: IFacebookExternalLoginProviderSettings) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.appId = _data[\"appId\"];\r\n this.appSecret = _data[\"appSecret\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): FacebookExternalLoginProviderSettings {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new FacebookExternalLoginProviderSettings();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"appId\"] = this.appId;\r\n data[\"appSecret\"] = this.appSecret;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IFacebookExternalLoginProviderSettings {\r\n appId: string | undefined;\r\n appSecret: string | undefined;\r\n}\r\n\r\nexport class FeatureInputTypeDto implements IFeatureInputTypeDto {\r\n name!: string | undefined;\r\n attributes!: { [key: string]: any; } | undefined;\r\n validator!: IValueValidator;\r\n itemSource!: LocalizableComboboxItemSourceDto;\r\n\r\n constructor(data?: IFeatureInputTypeDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n if (_data[\"attributes\"]) {\r\n this.attributes = {} as any;\r\n for (let key in _data[\"attributes\"]) {\r\n if (_data[\"attributes\"].hasOwnProperty(key))\r\n (this.attributes)![key] = _data[\"attributes\"][key];\r\n }\r\n }\r\n this.validator = _data[\"validator\"] ? IValueValidator.fromJS(_data[\"validator\"]) : undefined;\r\n this.itemSource = _data[\"itemSource\"] ? LocalizableComboboxItemSourceDto.fromJS(_data[\"itemSource\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): FeatureInputTypeDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new FeatureInputTypeDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n if (this.attributes) {\r\n data[\"attributes\"] = {};\r\n for (let key in this.attributes) {\r\n if (this.attributes.hasOwnProperty(key))\r\n (data[\"attributes\"])[key] = (this.attributes)[key];\r\n }\r\n }\r\n data[\"validator\"] = this.validator ? this.validator.toJSON() : undefined;\r\n data[\"itemSource\"] = this.itemSource ? this.itemSource.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IFeatureInputTypeDto {\r\n name: string | undefined;\r\n attributes: { [key: string]: any; } | undefined;\r\n validator: IValueValidator;\r\n itemSource: LocalizableComboboxItemSourceDto;\r\n}\r\n\r\nexport class FileDto implements IFileDto {\r\n fileName!: string;\r\n fileType!: string | undefined;\r\n fileToken!: string;\r\n\r\n constructor(data?: IFileDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.fileName = _data[\"fileName\"];\r\n this.fileType = _data[\"fileType\"];\r\n this.fileToken = _data[\"fileToken\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): FileDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new FileDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"fileName\"] = this.fileName;\r\n data[\"fileType\"] = this.fileType;\r\n data[\"fileToken\"] = this.fileToken;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IFileDto {\r\n fileName: string;\r\n fileType: string | undefined;\r\n fileToken: string;\r\n}\r\n\r\nexport class FindOrganizationUnitRolesInput implements IFindOrganizationUnitRolesInput {\r\n organizationUnitId!: number;\r\n maxResultCount!: number;\r\n skipCount!: number;\r\n filter!: string | undefined;\r\n\r\n constructor(data?: IFindOrganizationUnitRolesInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.organizationUnitId = _data[\"organizationUnitId\"];\r\n this.maxResultCount = _data[\"maxResultCount\"];\r\n this.skipCount = _data[\"skipCount\"];\r\n this.filter = _data[\"filter\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): FindOrganizationUnitRolesInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new FindOrganizationUnitRolesInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"organizationUnitId\"] = this.organizationUnitId;\r\n data[\"maxResultCount\"] = this.maxResultCount;\r\n data[\"skipCount\"] = this.skipCount;\r\n data[\"filter\"] = this.filter;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IFindOrganizationUnitRolesInput {\r\n organizationUnitId: number;\r\n maxResultCount: number;\r\n skipCount: number;\r\n filter: string | undefined;\r\n}\r\n\r\nexport class FindOrganizationUnitUsersInput implements IFindOrganizationUnitUsersInput {\r\n organizationUnitId!: number;\r\n maxResultCount!: number;\r\n skipCount!: number;\r\n filter!: string | undefined;\r\n\r\n constructor(data?: IFindOrganizationUnitUsersInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.organizationUnitId = _data[\"organizationUnitId\"];\r\n this.maxResultCount = _data[\"maxResultCount\"];\r\n this.skipCount = _data[\"skipCount\"];\r\n this.filter = _data[\"filter\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): FindOrganizationUnitUsersInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new FindOrganizationUnitUsersInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"organizationUnitId\"] = this.organizationUnitId;\r\n data[\"maxResultCount\"] = this.maxResultCount;\r\n data[\"skipCount\"] = this.skipCount;\r\n data[\"filter\"] = this.filter;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IFindOrganizationUnitUsersInput {\r\n organizationUnitId: number;\r\n maxResultCount: number;\r\n skipCount: number;\r\n filter: string | undefined;\r\n}\r\n\r\nexport class FindUsersInput implements IFindUsersInput {\r\n tenantId!: number | undefined;\r\n excludeCurrentUser!: boolean;\r\n maxResultCount!: number;\r\n skipCount!: number;\r\n filter!: string | undefined;\r\n\r\n constructor(data?: IFindUsersInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenantId = _data[\"tenantId\"];\r\n this.excludeCurrentUser = _data[\"excludeCurrentUser\"];\r\n this.maxResultCount = _data[\"maxResultCount\"];\r\n this.skipCount = _data[\"skipCount\"];\r\n this.filter = _data[\"filter\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): FindUsersInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new FindUsersInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"excludeCurrentUser\"] = this.excludeCurrentUser;\r\n data[\"maxResultCount\"] = this.maxResultCount;\r\n data[\"skipCount\"] = this.skipCount;\r\n data[\"filter\"] = this.filter;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IFindUsersInput {\r\n tenantId: number | undefined;\r\n excludeCurrentUser: boolean;\r\n maxResultCount: number;\r\n skipCount: number;\r\n filter: string | undefined;\r\n}\r\n\r\nexport class FlatFeatureDto implements IFlatFeatureDto {\r\n parentName!: string | undefined;\r\n name!: string | undefined;\r\n displayName!: string | undefined;\r\n description!: string | undefined;\r\n defaultValue!: string | undefined;\r\n inputType!: FeatureInputTypeDto;\r\n\r\n constructor(data?: IFlatFeatureDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.parentName = _data[\"parentName\"];\r\n this.name = _data[\"name\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.description = _data[\"description\"];\r\n this.defaultValue = _data[\"defaultValue\"];\r\n this.inputType = _data[\"inputType\"] ? FeatureInputTypeDto.fromJS(_data[\"inputType\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): FlatFeatureDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new FlatFeatureDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"parentName\"] = this.parentName;\r\n data[\"name\"] = this.name;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"description\"] = this.description;\r\n data[\"defaultValue\"] = this.defaultValue;\r\n data[\"inputType\"] = this.inputType ? this.inputType.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IFlatFeatureDto {\r\n parentName: string | undefined;\r\n name: string | undefined;\r\n displayName: string | undefined;\r\n description: string | undefined;\r\n defaultValue: string | undefined;\r\n inputType: FeatureInputTypeDto;\r\n}\r\n\r\nexport class FlatFeatureSelectDto implements IFlatFeatureSelectDto {\r\n parentName!: string | undefined;\r\n name!: string | undefined;\r\n displayName!: string | undefined;\r\n description!: string | undefined;\r\n defaultValue!: string | undefined;\r\n inputType!: IInputType;\r\n textHtmlColor!: string | undefined;\r\n\r\n constructor(data?: IFlatFeatureSelectDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.parentName = _data[\"parentName\"];\r\n this.name = _data[\"name\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.description = _data[\"description\"];\r\n this.defaultValue = _data[\"defaultValue\"];\r\n this.inputType = _data[\"inputType\"] ? IInputType.fromJS(_data[\"inputType\"]) : undefined;\r\n this.textHtmlColor = _data[\"textHtmlColor\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): FlatFeatureSelectDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new FlatFeatureSelectDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"parentName\"] = this.parentName;\r\n data[\"name\"] = this.name;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"description\"] = this.description;\r\n data[\"defaultValue\"] = this.defaultValue;\r\n data[\"inputType\"] = this.inputType ? this.inputType.toJSON() : undefined;\r\n data[\"textHtmlColor\"] = this.textHtmlColor;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IFlatFeatureSelectDto {\r\n parentName: string | undefined;\r\n name: string | undefined;\r\n displayName: string | undefined;\r\n description: string | undefined;\r\n defaultValue: string | undefined;\r\n inputType: IInputType;\r\n textHtmlColor: string | undefined;\r\n}\r\n\r\nexport class FlatPermissionDto implements IFlatPermissionDto {\r\n parentName!: string | undefined;\r\n name!: string | undefined;\r\n displayName!: string | undefined;\r\n description!: string | undefined;\r\n isGrantedByDefault!: boolean;\r\n\r\n constructor(data?: IFlatPermissionDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.parentName = _data[\"parentName\"];\r\n this.name = _data[\"name\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.description = _data[\"description\"];\r\n this.isGrantedByDefault = _data[\"isGrantedByDefault\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): FlatPermissionDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new FlatPermissionDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"parentName\"] = this.parentName;\r\n data[\"name\"] = this.name;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"description\"] = this.description;\r\n data[\"isGrantedByDefault\"] = this.isGrantedByDefault;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IFlatPermissionDto {\r\n parentName: string | undefined;\r\n name: string | undefined;\r\n displayName: string | undefined;\r\n description: string | undefined;\r\n isGrantedByDefault: boolean;\r\n}\r\n\r\nexport class FlatPermissionWithDifficultyLevelDto implements IFlatPermissionWithDifficultyLevelDto {\r\n difficultyLevel!: number;\r\n parentName!: string | undefined;\r\n name!: string | undefined;\r\n displayName!: string | undefined;\r\n description!: string | undefined;\r\n isGrantedByDefault!: boolean;\r\n\r\n constructor(data?: IFlatPermissionWithDifficultyLevelDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.difficultyLevel = _data[\"difficultyLevel\"];\r\n this.parentName = _data[\"parentName\"];\r\n this.name = _data[\"name\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.description = _data[\"description\"];\r\n this.isGrantedByDefault = _data[\"isGrantedByDefault\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): FlatPermissionWithDifficultyLevelDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new FlatPermissionWithDifficultyLevelDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"difficultyLevel\"] = this.difficultyLevel;\r\n data[\"parentName\"] = this.parentName;\r\n data[\"name\"] = this.name;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"description\"] = this.description;\r\n data[\"isGrantedByDefault\"] = this.isGrantedByDefault;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IFlatPermissionWithDifficultyLevelDto {\r\n difficultyLevel: number;\r\n parentName: string | undefined;\r\n name: string | undefined;\r\n displayName: string | undefined;\r\n description: string | undefined;\r\n isGrantedByDefault: boolean;\r\n}\r\n\r\nexport class FlatPermissionWithDifficultyLevelDtoListResultDto implements IFlatPermissionWithDifficultyLevelDtoListResultDto {\r\n items!: FlatPermissionWithDifficultyLevelDto[] | undefined;\r\n\r\n constructor(data?: IFlatPermissionWithDifficultyLevelDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(FlatPermissionWithDifficultyLevelDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): FlatPermissionWithDifficultyLevelDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new FlatPermissionWithDifficultyLevelDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IFlatPermissionWithDifficultyLevelDtoListResultDto {\r\n items: FlatPermissionWithDifficultyLevelDto[] | undefined;\r\n}\r\n\r\nexport class FriendDto implements IFriendDto {\r\n friendUserId!: number;\r\n friendTenantId!: number | undefined;\r\n friendUserName!: string | undefined;\r\n friendTenancyName!: string | undefined;\r\n friendProfilePictureId!: string | undefined;\r\n unreadMessageCount!: number;\r\n isOnline!: boolean;\r\n state!: FriendshipState;\r\n\r\n constructor(data?: IFriendDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.friendUserId = _data[\"friendUserId\"];\r\n this.friendTenantId = _data[\"friendTenantId\"];\r\n this.friendUserName = _data[\"friendUserName\"];\r\n this.friendTenancyName = _data[\"friendTenancyName\"];\r\n this.friendProfilePictureId = _data[\"friendProfilePictureId\"];\r\n this.unreadMessageCount = _data[\"unreadMessageCount\"];\r\n this.isOnline = _data[\"isOnline\"];\r\n this.state = _data[\"state\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): FriendDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new FriendDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"friendUserId\"] = this.friendUserId;\r\n data[\"friendTenantId\"] = this.friendTenantId;\r\n data[\"friendUserName\"] = this.friendUserName;\r\n data[\"friendTenancyName\"] = this.friendTenancyName;\r\n data[\"friendProfilePictureId\"] = this.friendProfilePictureId;\r\n data[\"unreadMessageCount\"] = this.unreadMessageCount;\r\n data[\"isOnline\"] = this.isOnline;\r\n data[\"state\"] = this.state;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IFriendDto {\r\n friendUserId: number;\r\n friendTenantId: number | undefined;\r\n friendUserName: string | undefined;\r\n friendTenancyName: string | undefined;\r\n friendProfilePictureId: string | undefined;\r\n unreadMessageCount: number;\r\n isOnline: boolean;\r\n state: FriendshipState;\r\n}\r\n\r\nexport enum FriendshipState {\r\n Accepted = 1,\r\n Blocked = 2,\r\n _Accepted = Accepted,\r\n _Blocked = Blocked,\r\n}\r\n\r\nexport enum GenderType {\r\n Unknown = 1,\r\n Male = 2,\r\n Female = 3,\r\n _Unknown = Unknown,\r\n _Male = Male,\r\n _Female = Female,\r\n}\r\n\r\nexport class GeneralSettingsEditDto implements IGeneralSettingsEditDto {\r\n timezone!: string | undefined;\r\n timezoneForComparison!: string | undefined;\r\n\r\n constructor(data?: IGeneralSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.timezone = _data[\"timezone\"];\r\n this.timezoneForComparison = _data[\"timezoneForComparison\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GeneralSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GeneralSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"timezone\"] = this.timezone;\r\n data[\"timezoneForComparison\"] = this.timezoneForComparison;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGeneralSettingsEditDto {\r\n timezone: string | undefined;\r\n timezoneForComparison: string | undefined;\r\n}\r\n\r\nexport class GetAllAvailableWebhooksOutput implements IGetAllAvailableWebhooksOutput {\r\n name!: string | undefined;\r\n displayName!: string | undefined;\r\n description!: string | undefined;\r\n\r\n constructor(data?: IGetAllAvailableWebhooksOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.description = _data[\"description\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetAllAvailableWebhooksOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetAllAvailableWebhooksOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"description\"] = this.description;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetAllAvailableWebhooksOutput {\r\n name: string | undefined;\r\n displayName: string | undefined;\r\n description: string | undefined;\r\n}\r\n\r\nexport class GetAllAvailableWebhooksOutputListResultDto implements IGetAllAvailableWebhooksOutputListResultDto {\r\n items!: GetAllAvailableWebhooksOutput[] | undefined;\r\n\r\n constructor(data?: IGetAllAvailableWebhooksOutputListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetAllAvailableWebhooksOutput.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetAllAvailableWebhooksOutputListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetAllAvailableWebhooksOutputListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetAllAvailableWebhooksOutputListResultDto {\r\n items: GetAllAvailableWebhooksOutput[] | undefined;\r\n}\r\n\r\nexport class GetAllDynamicEntityPropertyValuesOutput implements IGetAllDynamicEntityPropertyValuesOutput {\r\n items!: GetAllDynamicEntityPropertyValuesOutputItem[] | undefined;\r\n\r\n constructor(data?: IGetAllDynamicEntityPropertyValuesOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetAllDynamicEntityPropertyValuesOutputItem.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetAllDynamicEntityPropertyValuesOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetAllDynamicEntityPropertyValuesOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetAllDynamicEntityPropertyValuesOutput {\r\n items: GetAllDynamicEntityPropertyValuesOutputItem[] | undefined;\r\n}\r\n\r\nexport class GetAllDynamicEntityPropertyValuesOutputItem implements IGetAllDynamicEntityPropertyValuesOutputItem {\r\n dynamicEntityPropertyId!: number;\r\n propertyName!: string | undefined;\r\n inputType!: IInputType;\r\n selectedValues!: string[] | undefined;\r\n allValuesInputTypeHas!: string[] | undefined;\r\n\r\n constructor(data?: IGetAllDynamicEntityPropertyValuesOutputItem) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.dynamicEntityPropertyId = _data[\"dynamicEntityPropertyId\"];\r\n this.propertyName = _data[\"propertyName\"];\r\n this.inputType = _data[\"inputType\"] ? IInputType.fromJS(_data[\"inputType\"]) : undefined;\r\n if (Array.isArray(_data[\"selectedValues\"])) {\r\n this.selectedValues = [] as any;\r\n for (let item of _data[\"selectedValues\"])\r\n this.selectedValues!.push(item);\r\n }\r\n if (Array.isArray(_data[\"allValuesInputTypeHas\"])) {\r\n this.allValuesInputTypeHas = [] as any;\r\n for (let item of _data[\"allValuesInputTypeHas\"])\r\n this.allValuesInputTypeHas!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetAllDynamicEntityPropertyValuesOutputItem {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetAllDynamicEntityPropertyValuesOutputItem();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"dynamicEntityPropertyId\"] = this.dynamicEntityPropertyId;\r\n data[\"propertyName\"] = this.propertyName;\r\n data[\"inputType\"] = this.inputType ? this.inputType.toJSON() : undefined;\r\n if (Array.isArray(this.selectedValues)) {\r\n data[\"selectedValues\"] = [];\r\n for (let item of this.selectedValues)\r\n data[\"selectedValues\"].push(item);\r\n }\r\n if (Array.isArray(this.allValuesInputTypeHas)) {\r\n data[\"allValuesInputTypeHas\"] = [];\r\n for (let item of this.allValuesInputTypeHas)\r\n data[\"allValuesInputTypeHas\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetAllDynamicEntityPropertyValuesOutputItem {\r\n dynamicEntityPropertyId: number;\r\n propertyName: string | undefined;\r\n inputType: IInputType;\r\n selectedValues: string[] | undefined;\r\n allValuesInputTypeHas: string[] | undefined;\r\n}\r\n\r\nexport class GetAllEntitiesHasDynamicPropertyOutput implements IGetAllEntitiesHasDynamicPropertyOutput {\r\n entityFullName!: string | undefined;\r\n\r\n constructor(data?: IGetAllEntitiesHasDynamicPropertyOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.entityFullName = _data[\"entityFullName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetAllEntitiesHasDynamicPropertyOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetAllEntitiesHasDynamicPropertyOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"entityFullName\"] = this.entityFullName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetAllEntitiesHasDynamicPropertyOutput {\r\n entityFullName: string | undefined;\r\n}\r\n\r\nexport class GetAllEntitiesHasDynamicPropertyOutputListResultDto implements IGetAllEntitiesHasDynamicPropertyOutputListResultDto {\r\n items!: GetAllEntitiesHasDynamicPropertyOutput[] | undefined;\r\n\r\n constructor(data?: IGetAllEntitiesHasDynamicPropertyOutputListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetAllEntitiesHasDynamicPropertyOutput.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetAllEntitiesHasDynamicPropertyOutputListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetAllEntitiesHasDynamicPropertyOutputListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetAllEntitiesHasDynamicPropertyOutputListResultDto {\r\n items: GetAllEntitiesHasDynamicPropertyOutput[] | undefined;\r\n}\r\n\r\nexport class GetAllSendAttemptsOfWebhookEventOutput implements IGetAllSendAttemptsOfWebhookEventOutput {\r\n id!: string;\r\n webhookUri!: string | undefined;\r\n webhookSubscriptionId!: string;\r\n response!: string | undefined;\r\n responseStatusCode!: HttpStatusCode;\r\n creationTime!: DateTime;\r\n lastModificationTime!: DateTime | undefined;\r\n\r\n constructor(data?: IGetAllSendAttemptsOfWebhookEventOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.webhookUri = _data[\"webhookUri\"];\r\n this.webhookSubscriptionId = _data[\"webhookSubscriptionId\"];\r\n this.response = _data[\"response\"];\r\n this.responseStatusCode = _data[\"responseStatusCode\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n this.lastModificationTime = _data[\"lastModificationTime\"] ? DateTime.fromISO(_data[\"lastModificationTime\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetAllSendAttemptsOfWebhookEventOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetAllSendAttemptsOfWebhookEventOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"webhookUri\"] = this.webhookUri;\r\n data[\"webhookSubscriptionId\"] = this.webhookSubscriptionId;\r\n data[\"response\"] = this.response;\r\n data[\"responseStatusCode\"] = this.responseStatusCode;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n data[\"lastModificationTime\"] = this.lastModificationTime ? this.lastModificationTime.toString() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetAllSendAttemptsOfWebhookEventOutput {\r\n id: string;\r\n webhookUri: string | undefined;\r\n webhookSubscriptionId: string;\r\n response: string | undefined;\r\n responseStatusCode: HttpStatusCode;\r\n creationTime: DateTime;\r\n lastModificationTime: DateTime | undefined;\r\n}\r\n\r\nexport class GetAllSendAttemptsOfWebhookEventOutputListResultDto implements IGetAllSendAttemptsOfWebhookEventOutputListResultDto {\r\n items!: GetAllSendAttemptsOfWebhookEventOutput[] | undefined;\r\n\r\n constructor(data?: IGetAllSendAttemptsOfWebhookEventOutputListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetAllSendAttemptsOfWebhookEventOutput.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetAllSendAttemptsOfWebhookEventOutputListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetAllSendAttemptsOfWebhookEventOutputListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetAllSendAttemptsOfWebhookEventOutputListResultDto {\r\n items: GetAllSendAttemptsOfWebhookEventOutput[] | undefined;\r\n}\r\n\r\nexport class GetAllSendAttemptsOutput implements IGetAllSendAttemptsOutput {\r\n id!: string;\r\n webhookEventId!: string;\r\n webhookName!: string | undefined;\r\n data!: string | undefined;\r\n response!: string | undefined;\r\n responseStatusCode!: HttpStatusCode;\r\n creationTime!: DateTime;\r\n\r\n constructor(data?: IGetAllSendAttemptsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.webhookEventId = _data[\"webhookEventId\"];\r\n this.webhookName = _data[\"webhookName\"];\r\n this.data = _data[\"data\"];\r\n this.response = _data[\"response\"];\r\n this.responseStatusCode = _data[\"responseStatusCode\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetAllSendAttemptsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetAllSendAttemptsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"webhookEventId\"] = this.webhookEventId;\r\n data[\"webhookName\"] = this.webhookName;\r\n data[\"data\"] = this.data;\r\n data[\"response\"] = this.response;\r\n data[\"responseStatusCode\"] = this.responseStatusCode;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetAllSendAttemptsOutput {\r\n id: string;\r\n webhookEventId: string;\r\n webhookName: string | undefined;\r\n data: string | undefined;\r\n response: string | undefined;\r\n responseStatusCode: HttpStatusCode;\r\n creationTime: DateTime;\r\n}\r\n\r\nexport class GetAllSendAttemptsOutputPagedResultDto implements IGetAllSendAttemptsOutputPagedResultDto {\r\n totalCount!: number;\r\n items!: GetAllSendAttemptsOutput[] | undefined;\r\n\r\n constructor(data?: IGetAllSendAttemptsOutputPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetAllSendAttemptsOutput.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetAllSendAttemptsOutputPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetAllSendAttemptsOutputPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetAllSendAttemptsOutputPagedResultDto {\r\n totalCount: number;\r\n items: GetAllSendAttemptsOutput[] | undefined;\r\n}\r\n\r\nexport class GetAllSubscriptionsOutput implements IGetAllSubscriptionsOutput {\r\n webhookUri!: string | undefined;\r\n isActive!: boolean;\r\n webhooks!: string[] | undefined;\r\n id!: string;\r\n\r\n constructor(data?: IGetAllSubscriptionsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.webhookUri = _data[\"webhookUri\"];\r\n this.isActive = _data[\"isActive\"];\r\n if (Array.isArray(_data[\"webhooks\"])) {\r\n this.webhooks = [] as any;\r\n for (let item of _data[\"webhooks\"])\r\n this.webhooks!.push(item);\r\n }\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetAllSubscriptionsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetAllSubscriptionsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"webhookUri\"] = this.webhookUri;\r\n data[\"isActive\"] = this.isActive;\r\n if (Array.isArray(this.webhooks)) {\r\n data[\"webhooks\"] = [];\r\n for (let item of this.webhooks)\r\n data[\"webhooks\"].push(item);\r\n }\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetAllSubscriptionsOutput {\r\n webhookUri: string | undefined;\r\n isActive: boolean;\r\n webhooks: string[] | undefined;\r\n id: string;\r\n}\r\n\r\nexport class GetAllSubscriptionsOutputListResultDto implements IGetAllSubscriptionsOutputListResultDto {\r\n items!: GetAllSubscriptionsOutput[] | undefined;\r\n\r\n constructor(data?: IGetAllSubscriptionsOutputListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetAllSubscriptionsOutput.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetAllSubscriptionsOutputListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetAllSubscriptionsOutputListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetAllSubscriptionsOutputListResultDto {\r\n items: GetAllSubscriptionsOutput[] | undefined;\r\n}\r\n\r\nexport class GetCurrentLoginInformationsOutput implements IGetCurrentLoginInformationsOutput {\r\n user!: UserLoginInfoDto;\r\n impersonatorUser!: UserLoginInfoDto;\r\n tenant!: TenantLoginInfoDto;\r\n impersonatorTenant!: TenantLoginInfoDto;\r\n application!: ApplicationInfoDto;\r\n theme!: UiCustomizationSettingsDto;\r\n\r\n constructor(data?: IGetCurrentLoginInformationsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.user = _data[\"user\"] ? UserLoginInfoDto.fromJS(_data[\"user\"]) : undefined;\r\n this.impersonatorUser = _data[\"impersonatorUser\"] ? UserLoginInfoDto.fromJS(_data[\"impersonatorUser\"]) : undefined;\r\n this.tenant = _data[\"tenant\"] ? TenantLoginInfoDto.fromJS(_data[\"tenant\"]) : undefined;\r\n this.impersonatorTenant = _data[\"impersonatorTenant\"] ? TenantLoginInfoDto.fromJS(_data[\"impersonatorTenant\"]) : undefined;\r\n this.application = _data[\"application\"] ? ApplicationInfoDto.fromJS(_data[\"application\"]) : undefined;\r\n this.theme = _data[\"theme\"] ? UiCustomizationSettingsDto.fromJS(_data[\"theme\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetCurrentLoginInformationsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetCurrentLoginInformationsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"user\"] = this.user ? this.user.toJSON() : undefined;\r\n data[\"impersonatorUser\"] = this.impersonatorUser ? this.impersonatorUser.toJSON() : undefined;\r\n data[\"tenant\"] = this.tenant ? this.tenant.toJSON() : undefined;\r\n data[\"impersonatorTenant\"] = this.impersonatorTenant ? this.impersonatorTenant.toJSON() : undefined;\r\n data[\"application\"] = this.application ? this.application.toJSON() : undefined;\r\n data[\"theme\"] = this.theme ? this.theme.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetCurrentLoginInformationsOutput {\r\n user: UserLoginInfoDto;\r\n impersonatorUser: UserLoginInfoDto;\r\n tenant: TenantLoginInfoDto;\r\n impersonatorTenant: TenantLoginInfoDto;\r\n application: ApplicationInfoDto;\r\n theme: UiCustomizationSettingsDto;\r\n}\r\n\r\nexport class GetCustomAudioForEpisodeForEditOutput implements IGetCustomAudioForEpisodeForEditOutput {\r\n customAudioForEpisode!: CreateOrEditCustomAudioForEpisodeDto;\r\n episodeName!: string | undefined;\r\n tenantTitle!: string | undefined;\r\n customAudioContentFileName!: string | undefined;\r\n\r\n constructor(data?: IGetCustomAudioForEpisodeForEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.customAudioForEpisode = _data[\"customAudioForEpisode\"] ? CreateOrEditCustomAudioForEpisodeDto.fromJS(_data[\"customAudioForEpisode\"]) : undefined;\r\n this.episodeName = _data[\"episodeName\"];\r\n this.tenantTitle = _data[\"tenantTitle\"];\r\n this.customAudioContentFileName = _data[\"customAudioContentFileName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetCustomAudioForEpisodeForEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetCustomAudioForEpisodeForEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"customAudioForEpisode\"] = this.customAudioForEpisode ? this.customAudioForEpisode.toJSON() : undefined;\r\n data[\"episodeName\"] = this.episodeName;\r\n data[\"tenantTitle\"] = this.tenantTitle;\r\n data[\"customAudioContentFileName\"] = this.customAudioContentFileName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetCustomAudioForEpisodeForEditOutput {\r\n customAudioForEpisode: CreateOrEditCustomAudioForEpisodeDto;\r\n episodeName: string | undefined;\r\n tenantTitle: string | undefined;\r\n customAudioContentFileName: string | undefined;\r\n}\r\n\r\nexport class GetCustomAudioForEpisodeForViewDto implements IGetCustomAudioForEpisodeForViewDto {\r\n customAudioForEpisode!: CustomAudioForEpisodeDto;\r\n episodeName!: string | undefined;\r\n tenantTitle!: string | undefined;\r\n\r\n constructor(data?: IGetCustomAudioForEpisodeForViewDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.customAudioForEpisode = _data[\"customAudioForEpisode\"] ? CustomAudioForEpisodeDto.fromJS(_data[\"customAudioForEpisode\"]) : undefined;\r\n this.episodeName = _data[\"episodeName\"];\r\n this.tenantTitle = _data[\"tenantTitle\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetCustomAudioForEpisodeForViewDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetCustomAudioForEpisodeForViewDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"customAudioForEpisode\"] = this.customAudioForEpisode ? this.customAudioForEpisode.toJSON() : undefined;\r\n data[\"episodeName\"] = this.episodeName;\r\n data[\"tenantTitle\"] = this.tenantTitle;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetCustomAudioForEpisodeForViewDto {\r\n customAudioForEpisode: CustomAudioForEpisodeDto;\r\n episodeName: string | undefined;\r\n tenantTitle: string | undefined;\r\n}\r\n\r\nexport class GetCustomAudioForEpisodeForViewDtoPagedResultDto implements IGetCustomAudioForEpisodeForViewDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: GetCustomAudioForEpisodeForViewDto[] | undefined;\r\n\r\n constructor(data?: IGetCustomAudioForEpisodeForViewDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetCustomAudioForEpisodeForViewDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetCustomAudioForEpisodeForViewDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetCustomAudioForEpisodeForViewDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetCustomAudioForEpisodeForViewDtoPagedResultDto {\r\n totalCount: number;\r\n items: GetCustomAudioForEpisodeForViewDto[] | undefined;\r\n}\r\n\r\nexport class GetDailySalesOutput implements IGetDailySalesOutput {\r\n dailySales!: number[] | undefined;\r\n\r\n constructor(data?: IGetDailySalesOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"dailySales\"])) {\r\n this.dailySales = [] as any;\r\n for (let item of _data[\"dailySales\"])\r\n this.dailySales!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetDailySalesOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetDailySalesOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.dailySales)) {\r\n data[\"dailySales\"] = [];\r\n for (let item of this.dailySales)\r\n data[\"dailySales\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetDailySalesOutput {\r\n dailySales: number[] | undefined;\r\n}\r\n\r\nexport class GetDashboardDataOutput implements IGetDashboardDataOutput {\r\n totalProfit!: number;\r\n newFeedbacks!: number;\r\n newOrders!: number;\r\n newUsers!: number;\r\n salesSummary!: SalesSummaryData[] | undefined;\r\n totalSales!: number;\r\n revenue!: number;\r\n expenses!: number;\r\n growth!: number;\r\n transactionPercent!: number;\r\n newVisitPercent!: number;\r\n bouncePercent!: number;\r\n dailySales!: number[] | undefined;\r\n profitShares!: number[] | undefined;\r\n\r\n constructor(data?: IGetDashboardDataOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalProfit = _data[\"totalProfit\"];\r\n this.newFeedbacks = _data[\"newFeedbacks\"];\r\n this.newOrders = _data[\"newOrders\"];\r\n this.newUsers = _data[\"newUsers\"];\r\n if (Array.isArray(_data[\"salesSummary\"])) {\r\n this.salesSummary = [] as any;\r\n for (let item of _data[\"salesSummary\"])\r\n this.salesSummary!.push(SalesSummaryData.fromJS(item));\r\n }\r\n this.totalSales = _data[\"totalSales\"];\r\n this.revenue = _data[\"revenue\"];\r\n this.expenses = _data[\"expenses\"];\r\n this.growth = _data[\"growth\"];\r\n this.transactionPercent = _data[\"transactionPercent\"];\r\n this.newVisitPercent = _data[\"newVisitPercent\"];\r\n this.bouncePercent = _data[\"bouncePercent\"];\r\n if (Array.isArray(_data[\"dailySales\"])) {\r\n this.dailySales = [] as any;\r\n for (let item of _data[\"dailySales\"])\r\n this.dailySales!.push(item);\r\n }\r\n if (Array.isArray(_data[\"profitShares\"])) {\r\n this.profitShares = [] as any;\r\n for (let item of _data[\"profitShares\"])\r\n this.profitShares!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetDashboardDataOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetDashboardDataOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalProfit\"] = this.totalProfit;\r\n data[\"newFeedbacks\"] = this.newFeedbacks;\r\n data[\"newOrders\"] = this.newOrders;\r\n data[\"newUsers\"] = this.newUsers;\r\n if (Array.isArray(this.salesSummary)) {\r\n data[\"salesSummary\"] = [];\r\n for (let item of this.salesSummary)\r\n data[\"salesSummary\"].push(item.toJSON());\r\n }\r\n data[\"totalSales\"] = this.totalSales;\r\n data[\"revenue\"] = this.revenue;\r\n data[\"expenses\"] = this.expenses;\r\n data[\"growth\"] = this.growth;\r\n data[\"transactionPercent\"] = this.transactionPercent;\r\n data[\"newVisitPercent\"] = this.newVisitPercent;\r\n data[\"bouncePercent\"] = this.bouncePercent;\r\n if (Array.isArray(this.dailySales)) {\r\n data[\"dailySales\"] = [];\r\n for (let item of this.dailySales)\r\n data[\"dailySales\"].push(item);\r\n }\r\n if (Array.isArray(this.profitShares)) {\r\n data[\"profitShares\"] = [];\r\n for (let item of this.profitShares)\r\n data[\"profitShares\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetDashboardDataOutput {\r\n totalProfit: number;\r\n newFeedbacks: number;\r\n newOrders: number;\r\n newUsers: number;\r\n salesSummary: SalesSummaryData[] | undefined;\r\n totalSales: number;\r\n revenue: number;\r\n expenses: number;\r\n growth: number;\r\n transactionPercent: number;\r\n newVisitPercent: number;\r\n bouncePercent: number;\r\n dailySales: number[] | undefined;\r\n profitShares: number[] | undefined;\r\n}\r\n\r\nexport class GetDefaultEditionNameOutput implements IGetDefaultEditionNameOutput {\r\n name!: string | undefined;\r\n\r\n constructor(data?: IGetDefaultEditionNameOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetDefaultEditionNameOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetDefaultEditionNameOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetDefaultEditionNameOutput {\r\n name: string | undefined;\r\n}\r\n\r\nexport class GetDifficultyLevelForEditOutput implements IGetDifficultyLevelForEditOutput {\r\n difficultyLevel!: CreateOrEditDifficultyLevelDto;\r\n\r\n constructor(data?: IGetDifficultyLevelForEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.difficultyLevel = _data[\"difficultyLevel\"] ? CreateOrEditDifficultyLevelDto.fromJS(_data[\"difficultyLevel\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetDifficultyLevelForEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetDifficultyLevelForEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"difficultyLevel\"] = this.difficultyLevel ? this.difficultyLevel.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetDifficultyLevelForEditOutput {\r\n difficultyLevel: CreateOrEditDifficultyLevelDto;\r\n}\r\n\r\nexport class GetDifficultyLevelForViewDto implements IGetDifficultyLevelForViewDto {\r\n difficultyLevel!: DifficultyLevelDto;\r\n\r\n constructor(data?: IGetDifficultyLevelForViewDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.difficultyLevel = _data[\"difficultyLevel\"] ? DifficultyLevelDto.fromJS(_data[\"difficultyLevel\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetDifficultyLevelForViewDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetDifficultyLevelForViewDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"difficultyLevel\"] = this.difficultyLevel ? this.difficultyLevel.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetDifficultyLevelForViewDto {\r\n difficultyLevel: DifficultyLevelDto;\r\n}\r\n\r\nexport class GetDifficultyLevelForViewDtoPagedResultDto implements IGetDifficultyLevelForViewDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: GetDifficultyLevelForViewDto[] | undefined;\r\n\r\n constructor(data?: IGetDifficultyLevelForViewDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetDifficultyLevelForViewDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetDifficultyLevelForViewDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetDifficultyLevelForViewDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetDifficultyLevelForViewDtoPagedResultDto {\r\n totalCount: number;\r\n items: GetDifficultyLevelForViewDto[] | undefined;\r\n}\r\n\r\nexport class GetEditionEditOutput implements IGetEditionEditOutput {\r\n edition!: EditionEditDto;\r\n featureValues!: NameValueDto[] | undefined;\r\n features!: FlatFeatureDto[] | undefined;\r\n\r\n constructor(data?: IGetEditionEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.edition = _data[\"edition\"] ? EditionEditDto.fromJS(_data[\"edition\"]) : undefined;\r\n if (Array.isArray(_data[\"featureValues\"])) {\r\n this.featureValues = [] as any;\r\n for (let item of _data[\"featureValues\"])\r\n this.featureValues!.push(NameValueDto.fromJS(item));\r\n }\r\n if (Array.isArray(_data[\"features\"])) {\r\n this.features = [] as any;\r\n for (let item of _data[\"features\"])\r\n this.features!.push(FlatFeatureDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEditionEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEditionEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"edition\"] = this.edition ? this.edition.toJSON() : undefined;\r\n if (Array.isArray(this.featureValues)) {\r\n data[\"featureValues\"] = [];\r\n for (let item of this.featureValues)\r\n data[\"featureValues\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.features)) {\r\n data[\"features\"] = [];\r\n for (let item of this.features)\r\n data[\"features\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEditionEditOutput {\r\n edition: EditionEditDto;\r\n featureValues: NameValueDto[] | undefined;\r\n features: FlatFeatureDto[] | undefined;\r\n}\r\n\r\nexport class GetEditionTenantStatisticsOutput implements IGetEditionTenantStatisticsOutput {\r\n editionStatistics!: TenantEdition[] | undefined;\r\n\r\n constructor(data?: IGetEditionTenantStatisticsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"editionStatistics\"])) {\r\n this.editionStatistics = [] as any;\r\n for (let item of _data[\"editionStatistics\"])\r\n this.editionStatistics!.push(TenantEdition.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEditionTenantStatisticsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEditionTenantStatisticsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.editionStatistics)) {\r\n data[\"editionStatistics\"] = [];\r\n for (let item of this.editionStatistics)\r\n data[\"editionStatistics\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEditionTenantStatisticsOutput {\r\n editionStatistics: TenantEdition[] | undefined;\r\n}\r\n\r\nexport class GetEpisodeForEditOutput implements IGetEpisodeForEditOutput {\r\n episode!: CreateOrEditEpisodeDto;\r\n applicationLanguageName!: string | undefined;\r\n imageContentFileName!: string | undefined;\r\n scriptContentFileName!: string | undefined;\r\n vocabularyContentFileName!: string | undefined;\r\n episodeVideoContentFileName!: string | undefined;\r\n audioContentFileName!: string | undefined;\r\n\r\n constructor(data?: IGetEpisodeForEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.episode = _data[\"episode\"] ? CreateOrEditEpisodeDto.fromJS(_data[\"episode\"]) : undefined;\r\n this.applicationLanguageName = _data[\"applicationLanguageName\"];\r\n this.imageContentFileName = _data[\"imageContentFileName\"];\r\n this.scriptContentFileName = _data[\"scriptContentFileName\"];\r\n this.vocabularyContentFileName = _data[\"vocabularyContentFileName\"];\r\n this.episodeVideoContentFileName = _data[\"episodeVideoContentFileName\"];\r\n this.audioContentFileName = _data[\"audioContentFileName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEpisodeForEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEpisodeForEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"episode\"] = this.episode ? this.episode.toJSON() : undefined;\r\n data[\"applicationLanguageName\"] = this.applicationLanguageName;\r\n data[\"imageContentFileName\"] = this.imageContentFileName;\r\n data[\"scriptContentFileName\"] = this.scriptContentFileName;\r\n data[\"vocabularyContentFileName\"] = this.vocabularyContentFileName;\r\n data[\"episodeVideoContentFileName\"] = this.episodeVideoContentFileName;\r\n data[\"audioContentFileName\"] = this.audioContentFileName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEpisodeForEditOutput {\r\n episode: CreateOrEditEpisodeDto;\r\n applicationLanguageName: string | undefined;\r\n imageContentFileName: string | undefined;\r\n scriptContentFileName: string | undefined;\r\n vocabularyContentFileName: string | undefined;\r\n episodeVideoContentFileName: string | undefined;\r\n audioContentFileName: string | undefined;\r\n}\r\n\r\nexport class GetEpisodeForViewDto implements IGetEpisodeForViewDto {\r\n episode!: EpisodeDto;\r\n applicationLanguageName!: string | undefined;\r\n episodeVideoName!: string | undefined;\r\n audioContentFileName!: string | undefined;\r\n\r\n constructor(data?: IGetEpisodeForViewDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.episode = _data[\"episode\"] ? EpisodeDto.fromJS(_data[\"episode\"]) : undefined;\r\n this.applicationLanguageName = _data[\"applicationLanguageName\"];\r\n this.episodeVideoName = _data[\"episodeVideoName\"];\r\n this.audioContentFileName = _data[\"audioContentFileName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEpisodeForViewDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEpisodeForViewDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"episode\"] = this.episode ? this.episode.toJSON() : undefined;\r\n data[\"applicationLanguageName\"] = this.applicationLanguageName;\r\n data[\"episodeVideoName\"] = this.episodeVideoName;\r\n data[\"audioContentFileName\"] = this.audioContentFileName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEpisodeForViewDto {\r\n episode: EpisodeDto;\r\n applicationLanguageName: string | undefined;\r\n episodeVideoName: string | undefined;\r\n audioContentFileName: string | undefined;\r\n}\r\n\r\nexport class GetEpisodeForViewDtoPagedResultDto implements IGetEpisodeForViewDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: GetEpisodeForViewDto[] | undefined;\r\n\r\n constructor(data?: IGetEpisodeForViewDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetEpisodeForViewDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEpisodeForViewDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEpisodeForViewDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEpisodeForViewDtoPagedResultDto {\r\n totalCount: number;\r\n items: GetEpisodeForViewDto[] | undefined;\r\n}\r\n\r\nexport class GetEpisodeOvalForEditOutput implements IGetEpisodeOvalForEditOutput {\r\n episodeOval!: CreateOrEditEpisodeOvalDto;\r\n ovalTitle!: string | undefined;\r\n episodeName!: string | undefined;\r\n fileFileName!: string | undefined;\r\n\r\n constructor(data?: IGetEpisodeOvalForEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.episodeOval = _data[\"episodeOval\"] ? CreateOrEditEpisodeOvalDto.fromJS(_data[\"episodeOval\"]) : undefined;\r\n this.ovalTitle = _data[\"ovalTitle\"];\r\n this.episodeName = _data[\"episodeName\"];\r\n this.fileFileName = _data[\"fileFileName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEpisodeOvalForEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEpisodeOvalForEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"episodeOval\"] = this.episodeOval ? this.episodeOval.toJSON() : undefined;\r\n data[\"ovalTitle\"] = this.ovalTitle;\r\n data[\"episodeName\"] = this.episodeName;\r\n data[\"fileFileName\"] = this.fileFileName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEpisodeOvalForEditOutput {\r\n episodeOval: CreateOrEditEpisodeOvalDto;\r\n ovalTitle: string | undefined;\r\n episodeName: string | undefined;\r\n fileFileName: string | undefined;\r\n}\r\n\r\nexport class GetEpisodeOvalForViewDto implements IGetEpisodeOvalForViewDto {\r\n episodeOval!: EpisodeOvalDto;\r\n ovalTitle!: string | undefined;\r\n episodeName!: string | undefined;\r\n\r\n constructor(data?: IGetEpisodeOvalForViewDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.episodeOval = _data[\"episodeOval\"] ? EpisodeOvalDto.fromJS(_data[\"episodeOval\"]) : undefined;\r\n this.ovalTitle = _data[\"ovalTitle\"];\r\n this.episodeName = _data[\"episodeName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEpisodeOvalForViewDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEpisodeOvalForViewDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"episodeOval\"] = this.episodeOval ? this.episodeOval.toJSON() : undefined;\r\n data[\"ovalTitle\"] = this.ovalTitle;\r\n data[\"episodeName\"] = this.episodeName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEpisodeOvalForViewDto {\r\n episodeOval: EpisodeOvalDto;\r\n ovalTitle: string | undefined;\r\n episodeName: string | undefined;\r\n}\r\n\r\nexport class GetEpisodeOvalForViewDtoPagedResultDto implements IGetEpisodeOvalForViewDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: GetEpisodeOvalForViewDto[] | undefined;\r\n\r\n constructor(data?: IGetEpisodeOvalForViewDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetEpisodeOvalForViewDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEpisodeOvalForViewDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEpisodeOvalForViewDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEpisodeOvalForViewDtoPagedResultDto {\r\n totalCount: number;\r\n items: GetEpisodeOvalForViewDto[] | undefined;\r\n}\r\n\r\nexport class GetEpisodeUserForEditOutput implements IGetEpisodeUserForEditOutput {\r\n episodeUser!: CreateOrEditEpisodeUserDto;\r\n userName!: string | undefined;\r\n episodeName!: string | undefined;\r\n\r\n constructor(data?: IGetEpisodeUserForEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.episodeUser = _data[\"episodeUser\"] ? CreateOrEditEpisodeUserDto.fromJS(_data[\"episodeUser\"]) : undefined;\r\n this.userName = _data[\"userName\"];\r\n this.episodeName = _data[\"episodeName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEpisodeUserForEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEpisodeUserForEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"episodeUser\"] = this.episodeUser ? this.episodeUser.toJSON() : undefined;\r\n data[\"userName\"] = this.userName;\r\n data[\"episodeName\"] = this.episodeName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEpisodeUserForEditOutput {\r\n episodeUser: CreateOrEditEpisodeUserDto;\r\n userName: string | undefined;\r\n episodeName: string | undefined;\r\n}\r\n\r\nexport class GetEpisodeUserForViewDto implements IGetEpisodeUserForViewDto {\r\n episodeUser!: EpisodeUserDto;\r\n userName!: string | undefined;\r\n episodeName!: string | undefined;\r\n\r\n constructor(data?: IGetEpisodeUserForViewDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.episodeUser = _data[\"episodeUser\"] ? EpisodeUserDto.fromJS(_data[\"episodeUser\"]) : undefined;\r\n this.userName = _data[\"userName\"];\r\n this.episodeName = _data[\"episodeName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEpisodeUserForViewDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEpisodeUserForViewDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"episodeUser\"] = this.episodeUser ? this.episodeUser.toJSON() : undefined;\r\n data[\"userName\"] = this.userName;\r\n data[\"episodeName\"] = this.episodeName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEpisodeUserForViewDto {\r\n episodeUser: EpisodeUserDto;\r\n userName: string | undefined;\r\n episodeName: string | undefined;\r\n}\r\n\r\nexport class GetEpisodeUserForViewDtoPagedResultDto implements IGetEpisodeUserForViewDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: GetEpisodeUserForViewDto[] | undefined;\r\n\r\n constructor(data?: IGetEpisodeUserForViewDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetEpisodeUserForViewDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEpisodeUserForViewDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEpisodeUserForViewDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEpisodeUserForViewDtoPagedResultDto {\r\n totalCount: number;\r\n items: GetEpisodeUserForViewDto[] | undefined;\r\n}\r\n\r\nexport class GetEpisodeVideoForEditOutput implements IGetEpisodeVideoForEditOutput {\r\n episodeVideo!: CreateOrEditEpisodeVideoDto;\r\n videoContentFileName!: string | undefined;\r\n\r\n constructor(data?: IGetEpisodeVideoForEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.episodeVideo = _data[\"episodeVideo\"] ? CreateOrEditEpisodeVideoDto.fromJS(_data[\"episodeVideo\"]) : undefined;\r\n this.videoContentFileName = _data[\"videoContentFileName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEpisodeVideoForEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEpisodeVideoForEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"episodeVideo\"] = this.episodeVideo ? this.episodeVideo.toJSON() : undefined;\r\n data[\"videoContentFileName\"] = this.videoContentFileName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEpisodeVideoForEditOutput {\r\n episodeVideo: CreateOrEditEpisodeVideoDto;\r\n videoContentFileName: string | undefined;\r\n}\r\n\r\nexport class GetEpisodeVideoForViewDto implements IGetEpisodeVideoForViewDto {\r\n episodeVideo!: EpisodeVideoDto;\r\n\r\n constructor(data?: IGetEpisodeVideoForViewDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.episodeVideo = _data[\"episodeVideo\"] ? EpisodeVideoDto.fromJS(_data[\"episodeVideo\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEpisodeVideoForViewDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEpisodeVideoForViewDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"episodeVideo\"] = this.episodeVideo ? this.episodeVideo.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEpisodeVideoForViewDto {\r\n episodeVideo: EpisodeVideoDto;\r\n}\r\n\r\nexport class GetEpisodeVideoForViewDtoPagedResultDto implements IGetEpisodeVideoForViewDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: GetEpisodeVideoForViewDto[] | undefined;\r\n\r\n constructor(data?: IGetEpisodeVideoForViewDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetEpisodeVideoForViewDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetEpisodeVideoForViewDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetEpisodeVideoForViewDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetEpisodeVideoForViewDtoPagedResultDto {\r\n totalCount: number;\r\n items: GetEpisodeVideoForViewDto[] | undefined;\r\n}\r\n\r\nexport class GetExpiringTenantsOutput implements IGetExpiringTenantsOutput {\r\n expiringTenants!: ExpiringTenant[] | undefined;\r\n subscriptionEndAlertDayCount!: number;\r\n maxExpiringTenantsShownCount!: number;\r\n subscriptionEndDateStart!: DateTime;\r\n subscriptionEndDateEnd!: DateTime;\r\n\r\n constructor(data?: IGetExpiringTenantsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"expiringTenants\"])) {\r\n this.expiringTenants = [] as any;\r\n for (let item of _data[\"expiringTenants\"])\r\n this.expiringTenants!.push(ExpiringTenant.fromJS(item));\r\n }\r\n this.subscriptionEndAlertDayCount = _data[\"subscriptionEndAlertDayCount\"];\r\n this.maxExpiringTenantsShownCount = _data[\"maxExpiringTenantsShownCount\"];\r\n this.subscriptionEndDateStart = _data[\"subscriptionEndDateStart\"] ? DateTime.fromISO(_data[\"subscriptionEndDateStart\"].toString()) : undefined;\r\n this.subscriptionEndDateEnd = _data[\"subscriptionEndDateEnd\"] ? DateTime.fromISO(_data[\"subscriptionEndDateEnd\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetExpiringTenantsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetExpiringTenantsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.expiringTenants)) {\r\n data[\"expiringTenants\"] = [];\r\n for (let item of this.expiringTenants)\r\n data[\"expiringTenants\"].push(item.toJSON());\r\n }\r\n data[\"subscriptionEndAlertDayCount\"] = this.subscriptionEndAlertDayCount;\r\n data[\"maxExpiringTenantsShownCount\"] = this.maxExpiringTenantsShownCount;\r\n data[\"subscriptionEndDateStart\"] = this.subscriptionEndDateStart ? this.subscriptionEndDateStart.toString() : undefined;\r\n data[\"subscriptionEndDateEnd\"] = this.subscriptionEndDateEnd ? this.subscriptionEndDateEnd.toString() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetExpiringTenantsOutput {\r\n expiringTenants: ExpiringTenant[] | undefined;\r\n subscriptionEndAlertDayCount: number;\r\n maxExpiringTenantsShownCount: number;\r\n subscriptionEndDateStart: DateTime;\r\n subscriptionEndDateEnd: DateTime;\r\n}\r\n\r\nexport class GetGeneralStatsOutput implements IGetGeneralStatsOutput {\r\n transactionPercent!: number;\r\n newVisitPercent!: number;\r\n bouncePercent!: number;\r\n\r\n constructor(data?: IGetGeneralStatsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.transactionPercent = _data[\"transactionPercent\"];\r\n this.newVisitPercent = _data[\"newVisitPercent\"];\r\n this.bouncePercent = _data[\"bouncePercent\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetGeneralStatsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetGeneralStatsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"transactionPercent\"] = this.transactionPercent;\r\n data[\"newVisitPercent\"] = this.newVisitPercent;\r\n data[\"bouncePercent\"] = this.bouncePercent;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetGeneralStatsOutput {\r\n transactionPercent: number;\r\n newVisitPercent: number;\r\n bouncePercent: number;\r\n}\r\n\r\nexport class GetIncomeStatisticsDataOutput implements IGetIncomeStatisticsDataOutput {\r\n incomeStatistics!: IncomeStastistic[] | undefined;\r\n\r\n constructor(data?: IGetIncomeStatisticsDataOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"incomeStatistics\"])) {\r\n this.incomeStatistics = [] as any;\r\n for (let item of _data[\"incomeStatistics\"])\r\n this.incomeStatistics!.push(IncomeStastistic.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetIncomeStatisticsDataOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetIncomeStatisticsDataOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.incomeStatistics)) {\r\n data[\"incomeStatistics\"] = [];\r\n for (let item of this.incomeStatistics)\r\n data[\"incomeStatistics\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetIncomeStatisticsDataOutput {\r\n incomeStatistics: IncomeStastistic[] | undefined;\r\n}\r\n\r\nexport class GetLanguageForEditOutput implements IGetLanguageForEditOutput {\r\n language!: ApplicationLanguageEditDto;\r\n languageNames!: ComboboxItemDto[] | undefined;\r\n flags!: ComboboxItemDto[] | undefined;\r\n\r\n constructor(data?: IGetLanguageForEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.language = _data[\"language\"] ? ApplicationLanguageEditDto.fromJS(_data[\"language\"]) : undefined;\r\n if (Array.isArray(_data[\"languageNames\"])) {\r\n this.languageNames = [] as any;\r\n for (let item of _data[\"languageNames\"])\r\n this.languageNames!.push(ComboboxItemDto.fromJS(item));\r\n }\r\n if (Array.isArray(_data[\"flags\"])) {\r\n this.flags = [] as any;\r\n for (let item of _data[\"flags\"])\r\n this.flags!.push(ComboboxItemDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetLanguageForEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetLanguageForEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"language\"] = this.language ? this.language.toJSON() : undefined;\r\n if (Array.isArray(this.languageNames)) {\r\n data[\"languageNames\"] = [];\r\n for (let item of this.languageNames)\r\n data[\"languageNames\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.flags)) {\r\n data[\"flags\"] = [];\r\n for (let item of this.flags)\r\n data[\"flags\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetLanguageForEditOutput {\r\n language: ApplicationLanguageEditDto;\r\n languageNames: ComboboxItemDto[] | undefined;\r\n flags: ComboboxItemDto[] | undefined;\r\n}\r\n\r\nexport class GetLanguagesOutput implements IGetLanguagesOutput {\r\n defaultLanguageName!: string | undefined;\r\n items!: ApplicationLanguageListDto[] | undefined;\r\n\r\n constructor(data?: IGetLanguagesOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.defaultLanguageName = _data[\"defaultLanguageName\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(ApplicationLanguageListDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetLanguagesOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetLanguagesOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"defaultLanguageName\"] = this.defaultLanguageName;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetLanguagesOutput {\r\n defaultLanguageName: string | undefined;\r\n items: ApplicationLanguageListDto[] | undefined;\r\n}\r\n\r\nexport class GetLatestWebLogsOutput implements IGetLatestWebLogsOutput {\r\n latestWebLogLines!: string[] | undefined;\r\n\r\n constructor(data?: IGetLatestWebLogsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"latestWebLogLines\"])) {\r\n this.latestWebLogLines = [] as any;\r\n for (let item of _data[\"latestWebLogLines\"])\r\n this.latestWebLogLines!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetLatestWebLogsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetLatestWebLogsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.latestWebLogLines)) {\r\n data[\"latestWebLogLines\"] = [];\r\n for (let item of this.latestWebLogLines)\r\n data[\"latestWebLogLines\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetLatestWebLogsOutput {\r\n latestWebLogLines: string[] | undefined;\r\n}\r\n\r\nexport class GetMemberActivityOutput implements IGetMemberActivityOutput {\r\n memberActivities!: MemberActivity[] | undefined;\r\n\r\n constructor(data?: IGetMemberActivityOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"memberActivities\"])) {\r\n this.memberActivities = [] as any;\r\n for (let item of _data[\"memberActivities\"])\r\n this.memberActivities!.push(MemberActivity.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetMemberActivityOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetMemberActivityOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.memberActivities)) {\r\n data[\"memberActivities\"] = [];\r\n for (let item of this.memberActivities)\r\n data[\"memberActivities\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetMemberActivityOutput {\r\n memberActivities: MemberActivity[] | undefined;\r\n}\r\n\r\nexport class GetNotificationSettingsOutput implements IGetNotificationSettingsOutput {\r\n receiveNotifications!: boolean;\r\n notifications!: NotificationSubscriptionWithDisplayNameDto[] | undefined;\r\n\r\n constructor(data?: IGetNotificationSettingsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.receiveNotifications = _data[\"receiveNotifications\"];\r\n if (Array.isArray(_data[\"notifications\"])) {\r\n this.notifications = [] as any;\r\n for (let item of _data[\"notifications\"])\r\n this.notifications!.push(NotificationSubscriptionWithDisplayNameDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetNotificationSettingsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetNotificationSettingsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"receiveNotifications\"] = this.receiveNotifications;\r\n if (Array.isArray(this.notifications)) {\r\n data[\"notifications\"] = [];\r\n for (let item of this.notifications)\r\n data[\"notifications\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetNotificationSettingsOutput {\r\n receiveNotifications: boolean;\r\n notifications: NotificationSubscriptionWithDisplayNameDto[] | undefined;\r\n}\r\n\r\nexport class GetNotificationsCreatedByUserOutput implements IGetNotificationsCreatedByUserOutput {\r\n notificationName!: string | undefined;\r\n data!: string | undefined;\r\n dataTypeName!: string | undefined;\r\n severity!: NotificationSeverity;\r\n isPublished!: boolean;\r\n creationTime!: DateTime;\r\n\r\n constructor(data?: IGetNotificationsCreatedByUserOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.notificationName = _data[\"notificationName\"];\r\n this.data = _data[\"data\"];\r\n this.dataTypeName = _data[\"dataTypeName\"];\r\n this.severity = _data[\"severity\"];\r\n this.isPublished = _data[\"isPublished\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetNotificationsCreatedByUserOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetNotificationsCreatedByUserOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"notificationName\"] = this.notificationName;\r\n data[\"data\"] = this.data;\r\n data[\"dataTypeName\"] = this.dataTypeName;\r\n data[\"severity\"] = this.severity;\r\n data[\"isPublished\"] = this.isPublished;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetNotificationsCreatedByUserOutput {\r\n notificationName: string | undefined;\r\n data: string | undefined;\r\n dataTypeName: string | undefined;\r\n severity: NotificationSeverity;\r\n isPublished: boolean;\r\n creationTime: DateTime;\r\n}\r\n\r\nexport class GetNotificationsOutput implements IGetNotificationsOutput {\r\n unreadCount!: number;\r\n totalCount!: number;\r\n items!: UserNotification[] | undefined;\r\n\r\n constructor(data?: IGetNotificationsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.unreadCount = _data[\"unreadCount\"];\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(UserNotification.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetNotificationsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetNotificationsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"unreadCount\"] = this.unreadCount;\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetNotificationsOutput {\r\n unreadCount: number;\r\n totalCount: number;\r\n items: UserNotification[] | undefined;\r\n}\r\n\r\nexport class GetOvalForEditOutput implements IGetOvalForEditOutput {\r\n oval!: CreateOrEditOvalDto;\r\n\r\n constructor(data?: IGetOvalForEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.oval = _data[\"oval\"] ? CreateOrEditOvalDto.fromJS(_data[\"oval\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetOvalForEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetOvalForEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"oval\"] = this.oval ? this.oval.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetOvalForEditOutput {\r\n oval: CreateOrEditOvalDto;\r\n}\r\n\r\nexport class GetOvalForViewDto implements IGetOvalForViewDto {\r\n oval!: OvalDto;\r\n\r\n constructor(data?: IGetOvalForViewDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.oval = _data[\"oval\"] ? OvalDto.fromJS(_data[\"oval\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetOvalForViewDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetOvalForViewDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"oval\"] = this.oval ? this.oval.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetOvalForViewDto {\r\n oval: OvalDto;\r\n}\r\n\r\nexport class GetOvalForViewDtoPagedResultDto implements IGetOvalForViewDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: GetOvalForViewDto[] | undefined;\r\n\r\n constructor(data?: IGetOvalForViewDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetOvalForViewDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetOvalForViewDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetOvalForViewDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetOvalForViewDtoPagedResultDto {\r\n totalCount: number;\r\n items: GetOvalForViewDto[] | undefined;\r\n}\r\n\r\nexport class GetPasswordComplexitySettingOutput implements IGetPasswordComplexitySettingOutput {\r\n setting!: PasswordComplexitySetting;\r\n\r\n constructor(data?: IGetPasswordComplexitySettingOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.setting = _data[\"setting\"] ? PasswordComplexitySetting.fromJS(_data[\"setting\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetPasswordComplexitySettingOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetPasswordComplexitySettingOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"setting\"] = this.setting ? this.setting.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetPasswordComplexitySettingOutput {\r\n setting: PasswordComplexitySetting;\r\n}\r\n\r\nexport class GetProfilePictureOutput implements IGetProfilePictureOutput {\r\n profilePicture!: string | undefined;\r\n\r\n constructor(data?: IGetProfilePictureOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.profilePicture = _data[\"profilePicture\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetProfilePictureOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetProfilePictureOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"profilePicture\"] = this.profilePicture;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetProfilePictureOutput {\r\n profilePicture: string | undefined;\r\n}\r\n\r\nexport class GetProfitShareOutput implements IGetProfitShareOutput {\r\n profitShares!: number[] | undefined;\r\n\r\n constructor(data?: IGetProfitShareOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"profitShares\"])) {\r\n this.profitShares = [] as any;\r\n for (let item of _data[\"profitShares\"])\r\n this.profitShares!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetProfitShareOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetProfitShareOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.profitShares)) {\r\n data[\"profitShares\"] = [];\r\n for (let item of this.profitShares)\r\n data[\"profitShares\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetProfitShareOutput {\r\n profitShares: number[] | undefined;\r\n}\r\n\r\nexport class GetPublishedNotificationsOutput implements IGetPublishedNotificationsOutput {\r\n totalCount!: number;\r\n items!: GetNotificationsCreatedByUserOutput[] | undefined;\r\n\r\n constructor(data?: IGetPublishedNotificationsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(GetNotificationsCreatedByUserOutput.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetPublishedNotificationsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetPublishedNotificationsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetPublishedNotificationsOutput {\r\n totalCount: number;\r\n items: GetNotificationsCreatedByUserOutput[] | undefined;\r\n}\r\n\r\nexport class GetRecentTenantsOutput implements IGetRecentTenantsOutput {\r\n recentTenantsDayCount!: number;\r\n maxRecentTenantsShownCount!: number;\r\n tenantCreationStartDate!: DateTime;\r\n recentTenants!: RecentTenant[] | undefined;\r\n\r\n constructor(data?: IGetRecentTenantsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.recentTenantsDayCount = _data[\"recentTenantsDayCount\"];\r\n this.maxRecentTenantsShownCount = _data[\"maxRecentTenantsShownCount\"];\r\n this.tenantCreationStartDate = _data[\"tenantCreationStartDate\"] ? DateTime.fromISO(_data[\"tenantCreationStartDate\"].toString()) : undefined;\r\n if (Array.isArray(_data[\"recentTenants\"])) {\r\n this.recentTenants = [] as any;\r\n for (let item of _data[\"recentTenants\"])\r\n this.recentTenants!.push(RecentTenant.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetRecentTenantsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetRecentTenantsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"recentTenantsDayCount\"] = this.recentTenantsDayCount;\r\n data[\"maxRecentTenantsShownCount\"] = this.maxRecentTenantsShownCount;\r\n data[\"tenantCreationStartDate\"] = this.tenantCreationStartDate ? this.tenantCreationStartDate.toString() : undefined;\r\n if (Array.isArray(this.recentTenants)) {\r\n data[\"recentTenants\"] = [];\r\n for (let item of this.recentTenants)\r\n data[\"recentTenants\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetRecentTenantsOutput {\r\n recentTenantsDayCount: number;\r\n maxRecentTenantsShownCount: number;\r\n tenantCreationStartDate: DateTime;\r\n recentTenants: RecentTenant[] | undefined;\r\n}\r\n\r\nexport class GetRegionalStatsOutput implements IGetRegionalStatsOutput {\r\n stats!: RegionalStatCountry[] | undefined;\r\n\r\n constructor(data?: IGetRegionalStatsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"stats\"])) {\r\n this.stats = [] as any;\r\n for (let item of _data[\"stats\"])\r\n this.stats!.push(RegionalStatCountry.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetRegionalStatsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetRegionalStatsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.stats)) {\r\n data[\"stats\"] = [];\r\n for (let item of this.stats)\r\n data[\"stats\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetRegionalStatsOutput {\r\n stats: RegionalStatCountry[] | undefined;\r\n}\r\n\r\nexport class GetRoleForEditOutput implements IGetRoleForEditOutput {\r\n role!: RoleEditDto;\r\n permissions!: FlatPermissionDto[] | undefined;\r\n grantedPermissionNames!: string[] | undefined;\r\n\r\n constructor(data?: IGetRoleForEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.role = _data[\"role\"] ? RoleEditDto.fromJS(_data[\"role\"]) : undefined;\r\n if (Array.isArray(_data[\"permissions\"])) {\r\n this.permissions = [] as any;\r\n for (let item of _data[\"permissions\"])\r\n this.permissions!.push(FlatPermissionDto.fromJS(item));\r\n }\r\n if (Array.isArray(_data[\"grantedPermissionNames\"])) {\r\n this.grantedPermissionNames = [] as any;\r\n for (let item of _data[\"grantedPermissionNames\"])\r\n this.grantedPermissionNames!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetRoleForEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetRoleForEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"role\"] = this.role ? this.role.toJSON() : undefined;\r\n if (Array.isArray(this.permissions)) {\r\n data[\"permissions\"] = [];\r\n for (let item of this.permissions)\r\n data[\"permissions\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.grantedPermissionNames)) {\r\n data[\"grantedPermissionNames\"] = [];\r\n for (let item of this.grantedPermissionNames)\r\n data[\"grantedPermissionNames\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetRoleForEditOutput {\r\n role: RoleEditDto;\r\n permissions: FlatPermissionDto[] | undefined;\r\n grantedPermissionNames: string[] | undefined;\r\n}\r\n\r\nexport class GetRolesInput implements IGetRolesInput {\r\n permissions!: string[] | undefined;\r\n\r\n constructor(data?: IGetRolesInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"permissions\"])) {\r\n this.permissions = [] as any;\r\n for (let item of _data[\"permissions\"])\r\n this.permissions!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetRolesInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetRolesInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.permissions)) {\r\n data[\"permissions\"] = [];\r\n for (let item of this.permissions)\r\n data[\"permissions\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetRolesInput {\r\n permissions: string[] | undefined;\r\n}\r\n\r\nexport class GetSalesSummaryOutput implements IGetSalesSummaryOutput {\r\n totalSales!: number;\r\n revenue!: number;\r\n expenses!: number;\r\n growth!: number;\r\n salesSummary!: SalesSummaryData[] | undefined;\r\n\r\n constructor(data?: IGetSalesSummaryOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalSales = _data[\"totalSales\"];\r\n this.revenue = _data[\"revenue\"];\r\n this.expenses = _data[\"expenses\"];\r\n this.growth = _data[\"growth\"];\r\n if (Array.isArray(_data[\"salesSummary\"])) {\r\n this.salesSummary = [] as any;\r\n for (let item of _data[\"salesSummary\"])\r\n this.salesSummary!.push(SalesSummaryData.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetSalesSummaryOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetSalesSummaryOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalSales\"] = this.totalSales;\r\n data[\"revenue\"] = this.revenue;\r\n data[\"expenses\"] = this.expenses;\r\n data[\"growth\"] = this.growth;\r\n if (Array.isArray(this.salesSummary)) {\r\n data[\"salesSummary\"] = [];\r\n for (let item of this.salesSummary)\r\n data[\"salesSummary\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetSalesSummaryOutput {\r\n totalSales: number;\r\n revenue: number;\r\n expenses: number;\r\n growth: number;\r\n salesSummary: SalesSummaryData[] | undefined;\r\n}\r\n\r\nexport class GetTenantFeaturesEditOutput implements IGetTenantFeaturesEditOutput {\r\n featureValues!: NameValueDto[] | undefined;\r\n features!: FlatFeatureDto[] | undefined;\r\n\r\n constructor(data?: IGetTenantFeaturesEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"featureValues\"])) {\r\n this.featureValues = [] as any;\r\n for (let item of _data[\"featureValues\"])\r\n this.featureValues!.push(NameValueDto.fromJS(item));\r\n }\r\n if (Array.isArray(_data[\"features\"])) {\r\n this.features = [] as any;\r\n for (let item of _data[\"features\"])\r\n this.features!.push(FlatFeatureDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetTenantFeaturesEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetTenantFeaturesEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.featureValues)) {\r\n data[\"featureValues\"] = [];\r\n for (let item of this.featureValues)\r\n data[\"featureValues\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.features)) {\r\n data[\"features\"] = [];\r\n for (let item of this.features)\r\n data[\"features\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetTenantFeaturesEditOutput {\r\n featureValues: NameValueDto[] | undefined;\r\n features: FlatFeatureDto[] | undefined;\r\n}\r\n\r\nexport class GetTopStatsOutput implements IGetTopStatsOutput {\r\n totalProfit!: number;\r\n newFeedbacks!: number;\r\n newOrders!: number;\r\n newUsers!: number;\r\n\r\n constructor(data?: IGetTopStatsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalProfit = _data[\"totalProfit\"];\r\n this.newFeedbacks = _data[\"newFeedbacks\"];\r\n this.newOrders = _data[\"newOrders\"];\r\n this.newUsers = _data[\"newUsers\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetTopStatsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetTopStatsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalProfit\"] = this.totalProfit;\r\n data[\"newFeedbacks\"] = this.newFeedbacks;\r\n data[\"newOrders\"] = this.newOrders;\r\n data[\"newUsers\"] = this.newUsers;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetTopStatsOutput {\r\n totalProfit: number;\r\n newFeedbacks: number;\r\n newOrders: number;\r\n newUsers: number;\r\n}\r\n\r\nexport class GetUserChatFriendsWithSettingsOutput implements IGetUserChatFriendsWithSettingsOutput {\r\n serverTime!: DateTime;\r\n friends!: FriendDto[] | undefined;\r\n\r\n constructor(data?: IGetUserChatFriendsWithSettingsOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.serverTime = _data[\"serverTime\"] ? DateTime.fromISO(_data[\"serverTime\"].toString()) : undefined;\r\n if (Array.isArray(_data[\"friends\"])) {\r\n this.friends = [] as any;\r\n for (let item of _data[\"friends\"])\r\n this.friends!.push(FriendDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetUserChatFriendsWithSettingsOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetUserChatFriendsWithSettingsOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"serverTime\"] = this.serverTime ? this.serverTime.toString() : undefined;\r\n if (Array.isArray(this.friends)) {\r\n data[\"friends\"] = [];\r\n for (let item of this.friends)\r\n data[\"friends\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetUserChatFriendsWithSettingsOutput {\r\n serverTime: DateTime;\r\n friends: FriendDto[] | undefined;\r\n}\r\n\r\nexport class GetUserForEditOutput implements IGetUserForEditOutput {\r\n profilePictureId!: string | undefined;\r\n user!: UserEditDto;\r\n roles!: UserRoleDto[] | undefined;\r\n allOrganizationUnits!: OrganizationUnitDto[] | undefined;\r\n memberedOrganizationUnits!: string[] | undefined;\r\n allowedUserNameCharacters!: string | undefined;\r\n isSMTPSettingsProvided!: boolean;\r\n\r\n constructor(data?: IGetUserForEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.profilePictureId = _data[\"profilePictureId\"];\r\n this.user = _data[\"user\"] ? UserEditDto.fromJS(_data[\"user\"]) : undefined;\r\n if (Array.isArray(_data[\"roles\"])) {\r\n this.roles = [] as any;\r\n for (let item of _data[\"roles\"])\r\n this.roles!.push(UserRoleDto.fromJS(item));\r\n }\r\n if (Array.isArray(_data[\"allOrganizationUnits\"])) {\r\n this.allOrganizationUnits = [] as any;\r\n for (let item of _data[\"allOrganizationUnits\"])\r\n this.allOrganizationUnits!.push(OrganizationUnitDto.fromJS(item));\r\n }\r\n if (Array.isArray(_data[\"memberedOrganizationUnits\"])) {\r\n this.memberedOrganizationUnits = [] as any;\r\n for (let item of _data[\"memberedOrganizationUnits\"])\r\n this.memberedOrganizationUnits!.push(item);\r\n }\r\n this.allowedUserNameCharacters = _data[\"allowedUserNameCharacters\"];\r\n this.isSMTPSettingsProvided = _data[\"isSMTPSettingsProvided\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetUserForEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetUserForEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"profilePictureId\"] = this.profilePictureId;\r\n data[\"user\"] = this.user ? this.user.toJSON() : undefined;\r\n if (Array.isArray(this.roles)) {\r\n data[\"roles\"] = [];\r\n for (let item of this.roles)\r\n data[\"roles\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.allOrganizationUnits)) {\r\n data[\"allOrganizationUnits\"] = [];\r\n for (let item of this.allOrganizationUnits)\r\n data[\"allOrganizationUnits\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.memberedOrganizationUnits)) {\r\n data[\"memberedOrganizationUnits\"] = [];\r\n for (let item of this.memberedOrganizationUnits)\r\n data[\"memberedOrganizationUnits\"].push(item);\r\n }\r\n data[\"allowedUserNameCharacters\"] = this.allowedUserNameCharacters;\r\n data[\"isSMTPSettingsProvided\"] = this.isSMTPSettingsProvided;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetUserForEditOutput {\r\n profilePictureId: string | undefined;\r\n user: UserEditDto;\r\n roles: UserRoleDto[] | undefined;\r\n allOrganizationUnits: OrganizationUnitDto[] | undefined;\r\n memberedOrganizationUnits: string[] | undefined;\r\n allowedUserNameCharacters: string | undefined;\r\n isSMTPSettingsProvided: boolean;\r\n}\r\n\r\nexport class GetUserPermissionsForEditOutput implements IGetUserPermissionsForEditOutput {\r\n permissions!: FlatPermissionDto[] | undefined;\r\n grantedPermissionNames!: string[] | undefined;\r\n\r\n constructor(data?: IGetUserPermissionsForEditOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"permissions\"])) {\r\n this.permissions = [] as any;\r\n for (let item of _data[\"permissions\"])\r\n this.permissions!.push(FlatPermissionDto.fromJS(item));\r\n }\r\n if (Array.isArray(_data[\"grantedPermissionNames\"])) {\r\n this.grantedPermissionNames = [] as any;\r\n for (let item of _data[\"grantedPermissionNames\"])\r\n this.grantedPermissionNames!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetUserPermissionsForEditOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetUserPermissionsForEditOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.permissions)) {\r\n data[\"permissions\"] = [];\r\n for (let item of this.permissions)\r\n data[\"permissions\"].push(item.toJSON());\r\n }\r\n if (Array.isArray(this.grantedPermissionNames)) {\r\n data[\"grantedPermissionNames\"] = [];\r\n for (let item of this.grantedPermissionNames)\r\n data[\"grantedPermissionNames\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetUserPermissionsForEditOutput {\r\n permissions: FlatPermissionDto[] | undefined;\r\n grantedPermissionNames: string[] | undefined;\r\n}\r\n\r\nexport class GetUsersInput implements IGetUsersInput {\r\n filter!: string | undefined;\r\n permissions!: string[] | undefined;\r\n role!: number | undefined;\r\n onlyLockedUsers!: boolean;\r\n sorting!: string | undefined;\r\n maxResultCount!: number;\r\n skipCount!: number;\r\n\r\n constructor(data?: IGetUsersInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.filter = _data[\"filter\"];\r\n if (Array.isArray(_data[\"permissions\"])) {\r\n this.permissions = [] as any;\r\n for (let item of _data[\"permissions\"])\r\n this.permissions!.push(item);\r\n }\r\n this.role = _data[\"role\"];\r\n this.onlyLockedUsers = _data[\"onlyLockedUsers\"];\r\n this.sorting = _data[\"sorting\"];\r\n this.maxResultCount = _data[\"maxResultCount\"];\r\n this.skipCount = _data[\"skipCount\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GetUsersInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GetUsersInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"filter\"] = this.filter;\r\n if (Array.isArray(this.permissions)) {\r\n data[\"permissions\"] = [];\r\n for (let item of this.permissions)\r\n data[\"permissions\"].push(item);\r\n }\r\n data[\"role\"] = this.role;\r\n data[\"onlyLockedUsers\"] = this.onlyLockedUsers;\r\n data[\"sorting\"] = this.sorting;\r\n data[\"maxResultCount\"] = this.maxResultCount;\r\n data[\"skipCount\"] = this.skipCount;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGetUsersInput {\r\n filter: string | undefined;\r\n permissions: string[] | undefined;\r\n role: number | undefined;\r\n onlyLockedUsers: boolean;\r\n sorting: string | undefined;\r\n maxResultCount: number;\r\n skipCount: number;\r\n}\r\n\r\nexport class GoogleExternalLoginProviderSettings implements IGoogleExternalLoginProviderSettings {\r\n clientId!: string | undefined;\r\n clientSecret!: string | undefined;\r\n userInfoEndpoint!: string | undefined;\r\n\r\n constructor(data?: IGoogleExternalLoginProviderSettings) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.clientId = _data[\"clientId\"];\r\n this.clientSecret = _data[\"clientSecret\"];\r\n this.userInfoEndpoint = _data[\"userInfoEndpoint\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GoogleExternalLoginProviderSettings {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GoogleExternalLoginProviderSettings();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"clientId\"] = this.clientId;\r\n data[\"clientSecret\"] = this.clientSecret;\r\n data[\"userInfoEndpoint\"] = this.userInfoEndpoint;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGoogleExternalLoginProviderSettings {\r\n clientId: string | undefined;\r\n clientSecret: string | undefined;\r\n userInfoEndpoint: string | undefined;\r\n}\r\n\r\nexport class GuidEntityDto implements IGuidEntityDto {\r\n id!: string;\r\n\r\n constructor(data?: IGuidEntityDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): GuidEntityDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new GuidEntityDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IGuidEntityDto {\r\n id: string;\r\n}\r\n\r\nexport class HostBillingSettingsEditDto implements IHostBillingSettingsEditDto {\r\n legalName!: string | undefined;\r\n address!: string | undefined;\r\n\r\n constructor(data?: IHostBillingSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.legalName = _data[\"legalName\"];\r\n this.address = _data[\"address\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): HostBillingSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new HostBillingSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"legalName\"] = this.legalName;\r\n data[\"address\"] = this.address;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IHostBillingSettingsEditDto {\r\n legalName: string | undefined;\r\n address: string | undefined;\r\n}\r\n\r\nexport class HostSettingsEditDto implements IHostSettingsEditDto {\r\n general!: GeneralSettingsEditDto;\r\n userManagement!: HostUserManagementSettingsEditDto;\r\n email!: EmailSettingsEditDto;\r\n tenantManagement!: TenantManagementSettingsEditDto;\r\n security!: SecuritySettingsEditDto;\r\n billing!: HostBillingSettingsEditDto;\r\n otherSettings!: OtherSettingsEditDto;\r\n externalLoginProviderSettings!: ExternalLoginProviderSettingsEditDto;\r\n\r\n constructor(data?: IHostSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.general = new GeneralSettingsEditDto();\r\n this.userManagement = new HostUserManagementSettingsEditDto();\r\n this.email = new EmailSettingsEditDto();\r\n this.tenantManagement = new TenantManagementSettingsEditDto();\r\n this.security = new SecuritySettingsEditDto();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.general = _data[\"general\"] ? GeneralSettingsEditDto.fromJS(_data[\"general\"]) : new GeneralSettingsEditDto();\r\n this.userManagement = _data[\"userManagement\"] ? HostUserManagementSettingsEditDto.fromJS(_data[\"userManagement\"]) : new HostUserManagementSettingsEditDto();\r\n this.email = _data[\"email\"] ? EmailSettingsEditDto.fromJS(_data[\"email\"]) : new EmailSettingsEditDto();\r\n this.tenantManagement = _data[\"tenantManagement\"] ? TenantManagementSettingsEditDto.fromJS(_data[\"tenantManagement\"]) : new TenantManagementSettingsEditDto();\r\n this.security = _data[\"security\"] ? SecuritySettingsEditDto.fromJS(_data[\"security\"]) : new SecuritySettingsEditDto();\r\n this.billing = _data[\"billing\"] ? HostBillingSettingsEditDto.fromJS(_data[\"billing\"]) : undefined;\r\n this.otherSettings = _data[\"otherSettings\"] ? OtherSettingsEditDto.fromJS(_data[\"otherSettings\"]) : undefined;\r\n this.externalLoginProviderSettings = _data[\"externalLoginProviderSettings\"] ? ExternalLoginProviderSettingsEditDto.fromJS(_data[\"externalLoginProviderSettings\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): HostSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new HostSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"general\"] = this.general ? this.general.toJSON() : undefined;\r\n data[\"userManagement\"] = this.userManagement ? this.userManagement.toJSON() : undefined;\r\n data[\"email\"] = this.email ? this.email.toJSON() : undefined;\r\n data[\"tenantManagement\"] = this.tenantManagement ? this.tenantManagement.toJSON() : undefined;\r\n data[\"security\"] = this.security ? this.security.toJSON() : undefined;\r\n data[\"billing\"] = this.billing ? this.billing.toJSON() : undefined;\r\n data[\"otherSettings\"] = this.otherSettings ? this.otherSettings.toJSON() : undefined;\r\n data[\"externalLoginProviderSettings\"] = this.externalLoginProviderSettings ? this.externalLoginProviderSettings.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IHostSettingsEditDto {\r\n general: GeneralSettingsEditDto;\r\n userManagement: HostUserManagementSettingsEditDto;\r\n email: EmailSettingsEditDto;\r\n tenantManagement: TenantManagementSettingsEditDto;\r\n security: SecuritySettingsEditDto;\r\n billing: HostBillingSettingsEditDto;\r\n otherSettings: OtherSettingsEditDto;\r\n externalLoginProviderSettings: ExternalLoginProviderSettingsEditDto;\r\n}\r\n\r\nexport class HostUserManagementSettingsEditDto implements IHostUserManagementSettingsEditDto {\r\n isEmailConfirmationRequiredForLogin!: boolean;\r\n smsVerificationEnabled!: boolean;\r\n isCookieConsentEnabled!: boolean;\r\n isQuickThemeSelectEnabled!: boolean;\r\n useCaptchaOnLogin!: boolean;\r\n allowUsingGravatarProfilePicture!: boolean;\r\n sessionTimeOutSettings!: SessionTimeOutSettingsEditDto;\r\n userPasswordSettings!: UserPasswordSettingsEditDto;\r\n\r\n constructor(data?: IHostUserManagementSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.isEmailConfirmationRequiredForLogin = _data[\"isEmailConfirmationRequiredForLogin\"];\r\n this.smsVerificationEnabled = _data[\"smsVerificationEnabled\"];\r\n this.isCookieConsentEnabled = _data[\"isCookieConsentEnabled\"];\r\n this.isQuickThemeSelectEnabled = _data[\"isQuickThemeSelectEnabled\"];\r\n this.useCaptchaOnLogin = _data[\"useCaptchaOnLogin\"];\r\n this.allowUsingGravatarProfilePicture = _data[\"allowUsingGravatarProfilePicture\"];\r\n this.sessionTimeOutSettings = _data[\"sessionTimeOutSettings\"] ? SessionTimeOutSettingsEditDto.fromJS(_data[\"sessionTimeOutSettings\"]) : undefined;\r\n this.userPasswordSettings = _data[\"userPasswordSettings\"] ? UserPasswordSettingsEditDto.fromJS(_data[\"userPasswordSettings\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): HostUserManagementSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new HostUserManagementSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"isEmailConfirmationRequiredForLogin\"] = this.isEmailConfirmationRequiredForLogin;\r\n data[\"smsVerificationEnabled\"] = this.smsVerificationEnabled;\r\n data[\"isCookieConsentEnabled\"] = this.isCookieConsentEnabled;\r\n data[\"isQuickThemeSelectEnabled\"] = this.isQuickThemeSelectEnabled;\r\n data[\"useCaptchaOnLogin\"] = this.useCaptchaOnLogin;\r\n data[\"allowUsingGravatarProfilePicture\"] = this.allowUsingGravatarProfilePicture;\r\n data[\"sessionTimeOutSettings\"] = this.sessionTimeOutSettings ? this.sessionTimeOutSettings.toJSON() : undefined;\r\n data[\"userPasswordSettings\"] = this.userPasswordSettings ? this.userPasswordSettings.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IHostUserManagementSettingsEditDto {\r\n isEmailConfirmationRequiredForLogin: boolean;\r\n smsVerificationEnabled: boolean;\r\n isCookieConsentEnabled: boolean;\r\n isQuickThemeSelectEnabled: boolean;\r\n useCaptchaOnLogin: boolean;\r\n allowUsingGravatarProfilePicture: boolean;\r\n sessionTimeOutSettings: SessionTimeOutSettingsEditDto;\r\n userPasswordSettings: UserPasswordSettingsEditDto;\r\n}\r\n\r\nexport enum HttpStatusCode {\r\n Continue = 100,\r\n SwitchingProtocols = 101,\r\n Processing = 102,\r\n EarlyHints = 103,\r\n OK = 200,\r\n Created = 201,\r\n Accepted = 202,\r\n NonAuthoritativeInformation = 203,\r\n NoContent = 204,\r\n ResetContent = 205,\r\n PartialContent = 206,\r\n MultiStatus = 207,\r\n AlreadyReported = 208,\r\n IMUsed = 226,\r\n MultipleChoices = 300,\r\n Ambiguous = 301,\r\n MovedPermanently = 302,\r\n Moved = 303,\r\n Found = 304,\r\n Redirect = 305,\r\n SeeOther = 306,\r\n RedirectMethod = 307,\r\n NotModified = 308,\r\n UseProxy = 400,\r\n Unused = 401,\r\n TemporaryRedirect = 402,\r\n RedirectKeepVerb = 403,\r\n PermanentRedirect = 404,\r\n BadRequest = 405,\r\n Unauthorized = 406,\r\n PaymentRequired = 407,\r\n Forbidden = 408,\r\n NotFound = 409,\r\n MethodNotAllowed = 410,\r\n NotAcceptable = 411,\r\n ProxyAuthenticationRequired = 412,\r\n RequestTimeout = 413,\r\n Conflict = 414,\r\n Gone = 415,\r\n LengthRequired = 416,\r\n PreconditionFailed = 417,\r\n RequestEntityTooLarge = 421,\r\n RequestUriTooLong = 422,\r\n UnsupportedMediaType = 423,\r\n RequestedRangeNotSatisfiable = 424,\r\n ExpectationFailed = 426,\r\n MisdirectedRequest = 428,\r\n UnprocessableEntity = 429,\r\n Locked = 431,\r\n FailedDependency = 451,\r\n UpgradeRequired = 500,\r\n PreconditionRequired = 501,\r\n TooManyRequests = 502,\r\n RequestHeaderFieldsTooLarge = 503,\r\n UnavailableForLegalReasons = 504,\r\n InternalServerError = 505,\r\n NotImplemented = 506,\r\n BadGateway = 507,\r\n ServiceUnavailable = 508,\r\n GatewayTimeout = 510,\r\n HttpVersionNotSupported = 511,\r\n VariantAlsoNegotiates = Continue,\r\n InsufficientStorage = SwitchingProtocols,\r\n LoopDetected = Processing,\r\n NotExtended = EarlyHints,\r\n NetworkAuthenticationRequired = OK,\r\n _Created = Created,\r\n _Accepted = Accepted,\r\n _NonAuthoritativeInformation = NonAuthoritativeInformation,\r\n _NoContent = NoContent,\r\n _ResetContent = ResetContent,\r\n _PartialContent = PartialContent,\r\n _MultiStatus = MultiStatus,\r\n _AlreadyReported = AlreadyReported,\r\n _IMUsed = IMUsed,\r\n _MultipleChoices = MultipleChoices,\r\n _Ambiguous = Ambiguous,\r\n _MovedPermanently = MovedPermanently,\r\n _Moved = Moved,\r\n _Found = Found,\r\n _Redirect = Redirect,\r\n _SeeOther = SeeOther,\r\n _RedirectMethod = RedirectMethod,\r\n _NotModified = NotModified,\r\n _UseProxy = UseProxy,\r\n _Unused = Unused,\r\n _TemporaryRedirect = TemporaryRedirect,\r\n _RedirectKeepVerb = RedirectKeepVerb,\r\n _PermanentRedirect = PermanentRedirect,\r\n _BadRequest = BadRequest,\r\n _Unauthorized = Unauthorized,\r\n _PaymentRequired = PaymentRequired,\r\n _Forbidden = Forbidden,\r\n _NotFound = NotFound,\r\n _MethodNotAllowed = MethodNotAllowed,\r\n _NotAcceptable = NotAcceptable,\r\n _ProxyAuthenticationRequired = ProxyAuthenticationRequired,\r\n _RequestTimeout = RequestTimeout,\r\n _Conflict = Conflict,\r\n _Gone = Gone,\r\n _LengthRequired = LengthRequired,\r\n _PreconditionFailed = PreconditionFailed,\r\n _RequestEntityTooLarge = RequestEntityTooLarge,\r\n _RequestUriTooLong = RequestUriTooLong,\r\n _UnsupportedMediaType = UnsupportedMediaType,\r\n _RequestedRangeNotSatisfiable = RequestedRangeNotSatisfiable,\r\n _ExpectationFailed = ExpectationFailed,\r\n _MisdirectedRequest = MisdirectedRequest,\r\n _UnprocessableEntity = UnprocessableEntity,\r\n _Locked = Locked,\r\n _FailedDependency = FailedDependency,\r\n _UpgradeRequired = UpgradeRequired,\r\n _PreconditionRequired = PreconditionRequired,\r\n _TooManyRequests = TooManyRequests,\r\n _RequestHeaderFieldsTooLarge = RequestHeaderFieldsTooLarge,\r\n _UnavailableForLegalReasons = UnavailableForLegalReasons,\r\n _InternalServerError = InternalServerError,\r\n _NotImplemented = NotImplemented,\r\n _BadGateway = BadGateway,\r\n _ServiceUnavailable = ServiceUnavailable,\r\n _GatewayTimeout = GatewayTimeout,\r\n _HttpVersionNotSupported = HttpVersionNotSupported,\r\n _VariantAlsoNegotiates = VariantAlsoNegotiates,\r\n _InsufficientStorage = InsufficientStorage,\r\n _LoopDetected = LoopDetected,\r\n _NotExtended = NotExtended,\r\n _NetworkAuthenticationRequired = NetworkAuthenticationRequired,\r\n}\r\n\r\nexport class IInputType implements IIInputType {\r\n readonly name!: string | undefined;\r\n readonly attributes!: { [key: string]: any; } | undefined;\r\n validator!: IValueValidator;\r\n\r\n constructor(data?: IIInputType) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n (this).name = _data[\"name\"];\r\n if (_data[\"attributes\"]) {\r\n (this).attributes = {} as any;\r\n for (let key in _data[\"attributes\"]) {\r\n if (_data[\"attributes\"].hasOwnProperty(key))\r\n ((this).attributes)![key] = _data[\"attributes\"][key];\r\n }\r\n }\r\n this.validator = _data[\"validator\"] ? IValueValidator.fromJS(_data[\"validator\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): IInputType {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new IInputType();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n if (this.attributes) {\r\n data[\"attributes\"] = {};\r\n for (let key in this.attributes) {\r\n if (this.attributes.hasOwnProperty(key))\r\n (data[\"attributes\"])[key] = (this.attributes)[key];\r\n }\r\n }\r\n data[\"validator\"] = this.validator ? this.validator.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IIInputType {\r\n name: string | undefined;\r\n attributes: { [key: string]: any; } | undefined;\r\n validator: IValueValidator;\r\n}\r\n\r\nexport class IValueValidator implements IIValueValidator {\r\n readonly name!: string | undefined;\r\n readonly attributes!: { [key: string]: any; } | undefined;\r\n\r\n constructor(data?: IIValueValidator) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n (this).name = _data[\"name\"];\r\n if (_data[\"attributes\"]) {\r\n (this).attributes = {} as any;\r\n for (let key in _data[\"attributes\"]) {\r\n if (_data[\"attributes\"].hasOwnProperty(key))\r\n ((this).attributes)![key] = _data[\"attributes\"][key];\r\n }\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): IValueValidator {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new IValueValidator();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n if (this.attributes) {\r\n data[\"attributes\"] = {};\r\n for (let key in this.attributes) {\r\n if (this.attributes.hasOwnProperty(key))\r\n (data[\"attributes\"])[key] = (this.attributes)[key];\r\n }\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IIValueValidator {\r\n name: string | undefined;\r\n attributes: { [key: string]: any; } | undefined;\r\n}\r\n\r\nexport class ImpersonateOutput implements IImpersonateOutput {\r\n impersonationToken!: string | undefined;\r\n tenancyName!: string | undefined;\r\n\r\n constructor(data?: IImpersonateOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.impersonationToken = _data[\"impersonationToken\"];\r\n this.tenancyName = _data[\"tenancyName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ImpersonateOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ImpersonateOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"impersonationToken\"] = this.impersonationToken;\r\n data[\"tenancyName\"] = this.tenancyName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IImpersonateOutput {\r\n impersonationToken: string | undefined;\r\n tenancyName: string | undefined;\r\n}\r\n\r\nexport class ImpersonateTenantInput implements IImpersonateTenantInput {\r\n tenantId!: number | undefined;\r\n userId!: number;\r\n\r\n constructor(data?: IImpersonateTenantInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenantId = _data[\"tenantId\"];\r\n this.userId = _data[\"userId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ImpersonateTenantInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ImpersonateTenantInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"userId\"] = this.userId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IImpersonateTenantInput {\r\n tenantId: number | undefined;\r\n userId: number;\r\n}\r\n\r\nexport class ImpersonateUserInput implements IImpersonateUserInput {\r\n tenantId!: number | undefined;\r\n userId!: number;\r\n\r\n constructor(data?: IImpersonateUserInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenantId = _data[\"tenantId\"];\r\n this.userId = _data[\"userId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ImpersonateUserInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ImpersonateUserInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"userId\"] = this.userId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IImpersonateUserInput {\r\n tenantId: number | undefined;\r\n userId: number;\r\n}\r\n\r\nexport class ImpersonatedAuthenticateResultModel implements IImpersonatedAuthenticateResultModel {\r\n accessToken!: string | undefined;\r\n encryptedAccessToken!: string | undefined;\r\n expireInSeconds!: number;\r\n\r\n constructor(data?: IImpersonatedAuthenticateResultModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.accessToken = _data[\"accessToken\"];\r\n this.encryptedAccessToken = _data[\"encryptedAccessToken\"];\r\n this.expireInSeconds = _data[\"expireInSeconds\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ImpersonatedAuthenticateResultModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ImpersonatedAuthenticateResultModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"accessToken\"] = this.accessToken;\r\n data[\"encryptedAccessToken\"] = this.encryptedAccessToken;\r\n data[\"expireInSeconds\"] = this.expireInSeconds;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IImpersonatedAuthenticateResultModel {\r\n accessToken: string | undefined;\r\n encryptedAccessToken: string | undefined;\r\n expireInSeconds: number;\r\n}\r\n\r\nexport class IncomeStastistic implements IIncomeStastistic {\r\n label!: string | undefined;\r\n date!: DateTime;\r\n amount!: number;\r\n\r\n constructor(data?: IIncomeStastistic) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.label = _data[\"label\"];\r\n this.date = _data[\"date\"] ? DateTime.fromISO(_data[\"date\"].toString()) : undefined;\r\n this.amount = _data[\"amount\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): IncomeStastistic {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new IncomeStastistic();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"label\"] = this.label;\r\n data[\"date\"] = this.date ? this.date.toString() : undefined;\r\n data[\"amount\"] = this.amount;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IIncomeStastistic {\r\n label: string | undefined;\r\n date: DateTime;\r\n amount: number;\r\n}\r\n\r\nexport class InsertOrUpdateAllValuesInput implements IInsertOrUpdateAllValuesInput {\r\n items!: InsertOrUpdateAllValuesInputItem[] | undefined;\r\n\r\n constructor(data?: IInsertOrUpdateAllValuesInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(InsertOrUpdateAllValuesInputItem.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): InsertOrUpdateAllValuesInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InsertOrUpdateAllValuesInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInsertOrUpdateAllValuesInput {\r\n items: InsertOrUpdateAllValuesInputItem[] | undefined;\r\n}\r\n\r\nexport class InsertOrUpdateAllValuesInputItem implements IInsertOrUpdateAllValuesInputItem {\r\n entityId!: string | undefined;\r\n dynamicEntityPropertyId!: number;\r\n values!: string[] | undefined;\r\n\r\n constructor(data?: IInsertOrUpdateAllValuesInputItem) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.entityId = _data[\"entityId\"];\r\n this.dynamicEntityPropertyId = _data[\"dynamicEntityPropertyId\"];\r\n if (Array.isArray(_data[\"values\"])) {\r\n this.values = [] as any;\r\n for (let item of _data[\"values\"])\r\n this.values!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): InsertOrUpdateAllValuesInputItem {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InsertOrUpdateAllValuesInputItem();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"entityId\"] = this.entityId;\r\n data[\"dynamicEntityPropertyId\"] = this.dynamicEntityPropertyId;\r\n if (Array.isArray(this.values)) {\r\n data[\"values\"] = [];\r\n for (let item of this.values)\r\n data[\"values\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInsertOrUpdateAllValuesInputItem {\r\n entityId: string | undefined;\r\n dynamicEntityPropertyId: number;\r\n values: string[] | undefined;\r\n}\r\n\r\nexport class InstallDto implements IInstallDto {\r\n connectionString!: string;\r\n adminPassword!: string;\r\n webSiteUrl!: string;\r\n serverUrl!: string | undefined;\r\n defaultLanguage!: string;\r\n smtpSettings!: EmailSettingsEditDto;\r\n billInfo!: HostBillingSettingsEditDto;\r\n\r\n constructor(data?: IInstallDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.connectionString = _data[\"connectionString\"];\r\n this.adminPassword = _data[\"adminPassword\"];\r\n this.webSiteUrl = _data[\"webSiteUrl\"];\r\n this.serverUrl = _data[\"serverUrl\"];\r\n this.defaultLanguage = _data[\"defaultLanguage\"];\r\n this.smtpSettings = _data[\"smtpSettings\"] ? EmailSettingsEditDto.fromJS(_data[\"smtpSettings\"]) : undefined;\r\n this.billInfo = _data[\"billInfo\"] ? HostBillingSettingsEditDto.fromJS(_data[\"billInfo\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): InstallDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InstallDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"connectionString\"] = this.connectionString;\r\n data[\"adminPassword\"] = this.adminPassword;\r\n data[\"webSiteUrl\"] = this.webSiteUrl;\r\n data[\"serverUrl\"] = this.serverUrl;\r\n data[\"defaultLanguage\"] = this.defaultLanguage;\r\n data[\"smtpSettings\"] = this.smtpSettings ? this.smtpSettings.toJSON() : undefined;\r\n data[\"billInfo\"] = this.billInfo ? this.billInfo.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInstallDto {\r\n connectionString: string;\r\n adminPassword: string;\r\n webSiteUrl: string;\r\n serverUrl: string | undefined;\r\n defaultLanguage: string;\r\n smtpSettings: EmailSettingsEditDto;\r\n billInfo: HostBillingSettingsEditDto;\r\n}\r\n\r\nexport class Int64EntityDto implements IInt64EntityDto {\r\n id!: number;\r\n\r\n constructor(data?: IInt64EntityDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): Int64EntityDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Int64EntityDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInt64EntityDto {\r\n id: number;\r\n}\r\n\r\nexport class InvoiceDto implements IInvoiceDto {\r\n amount!: number;\r\n editionDisplayName!: string | undefined;\r\n invoiceNo!: string | undefined;\r\n invoiceDate!: DateTime;\r\n tenantLegalName!: string | undefined;\r\n tenantAddress!: string[] | undefined;\r\n tenantTaxNo!: string | undefined;\r\n hostLegalName!: string | undefined;\r\n hostAddress!: string[] | undefined;\r\n\r\n constructor(data?: IInvoiceDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.amount = _data[\"amount\"];\r\n this.editionDisplayName = _data[\"editionDisplayName\"];\r\n this.invoiceNo = _data[\"invoiceNo\"];\r\n this.invoiceDate = _data[\"invoiceDate\"] ? DateTime.fromISO(_data[\"invoiceDate\"].toString()) : undefined;\r\n this.tenantLegalName = _data[\"tenantLegalName\"];\r\n if (Array.isArray(_data[\"tenantAddress\"])) {\r\n this.tenantAddress = [] as any;\r\n for (let item of _data[\"tenantAddress\"])\r\n this.tenantAddress!.push(item);\r\n }\r\n this.tenantTaxNo = _data[\"tenantTaxNo\"];\r\n this.hostLegalName = _data[\"hostLegalName\"];\r\n if (Array.isArray(_data[\"hostAddress\"])) {\r\n this.hostAddress = [] as any;\r\n for (let item of _data[\"hostAddress\"])\r\n this.hostAddress!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): InvoiceDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new InvoiceDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"amount\"] = this.amount;\r\n data[\"editionDisplayName\"] = this.editionDisplayName;\r\n data[\"invoiceNo\"] = this.invoiceNo;\r\n data[\"invoiceDate\"] = this.invoiceDate ? this.invoiceDate.toString() : undefined;\r\n data[\"tenantLegalName\"] = this.tenantLegalName;\r\n if (Array.isArray(this.tenantAddress)) {\r\n data[\"tenantAddress\"] = [];\r\n for (let item of this.tenantAddress)\r\n data[\"tenantAddress\"].push(item);\r\n }\r\n data[\"tenantTaxNo\"] = this.tenantTaxNo;\r\n data[\"hostLegalName\"] = this.hostLegalName;\r\n if (Array.isArray(this.hostAddress)) {\r\n data[\"hostAddress\"] = [];\r\n for (let item of this.hostAddress)\r\n data[\"hostAddress\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IInvoiceDto {\r\n amount: number;\r\n editionDisplayName: string | undefined;\r\n invoiceNo: string | undefined;\r\n invoiceDate: DateTime;\r\n tenantLegalName: string | undefined;\r\n tenantAddress: string[] | undefined;\r\n tenantTaxNo: string | undefined;\r\n hostLegalName: string | undefined;\r\n hostAddress: string[] | undefined;\r\n}\r\n\r\nexport class IsFeedbackRequiredOutput implements IIsFeedbackRequiredOutput {\r\n isFeedbackRequired!: boolean;\r\n\r\n constructor(data?: IIsFeedbackRequiredOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.isFeedbackRequired = _data[\"isFeedbackRequired\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): IsFeedbackRequiredOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new IsFeedbackRequiredOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"isFeedbackRequired\"] = this.isFeedbackRequired;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IIsFeedbackRequiredOutput {\r\n isFeedbackRequired: boolean;\r\n}\r\n\r\nexport class IsTenantAvailableInput implements IIsTenantAvailableInput {\r\n tenancyName!: string;\r\n\r\n constructor(data?: IIsTenantAvailableInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenancyName = _data[\"tenancyName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): IsTenantAvailableInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new IsTenantAvailableInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenancyName\"] = this.tenancyName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IIsTenantAvailableInput {\r\n tenancyName: string;\r\n}\r\n\r\nexport class IsTenantAvailableOutput implements IIsTenantAvailableOutput {\r\n state!: TenantAvailabilityState;\r\n tenantId!: number | undefined;\r\n serverRootAddress!: string | undefined;\r\n\r\n constructor(data?: IIsTenantAvailableOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.state = _data[\"state\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n this.serverRootAddress = _data[\"serverRootAddress\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): IsTenantAvailableOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new IsTenantAvailableOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"state\"] = this.state;\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"serverRootAddress\"] = this.serverRootAddress;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IIsTenantAvailableOutput {\r\n state: TenantAvailabilityState;\r\n tenantId: number | undefined;\r\n serverRootAddress: string | undefined;\r\n}\r\n\r\nexport class JsonClaimMapDto implements IJsonClaimMapDto {\r\n claim!: string | undefined;\r\n key!: string | undefined;\r\n\r\n constructor(data?: IJsonClaimMapDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.claim = _data[\"claim\"];\r\n this.key = _data[\"key\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): JsonClaimMapDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new JsonClaimMapDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"claim\"] = this.claim;\r\n data[\"key\"] = this.key;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IJsonClaimMapDto {\r\n claim: string | undefined;\r\n key: string | undefined;\r\n}\r\n\r\nexport class LanguageTextListDto implements ILanguageTextListDto {\r\n key!: string | undefined;\r\n baseValue!: string | undefined;\r\n targetValue!: string | undefined;\r\n\r\n constructor(data?: ILanguageTextListDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.key = _data[\"key\"];\r\n this.baseValue = _data[\"baseValue\"];\r\n this.targetValue = _data[\"targetValue\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): LanguageTextListDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LanguageTextListDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"key\"] = this.key;\r\n data[\"baseValue\"] = this.baseValue;\r\n data[\"targetValue\"] = this.targetValue;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILanguageTextListDto {\r\n key: string | undefined;\r\n baseValue: string | undefined;\r\n targetValue: string | undefined;\r\n}\r\n\r\nexport class LanguageTextListDtoPagedResultDto implements ILanguageTextListDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: LanguageTextListDto[] | undefined;\r\n\r\n constructor(data?: ILanguageTextListDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(LanguageTextListDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): LanguageTextListDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LanguageTextListDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILanguageTextListDtoPagedResultDto {\r\n totalCount: number;\r\n items: LanguageTextListDto[] | undefined;\r\n}\r\n\r\nexport class LdapSettingsEditDto implements ILdapSettingsEditDto {\r\n isModuleEnabled!: boolean;\r\n isEnabled!: boolean;\r\n domain!: string | undefined;\r\n userName!: string | undefined;\r\n password!: string | undefined;\r\n\r\n constructor(data?: ILdapSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.isModuleEnabled = _data[\"isModuleEnabled\"];\r\n this.isEnabled = _data[\"isEnabled\"];\r\n this.domain = _data[\"domain\"];\r\n this.userName = _data[\"userName\"];\r\n this.password = _data[\"password\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): LdapSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LdapSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"isModuleEnabled\"] = this.isModuleEnabled;\r\n data[\"isEnabled\"] = this.isEnabled;\r\n data[\"domain\"] = this.domain;\r\n data[\"userName\"] = this.userName;\r\n data[\"password\"] = this.password;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILdapSettingsEditDto {\r\n isModuleEnabled: boolean;\r\n isEnabled: boolean;\r\n domain: string | undefined;\r\n userName: string | undefined;\r\n password: string | undefined;\r\n}\r\n\r\nexport class LearnMoreOvalsDto implements ILearnMoreOvalsDto {\r\n episodeOvalId!: number;\r\n ovalContent!: OvalDto;\r\n\r\n constructor(data?: ILearnMoreOvalsDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.episodeOvalId = _data[\"episodeOvalId\"];\r\n this.ovalContent = _data[\"ovalContent\"] ? OvalDto.fromJS(_data[\"ovalContent\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): LearnMoreOvalsDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LearnMoreOvalsDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"episodeOvalId\"] = this.episodeOvalId;\r\n data[\"ovalContent\"] = this.ovalContent ? this.ovalContent.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILearnMoreOvalsDto {\r\n episodeOvalId: number;\r\n ovalContent: OvalDto;\r\n}\r\n\r\nexport class LinkToUserInput implements ILinkToUserInput {\r\n tenancyName!: string | undefined;\r\n usernameOrEmailAddress!: string;\r\n password!: string;\r\n\r\n constructor(data?: ILinkToUserInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenancyName = _data[\"tenancyName\"];\r\n this.usernameOrEmailAddress = _data[\"usernameOrEmailAddress\"];\r\n this.password = _data[\"password\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): LinkToUserInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LinkToUserInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenancyName\"] = this.tenancyName;\r\n data[\"usernameOrEmailAddress\"] = this.usernameOrEmailAddress;\r\n data[\"password\"] = this.password;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILinkToUserInput {\r\n tenancyName: string | undefined;\r\n usernameOrEmailAddress: string;\r\n password: string;\r\n}\r\n\r\nexport class LinkedUserDto implements ILinkedUserDto {\r\n tenantId!: number | undefined;\r\n tenancyName!: string | undefined;\r\n username!: string | undefined;\r\n id!: number;\r\n\r\n constructor(data?: ILinkedUserDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenantId = _data[\"tenantId\"];\r\n this.tenancyName = _data[\"tenancyName\"];\r\n this.username = _data[\"username\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): LinkedUserDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LinkedUserDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"tenancyName\"] = this.tenancyName;\r\n data[\"username\"] = this.username;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILinkedUserDto {\r\n tenantId: number | undefined;\r\n tenancyName: string | undefined;\r\n username: string | undefined;\r\n id: number;\r\n}\r\n\r\nexport class LinkedUserDtoListResultDto implements ILinkedUserDtoListResultDto {\r\n items!: LinkedUserDto[] | undefined;\r\n\r\n constructor(data?: ILinkedUserDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(LinkedUserDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): LinkedUserDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LinkedUserDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILinkedUserDtoListResultDto {\r\n items: LinkedUserDto[] | undefined;\r\n}\r\n\r\nexport class LinkedUserDtoPagedResultDto implements ILinkedUserDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: LinkedUserDto[] | undefined;\r\n\r\n constructor(data?: ILinkedUserDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(LinkedUserDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): LinkedUserDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LinkedUserDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILinkedUserDtoPagedResultDto {\r\n totalCount: number;\r\n items: LinkedUserDto[] | undefined;\r\n}\r\n\r\nexport class LocalizableComboboxItemDto implements ILocalizableComboboxItemDto {\r\n value!: string | undefined;\r\n displayText!: string | undefined;\r\n\r\n constructor(data?: ILocalizableComboboxItemDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.value = _data[\"value\"];\r\n this.displayText = _data[\"displayText\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): LocalizableComboboxItemDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LocalizableComboboxItemDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"value\"] = this.value;\r\n data[\"displayText\"] = this.displayText;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILocalizableComboboxItemDto {\r\n value: string | undefined;\r\n displayText: string | undefined;\r\n}\r\n\r\nexport class LocalizableComboboxItemSourceDto implements ILocalizableComboboxItemSourceDto {\r\n items!: LocalizableComboboxItemDto[] | undefined;\r\n\r\n constructor(data?: ILocalizableComboboxItemSourceDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(LocalizableComboboxItemDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): LocalizableComboboxItemSourceDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new LocalizableComboboxItemSourceDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ILocalizableComboboxItemSourceDto {\r\n items: LocalizableComboboxItemDto[] | undefined;\r\n}\r\n\r\nexport class MarkAllUnreadMessagesOfUserAsReadInput implements IMarkAllUnreadMessagesOfUserAsReadInput {\r\n tenantId!: number | undefined;\r\n userId!: number;\r\n\r\n constructor(data?: IMarkAllUnreadMessagesOfUserAsReadInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenantId = _data[\"tenantId\"];\r\n this.userId = _data[\"userId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): MarkAllUnreadMessagesOfUserAsReadInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new MarkAllUnreadMessagesOfUserAsReadInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"userId\"] = this.userId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IMarkAllUnreadMessagesOfUserAsReadInput {\r\n tenantId: number | undefined;\r\n userId: number;\r\n}\r\n\r\nexport class MassNotificationOrganizationUnitLookupTableDto implements IMassNotificationOrganizationUnitLookupTableDto {\r\n id!: number;\r\n displayName!: string | undefined;\r\n\r\n constructor(data?: IMassNotificationOrganizationUnitLookupTableDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): MassNotificationOrganizationUnitLookupTableDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new MassNotificationOrganizationUnitLookupTableDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IMassNotificationOrganizationUnitLookupTableDto {\r\n id: number;\r\n displayName: string | undefined;\r\n}\r\n\r\nexport class MassNotificationOrganizationUnitLookupTableDtoPagedResultDto implements IMassNotificationOrganizationUnitLookupTableDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: MassNotificationOrganizationUnitLookupTableDto[] | undefined;\r\n\r\n constructor(data?: IMassNotificationOrganizationUnitLookupTableDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(MassNotificationOrganizationUnitLookupTableDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): MassNotificationOrganizationUnitLookupTableDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new MassNotificationOrganizationUnitLookupTableDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IMassNotificationOrganizationUnitLookupTableDtoPagedResultDto {\r\n totalCount: number;\r\n items: MassNotificationOrganizationUnitLookupTableDto[] | undefined;\r\n}\r\n\r\nexport class MassNotificationUserLookupTableDto implements IMassNotificationUserLookupTableDto {\r\n id!: number;\r\n displayName!: string | undefined;\r\n\r\n constructor(data?: IMassNotificationUserLookupTableDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): MassNotificationUserLookupTableDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new MassNotificationUserLookupTableDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IMassNotificationUserLookupTableDto {\r\n id: number;\r\n displayName: string | undefined;\r\n}\r\n\r\nexport class MassNotificationUserLookupTableDtoPagedResultDto implements IMassNotificationUserLookupTableDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: MassNotificationUserLookupTableDto[] | undefined;\r\n\r\n constructor(data?: IMassNotificationUserLookupTableDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(MassNotificationUserLookupTableDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): MassNotificationUserLookupTableDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new MassNotificationUserLookupTableDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IMassNotificationUserLookupTableDtoPagedResultDto {\r\n totalCount: number;\r\n items: MassNotificationUserLookupTableDto[] | undefined;\r\n}\r\n\r\nexport class MemberActivity implements IMemberActivity {\r\n name!: string | undefined;\r\n earnings!: string | undefined;\r\n cases!: number;\r\n closed!: number;\r\n rate!: string | undefined;\r\n profilePictureName!: string | undefined;\r\n\r\n constructor(data?: IMemberActivity) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.earnings = _data[\"earnings\"];\r\n this.cases = _data[\"cases\"];\r\n this.closed = _data[\"closed\"];\r\n this.rate = _data[\"rate\"];\r\n this.profilePictureName = _data[\"profilePictureName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): MemberActivity {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new MemberActivity();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"earnings\"] = this.earnings;\r\n data[\"cases\"] = this.cases;\r\n data[\"closed\"] = this.closed;\r\n data[\"rate\"] = this.rate;\r\n data[\"profilePictureName\"] = this.profilePictureName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IMemberActivity {\r\n name: string | undefined;\r\n earnings: string | undefined;\r\n cases: number;\r\n closed: number;\r\n rate: string | undefined;\r\n profilePictureName: string | undefined;\r\n}\r\n\r\nexport class MicrosoftExternalLoginProviderSettings implements IMicrosoftExternalLoginProviderSettings {\r\n clientId!: string | undefined;\r\n clientSecret!: string | undefined;\r\n\r\n constructor(data?: IMicrosoftExternalLoginProviderSettings) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.clientId = _data[\"clientId\"];\r\n this.clientSecret = _data[\"clientSecret\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): MicrosoftExternalLoginProviderSettings {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new MicrosoftExternalLoginProviderSettings();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"clientId\"] = this.clientId;\r\n data[\"clientSecret\"] = this.clientSecret;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IMicrosoftExternalLoginProviderSettings {\r\n clientId: string | undefined;\r\n clientSecret: string | undefined;\r\n}\r\n\r\nexport class MoveOrganizationUnitInput implements IMoveOrganizationUnitInput {\r\n id!: number;\r\n newParentId!: number | undefined;\r\n\r\n constructor(data?: IMoveOrganizationUnitInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.newParentId = _data[\"newParentId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): MoveOrganizationUnitInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new MoveOrganizationUnitInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"newParentId\"] = this.newParentId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IMoveOrganizationUnitInput {\r\n id: number;\r\n newParentId: number | undefined;\r\n}\r\n\r\nexport class MoveTenantsToAnotherEditionDto implements IMoveTenantsToAnotherEditionDto {\r\n sourceEditionId!: number;\r\n targetEditionId!: number;\r\n\r\n constructor(data?: IMoveTenantsToAnotherEditionDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.sourceEditionId = _data[\"sourceEditionId\"];\r\n this.targetEditionId = _data[\"targetEditionId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): MoveTenantsToAnotherEditionDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new MoveTenantsToAnotherEditionDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"sourceEditionId\"] = this.sourceEditionId;\r\n data[\"targetEditionId\"] = this.targetEditionId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IMoveTenantsToAnotherEditionDto {\r\n sourceEditionId: number;\r\n targetEditionId: number;\r\n}\r\n\r\nexport class NameValue implements INameValue {\r\n name!: string | undefined;\r\n value!: string | undefined;\r\n\r\n constructor(data?: INameValue) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.value = _data[\"value\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): NameValue {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new NameValue();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"value\"] = this.value;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface INameValue {\r\n name: string | undefined;\r\n value: string | undefined;\r\n}\r\n\r\nexport class NameValueDto implements INameValueDto {\r\n name!: string | undefined;\r\n value!: string | undefined;\r\n\r\n constructor(data?: INameValueDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.value = _data[\"value\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): NameValueDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new NameValueDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"value\"] = this.value;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface INameValueDto {\r\n name: string | undefined;\r\n value: string | undefined;\r\n}\r\n\r\nexport class NameValueDtoListResultDto implements INameValueDtoListResultDto {\r\n items!: NameValueDto[] | undefined;\r\n\r\n constructor(data?: INameValueDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(NameValueDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): NameValueDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new NameValueDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface INameValueDtoListResultDto {\r\n items: NameValueDto[] | undefined;\r\n}\r\n\r\nexport class NameValueDtoPagedResultDto implements INameValueDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: NameValueDto[] | undefined;\r\n\r\n constructor(data?: INameValueDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(NameValueDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): NameValueDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new NameValueDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface INameValueDtoPagedResultDto {\r\n totalCount: number;\r\n items: NameValueDto[] | undefined;\r\n}\r\n\r\nexport class NotificationData implements INotificationData {\r\n readonly type!: string | undefined;\r\n properties!: { [key: string]: any; } | undefined;\r\n\r\n constructor(data?: INotificationData) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n (this).type = _data[\"type\"];\r\n if (_data[\"properties\"]) {\r\n this.properties = {} as any;\r\n for (let key in _data[\"properties\"]) {\r\n if (_data[\"properties\"].hasOwnProperty(key))\r\n (this.properties)![key] = _data[\"properties\"][key];\r\n }\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): NotificationData {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new NotificationData();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"type\"] = this.type;\r\n if (this.properties) {\r\n data[\"properties\"] = {};\r\n for (let key in this.properties) {\r\n if (this.properties.hasOwnProperty(key))\r\n (data[\"properties\"])[key] = (this.properties)[key];\r\n }\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface INotificationData {\r\n type: string | undefined;\r\n properties: { [key: string]: any; } | undefined;\r\n}\r\n\r\nexport enum NotificationSeverity {\r\n Info = 0,\r\n Success = 1,\r\n Warn = 2,\r\n Error = 3,\r\n Fatal = 4,\r\n _Info = Info,\r\n _Success = Success,\r\n _Warn = Warn,\r\n _Error = Error,\r\n _Fatal = Fatal,\r\n}\r\n\r\nexport class NotificationSubscriptionDto implements INotificationSubscriptionDto {\r\n name!: string;\r\n isSubscribed!: boolean;\r\n\r\n constructor(data?: INotificationSubscriptionDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.isSubscribed = _data[\"isSubscribed\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): NotificationSubscriptionDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new NotificationSubscriptionDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"isSubscribed\"] = this.isSubscribed;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface INotificationSubscriptionDto {\r\n name: string;\r\n isSubscribed: boolean;\r\n}\r\n\r\nexport class NotificationSubscriptionWithDisplayNameDto implements INotificationSubscriptionWithDisplayNameDto {\r\n displayName!: string | undefined;\r\n description!: string | undefined;\r\n name!: string;\r\n isSubscribed!: boolean;\r\n\r\n constructor(data?: INotificationSubscriptionWithDisplayNameDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.displayName = _data[\"displayName\"];\r\n this.description = _data[\"description\"];\r\n this.name = _data[\"name\"];\r\n this.isSubscribed = _data[\"isSubscribed\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): NotificationSubscriptionWithDisplayNameDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new NotificationSubscriptionWithDisplayNameDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"displayName\"] = this.displayName;\r\n data[\"description\"] = this.description;\r\n data[\"name\"] = this.name;\r\n data[\"isSubscribed\"] = this.isSubscribed;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface INotificationSubscriptionWithDisplayNameDto {\r\n displayName: string | undefined;\r\n description: string | undefined;\r\n name: string;\r\n isSubscribed: boolean;\r\n}\r\n\r\nexport class OpenIdConnectExternalLoginProviderSettings implements IOpenIdConnectExternalLoginProviderSettings {\r\n clientId!: string | undefined;\r\n clientSecret!: string | undefined;\r\n authority!: string | undefined;\r\n loginUrl!: string | undefined;\r\n validateIssuer!: boolean;\r\n responseType!: string | undefined;\r\n\r\n constructor(data?: IOpenIdConnectExternalLoginProviderSettings) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.clientId = _data[\"clientId\"];\r\n this.clientSecret = _data[\"clientSecret\"];\r\n this.authority = _data[\"authority\"];\r\n this.loginUrl = _data[\"loginUrl\"];\r\n this.validateIssuer = _data[\"validateIssuer\"];\r\n this.responseType = _data[\"responseType\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): OpenIdConnectExternalLoginProviderSettings {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OpenIdConnectExternalLoginProviderSettings();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"clientId\"] = this.clientId;\r\n data[\"clientSecret\"] = this.clientSecret;\r\n data[\"authority\"] = this.authority;\r\n data[\"loginUrl\"] = this.loginUrl;\r\n data[\"validateIssuer\"] = this.validateIssuer;\r\n data[\"responseType\"] = this.responseType;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOpenIdConnectExternalLoginProviderSettings {\r\n clientId: string | undefined;\r\n clientSecret: string | undefined;\r\n authority: string | undefined;\r\n loginUrl: string | undefined;\r\n validateIssuer: boolean;\r\n responseType: string | undefined;\r\n}\r\n\r\nexport class OrganizationUnitDto implements IOrganizationUnitDto {\r\n parentId!: number | undefined;\r\n code!: string | undefined;\r\n displayName!: string | undefined;\r\n memberCount!: number;\r\n roleCount!: number;\r\n lastModificationTime!: DateTime | undefined;\r\n lastModifierUserId!: number | undefined;\r\n creationTime!: DateTime;\r\n creatorUserId!: number | undefined;\r\n id!: number;\r\n\r\n constructor(data?: IOrganizationUnitDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.parentId = _data[\"parentId\"];\r\n this.code = _data[\"code\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.memberCount = _data[\"memberCount\"];\r\n this.roleCount = _data[\"roleCount\"];\r\n this.lastModificationTime = _data[\"lastModificationTime\"] ? DateTime.fromISO(_data[\"lastModificationTime\"].toString()) : undefined;\r\n this.lastModifierUserId = _data[\"lastModifierUserId\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n this.creatorUserId = _data[\"creatorUserId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): OrganizationUnitDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OrganizationUnitDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"parentId\"] = this.parentId;\r\n data[\"code\"] = this.code;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"memberCount\"] = this.memberCount;\r\n data[\"roleCount\"] = this.roleCount;\r\n data[\"lastModificationTime\"] = this.lastModificationTime ? this.lastModificationTime.toString() : undefined;\r\n data[\"lastModifierUserId\"] = this.lastModifierUserId;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n data[\"creatorUserId\"] = this.creatorUserId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOrganizationUnitDto {\r\n parentId: number | undefined;\r\n code: string | undefined;\r\n displayName: string | undefined;\r\n memberCount: number;\r\n roleCount: number;\r\n lastModificationTime: DateTime | undefined;\r\n lastModifierUserId: number | undefined;\r\n creationTime: DateTime;\r\n creatorUserId: number | undefined;\r\n id: number;\r\n}\r\n\r\nexport class OrganizationUnitDtoListResultDto implements IOrganizationUnitDtoListResultDto {\r\n items!: OrganizationUnitDto[] | undefined;\r\n\r\n constructor(data?: IOrganizationUnitDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(OrganizationUnitDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): OrganizationUnitDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OrganizationUnitDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOrganizationUnitDtoListResultDto {\r\n items: OrganizationUnitDto[] | undefined;\r\n}\r\n\r\nexport class OrganizationUnitRoleListDto implements IOrganizationUnitRoleListDto {\r\n displayName!: string | undefined;\r\n name!: string | undefined;\r\n addedTime!: DateTime;\r\n id!: number;\r\n\r\n constructor(data?: IOrganizationUnitRoleListDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.displayName = _data[\"displayName\"];\r\n this.name = _data[\"name\"];\r\n this.addedTime = _data[\"addedTime\"] ? DateTime.fromISO(_data[\"addedTime\"].toString()) : undefined;\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): OrganizationUnitRoleListDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OrganizationUnitRoleListDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"displayName\"] = this.displayName;\r\n data[\"name\"] = this.name;\r\n data[\"addedTime\"] = this.addedTime ? this.addedTime.toString() : undefined;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOrganizationUnitRoleListDto {\r\n displayName: string | undefined;\r\n name: string | undefined;\r\n addedTime: DateTime;\r\n id: number;\r\n}\r\n\r\nexport class OrganizationUnitRoleListDtoPagedResultDto implements IOrganizationUnitRoleListDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: OrganizationUnitRoleListDto[] | undefined;\r\n\r\n constructor(data?: IOrganizationUnitRoleListDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(OrganizationUnitRoleListDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): OrganizationUnitRoleListDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OrganizationUnitRoleListDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOrganizationUnitRoleListDtoPagedResultDto {\r\n totalCount: number;\r\n items: OrganizationUnitRoleListDto[] | undefined;\r\n}\r\n\r\nexport class OrganizationUnitUserListDto implements IOrganizationUnitUserListDto {\r\n name!: string | undefined;\r\n surname!: string | undefined;\r\n userName!: string | undefined;\r\n emailAddress!: string | undefined;\r\n profilePictureId!: string | undefined;\r\n addedTime!: DateTime;\r\n id!: number;\r\n\r\n constructor(data?: IOrganizationUnitUserListDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.surname = _data[\"surname\"];\r\n this.userName = _data[\"userName\"];\r\n this.emailAddress = _data[\"emailAddress\"];\r\n this.profilePictureId = _data[\"profilePictureId\"];\r\n this.addedTime = _data[\"addedTime\"] ? DateTime.fromISO(_data[\"addedTime\"].toString()) : undefined;\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): OrganizationUnitUserListDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OrganizationUnitUserListDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"surname\"] = this.surname;\r\n data[\"userName\"] = this.userName;\r\n data[\"emailAddress\"] = this.emailAddress;\r\n data[\"profilePictureId\"] = this.profilePictureId;\r\n data[\"addedTime\"] = this.addedTime ? this.addedTime.toString() : undefined;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOrganizationUnitUserListDto {\r\n name: string | undefined;\r\n surname: string | undefined;\r\n userName: string | undefined;\r\n emailAddress: string | undefined;\r\n profilePictureId: string | undefined;\r\n addedTime: DateTime;\r\n id: number;\r\n}\r\n\r\nexport class OrganizationUnitUserListDtoPagedResultDto implements IOrganizationUnitUserListDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: OrganizationUnitUserListDto[] | undefined;\r\n\r\n constructor(data?: IOrganizationUnitUserListDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(OrganizationUnitUserListDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): OrganizationUnitUserListDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OrganizationUnitUserListDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOrganizationUnitUserListDtoPagedResultDto {\r\n totalCount: number;\r\n items: OrganizationUnitUserListDto[] | undefined;\r\n}\r\n\r\nexport class OtherSettingsEditDto implements IOtherSettingsEditDto {\r\n isQuickThemeSelectEnabled!: boolean;\r\n\r\n constructor(data?: IOtherSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.isQuickThemeSelectEnabled = _data[\"isQuickThemeSelectEnabled\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): OtherSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OtherSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"isQuickThemeSelectEnabled\"] = this.isQuickThemeSelectEnabled;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOtherSettingsEditDto {\r\n isQuickThemeSelectEnabled: boolean;\r\n}\r\n\r\nexport class OvalDto implements IOvalDto {\r\n title!: string | undefined;\r\n textColor!: string | undefined;\r\n backgroundColor!: string | undefined;\r\n borderColor!: string | undefined;\r\n templateName!: string | undefined;\r\n order!: number;\r\n id!: number;\r\n\r\n constructor(data?: IOvalDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.title = _data[\"title\"];\r\n this.textColor = _data[\"textColor\"];\r\n this.backgroundColor = _data[\"backgroundColor\"];\r\n this.borderColor = _data[\"borderColor\"];\r\n this.templateName = _data[\"templateName\"];\r\n this.order = _data[\"order\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): OvalDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OvalDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"title\"] = this.title;\r\n data[\"textColor\"] = this.textColor;\r\n data[\"backgroundColor\"] = this.backgroundColor;\r\n data[\"borderColor\"] = this.borderColor;\r\n data[\"templateName\"] = this.templateName;\r\n data[\"order\"] = this.order;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOvalDto {\r\n title: string | undefined;\r\n textColor: string | undefined;\r\n backgroundColor: string | undefined;\r\n borderColor: string | undefined;\r\n templateName: string | undefined;\r\n order: number;\r\n id: number;\r\n}\r\n\r\nexport class OvalFileDifficultyLevelDto implements IOvalFileDifficultyLevelDto {\r\n name!: string | undefined;\r\n color!: string | undefined;\r\n id!: number | undefined;\r\n\r\n constructor(data?: IOvalFileDifficultyLevelDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.color = _data[\"color\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): OvalFileDifficultyLevelDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OvalFileDifficultyLevelDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"color\"] = this.color;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOvalFileDifficultyLevelDto {\r\n name: string | undefined;\r\n color: string | undefined;\r\n id: number | undefined;\r\n}\r\n\r\nexport class OvalFileDto implements IOvalFileDto {\r\n file!: OvalFileEntityDto;\r\n difficultyLevel!: OvalFileDifficultyLevelDto;\r\n isNextFileHasDifferentDifficulty!: boolean;\r\n\r\n constructor(data?: IOvalFileDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.file = _data[\"file\"] ? OvalFileEntityDto.fromJS(_data[\"file\"]) : undefined;\r\n this.difficultyLevel = _data[\"difficultyLevel\"] ? OvalFileDifficultyLevelDto.fromJS(_data[\"difficultyLevel\"]) : undefined;\r\n this.isNextFileHasDifferentDifficulty = _data[\"isNextFileHasDifferentDifficulty\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): OvalFileDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OvalFileDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"file\"] = this.file ? this.file.toJSON() : undefined;\r\n data[\"difficultyLevel\"] = this.difficultyLevel ? this.difficultyLevel.toJSON() : undefined;\r\n data[\"isNextFileHasDifferentDifficulty\"] = this.isNextFileHasDifferentDifficulty;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOvalFileDto {\r\n file: OvalFileEntityDto;\r\n difficultyLevel: OvalFileDifficultyLevelDto;\r\n isNextFileHasDifferentDifficulty: boolean;\r\n}\r\n\r\nexport class OvalFileEntityDto implements IOvalFileEntityDto {\r\n id!: string | undefined;\r\n name!: string | undefined;\r\n nameWithoutExtention!: string | undefined;\r\n\r\n constructor(data?: IOvalFileEntityDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.name = _data[\"name\"];\r\n this.nameWithoutExtention = _data[\"nameWithoutExtention\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): OvalFileEntityDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OvalFileEntityDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"name\"] = this.name;\r\n data[\"nameWithoutExtention\"] = this.nameWithoutExtention;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOvalFileEntityDto {\r\n id: string | undefined;\r\n name: string | undefined;\r\n nameWithoutExtention: string | undefined;\r\n}\r\n\r\nexport class OvalFilesDto implements IOvalFilesDto {\r\n ovalName!: string | undefined;\r\n ovalTemplate!: TemplateName;\r\n episodeTitle!: string | undefined;\r\n files!: OvalFileDto[] | undefined;\r\n\r\n constructor(data?: IOvalFilesDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.ovalName = _data[\"ovalName\"];\r\n this.ovalTemplate = _data[\"ovalTemplate\"];\r\n this.episodeTitle = _data[\"episodeTitle\"];\r\n if (Array.isArray(_data[\"files\"])) {\r\n this.files = [] as any;\r\n for (let item of _data[\"files\"])\r\n this.files!.push(OvalFileDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): OvalFilesDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OvalFilesDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"ovalName\"] = this.ovalName;\r\n data[\"ovalTemplate\"] = this.ovalTemplate;\r\n data[\"episodeTitle\"] = this.episodeTitle;\r\n if (Array.isArray(this.files)) {\r\n data[\"files\"] = [];\r\n for (let item of this.files)\r\n data[\"files\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOvalFilesDto {\r\n ovalName: string | undefined;\r\n ovalTemplate: TemplateName;\r\n episodeTitle: string | undefined;\r\n files: OvalFileDto[] | undefined;\r\n}\r\n\r\nexport class OvalHasFileDto implements IOvalHasFileDto {\r\n hasFile!: boolean;\r\n\r\n constructor(data?: IOvalHasFileDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.hasFile = _data[\"hasFile\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): OvalHasFileDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new OvalHasFileDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"hasFile\"] = this.hasFile;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IOvalHasFileDto {\r\n hasFile: boolean;\r\n}\r\n\r\nexport class Page implements IPage {\r\n id!: string | undefined;\r\n name!: string | undefined;\r\n widgets!: Widget[] | undefined;\r\n\r\n constructor(data?: IPage) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.name = _data[\"name\"];\r\n if (Array.isArray(_data[\"widgets\"])) {\r\n this.widgets = [] as any;\r\n for (let item of _data[\"widgets\"])\r\n this.widgets!.push(Widget.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): Page {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Page();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"name\"] = this.name;\r\n if (Array.isArray(this.widgets)) {\r\n data[\"widgets\"] = [];\r\n for (let item of this.widgets)\r\n data[\"widgets\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IPage {\r\n id: string | undefined;\r\n name: string | undefined;\r\n widgets: Widget[] | undefined;\r\n}\r\n\r\nexport class PasswordComplexitySetting implements IPasswordComplexitySetting {\r\n readonly allowedMinimumLength!: number;\r\n requireDigit!: boolean;\r\n requireLowercase!: boolean;\r\n requireNonAlphanumeric!: boolean;\r\n requireUppercase!: boolean;\r\n requiredLength!: number;\r\n\r\n constructor(data?: IPasswordComplexitySetting) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n (this).allowedMinimumLength = _data[\"allowedMinimumLength\"];\r\n this.requireDigit = _data[\"requireDigit\"];\r\n this.requireLowercase = _data[\"requireLowercase\"];\r\n this.requireNonAlphanumeric = _data[\"requireNonAlphanumeric\"];\r\n this.requireUppercase = _data[\"requireUppercase\"];\r\n this.requiredLength = _data[\"requiredLength\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): PasswordComplexitySetting {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new PasswordComplexitySetting();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"allowedMinimumLength\"] = this.allowedMinimumLength;\r\n data[\"requireDigit\"] = this.requireDigit;\r\n data[\"requireLowercase\"] = this.requireLowercase;\r\n data[\"requireNonAlphanumeric\"] = this.requireNonAlphanumeric;\r\n data[\"requireUppercase\"] = this.requireUppercase;\r\n data[\"requiredLength\"] = this.requiredLength;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IPasswordComplexitySetting {\r\n allowedMinimumLength: number;\r\n requireDigit: boolean;\r\n requireLowercase: boolean;\r\n requireNonAlphanumeric: boolean;\r\n requireUppercase: boolean;\r\n requiredLength: number;\r\n}\r\n\r\nexport class PayPalConfigurationDto implements IPayPalConfigurationDto {\r\n clientId!: string | undefined;\r\n demoUsername!: string | undefined;\r\n demoPassword!: string | undefined;\r\n disabledFundings!: string[] | undefined;\r\n\r\n constructor(data?: IPayPalConfigurationDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.clientId = _data[\"clientId\"];\r\n this.demoUsername = _data[\"demoUsername\"];\r\n this.demoPassword = _data[\"demoPassword\"];\r\n if (Array.isArray(_data[\"disabledFundings\"])) {\r\n this.disabledFundings = [] as any;\r\n for (let item of _data[\"disabledFundings\"])\r\n this.disabledFundings!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): PayPalConfigurationDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new PayPalConfigurationDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"clientId\"] = this.clientId;\r\n data[\"demoUsername\"] = this.demoUsername;\r\n data[\"demoPassword\"] = this.demoPassword;\r\n if (Array.isArray(this.disabledFundings)) {\r\n data[\"disabledFundings\"] = [];\r\n for (let item of this.disabledFundings)\r\n data[\"disabledFundings\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IPayPalConfigurationDto {\r\n clientId: string | undefined;\r\n demoUsername: string | undefined;\r\n demoPassword: string | undefined;\r\n disabledFundings: string[] | undefined;\r\n}\r\n\r\nexport class PaymentGatewayModel implements IPaymentGatewayModel {\r\n gatewayType!: SubscriptionPaymentGatewayType;\r\n supportsRecurringPayments!: boolean;\r\n\r\n constructor(data?: IPaymentGatewayModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.gatewayType = _data[\"gatewayType\"];\r\n this.supportsRecurringPayments = _data[\"supportsRecurringPayments\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): PaymentGatewayModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new PaymentGatewayModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"gatewayType\"] = this.gatewayType;\r\n data[\"supportsRecurringPayments\"] = this.supportsRecurringPayments;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IPaymentGatewayModel {\r\n gatewayType: SubscriptionPaymentGatewayType;\r\n supportsRecurringPayments: boolean;\r\n}\r\n\r\nexport class PaymentInfoDto implements IPaymentInfoDto {\r\n edition!: EditionSelectDto;\r\n additionalPrice!: number;\r\n\r\n constructor(data?: IPaymentInfoDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.edition = _data[\"edition\"] ? EditionSelectDto.fromJS(_data[\"edition\"]) : undefined;\r\n this.additionalPrice = _data[\"additionalPrice\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): PaymentInfoDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new PaymentInfoDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"edition\"] = this.edition ? this.edition.toJSON() : undefined;\r\n data[\"additionalPrice\"] = this.additionalPrice;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IPaymentInfoDto {\r\n edition: EditionSelectDto;\r\n additionalPrice: number;\r\n}\r\n\r\nexport enum PaymentPeriodType {\r\n Daily = 1,\r\n Weekly = 7,\r\n Monthly = 30,\r\n Annual = 365,\r\n _Daily = Daily,\r\n _Weekly = Weekly,\r\n _Monthly = Monthly,\r\n _Annual = Annual,\r\n}\r\n\r\nexport class RecentTenant implements IRecentTenant {\r\n id!: number;\r\n name!: string | undefined;\r\n creationTime!: DateTime;\r\n\r\n constructor(data?: IRecentTenant) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.name = _data[\"name\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): RecentTenant {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RecentTenant();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"name\"] = this.name;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRecentTenant {\r\n id: number;\r\n name: string | undefined;\r\n creationTime: DateTime;\r\n}\r\n\r\nexport class RefreshTokenResult implements IRefreshTokenResult {\r\n accessToken!: string | undefined;\r\n encryptedAccessToken!: string | undefined;\r\n expireInSeconds!: number;\r\n\r\n constructor(data?: IRefreshTokenResult) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.accessToken = _data[\"accessToken\"];\r\n this.encryptedAccessToken = _data[\"encryptedAccessToken\"];\r\n this.expireInSeconds = _data[\"expireInSeconds\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): RefreshTokenResult {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RefreshTokenResult();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"accessToken\"] = this.accessToken;\r\n data[\"encryptedAccessToken\"] = this.encryptedAccessToken;\r\n data[\"expireInSeconds\"] = this.expireInSeconds;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRefreshTokenResult {\r\n accessToken: string | undefined;\r\n encryptedAccessToken: string | undefined;\r\n expireInSeconds: number;\r\n}\r\n\r\nexport class RegionEndpoint implements IRegionEndpoint {\r\n readonly systemName!: string | undefined;\r\n readonly originalSystemName!: string | undefined;\r\n readonly displayName!: string | undefined;\r\n readonly partitionName!: string | undefined;\r\n readonly partitionDnsSuffix!: string | undefined;\r\n\r\n constructor(data?: IRegionEndpoint) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n (this).systemName = _data[\"systemName\"];\r\n (this).originalSystemName = _data[\"originalSystemName\"];\r\n (this).displayName = _data[\"displayName\"];\r\n (this).partitionName = _data[\"partitionName\"];\r\n (this).partitionDnsSuffix = _data[\"partitionDnsSuffix\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): RegionEndpoint {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RegionEndpoint();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"systemName\"] = this.systemName;\r\n data[\"originalSystemName\"] = this.originalSystemName;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"partitionName\"] = this.partitionName;\r\n data[\"partitionDnsSuffix\"] = this.partitionDnsSuffix;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRegionEndpoint {\r\n systemName: string | undefined;\r\n originalSystemName: string | undefined;\r\n displayName: string | undefined;\r\n partitionName: string | undefined;\r\n partitionDnsSuffix: string | undefined;\r\n}\r\n\r\nexport class RegionalStatCountry implements IRegionalStatCountry {\r\n countryName!: string | undefined;\r\n sales!: number;\r\n change!: number[] | undefined;\r\n averagePrice!: number;\r\n totalPrice!: number;\r\n\r\n constructor(data?: IRegionalStatCountry) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.countryName = _data[\"countryName\"];\r\n this.sales = _data[\"sales\"];\r\n if (Array.isArray(_data[\"change\"])) {\r\n this.change = [] as any;\r\n for (let item of _data[\"change\"])\r\n this.change!.push(item);\r\n }\r\n this.averagePrice = _data[\"averagePrice\"];\r\n this.totalPrice = _data[\"totalPrice\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): RegionalStatCountry {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RegionalStatCountry();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"countryName\"] = this.countryName;\r\n data[\"sales\"] = this.sales;\r\n if (Array.isArray(this.change)) {\r\n data[\"change\"] = [];\r\n for (let item of this.change)\r\n data[\"change\"].push(item);\r\n }\r\n data[\"averagePrice\"] = this.averagePrice;\r\n data[\"totalPrice\"] = this.totalPrice;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRegionalStatCountry {\r\n countryName: string | undefined;\r\n sales: number;\r\n change: number[] | undefined;\r\n averagePrice: number;\r\n totalPrice: number;\r\n}\r\n\r\nexport class RegisterInput implements IRegisterInput {\r\n name!: string;\r\n surname!: string;\r\n userName!: string;\r\n emailAddress!: string;\r\n password!: string;\r\n captchaResponse!: string | undefined;\r\n\r\n constructor(data?: IRegisterInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.surname = _data[\"surname\"];\r\n this.userName = _data[\"userName\"];\r\n this.emailAddress = _data[\"emailAddress\"];\r\n this.password = _data[\"password\"];\r\n this.captchaResponse = _data[\"captchaResponse\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): RegisterInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RegisterInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"surname\"] = this.surname;\r\n data[\"userName\"] = this.userName;\r\n data[\"emailAddress\"] = this.emailAddress;\r\n data[\"password\"] = this.password;\r\n data[\"captchaResponse\"] = this.captchaResponse;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRegisterInput {\r\n name: string;\r\n surname: string;\r\n userName: string;\r\n emailAddress: string;\r\n password: string;\r\n captchaResponse: string | undefined;\r\n}\r\n\r\nexport class RegisterOutput implements IRegisterOutput {\r\n canLogin!: boolean;\r\n\r\n constructor(data?: IRegisterOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.canLogin = _data[\"canLogin\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): RegisterOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RegisterOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"canLogin\"] = this.canLogin;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRegisterOutput {\r\n canLogin: boolean;\r\n}\r\n\r\nexport class RegisterTenantInput implements IRegisterTenantInput {\r\n tenancyName!: string;\r\n name!: string;\r\n adminEmailAddress!: string;\r\n adminName!: string | undefined;\r\n adminSurname!: string | undefined;\r\n adminPassword!: string | undefined;\r\n captchaResponse!: string | undefined;\r\n subscriptionStartType!: SubscriptionStartType;\r\n editionId!: number | undefined;\r\n tenantLanguageId!: number | undefined;\r\n\r\n constructor(data?: IRegisterTenantInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenancyName = _data[\"tenancyName\"];\r\n this.name = _data[\"name\"];\r\n this.adminEmailAddress = _data[\"adminEmailAddress\"];\r\n this.adminName = _data[\"adminName\"];\r\n this.adminSurname = _data[\"adminSurname\"];\r\n this.adminPassword = _data[\"adminPassword\"];\r\n this.captchaResponse = _data[\"captchaResponse\"];\r\n this.subscriptionStartType = _data[\"subscriptionStartType\"];\r\n this.editionId = _data[\"editionId\"];\r\n this.tenantLanguageId = _data[\"tenantLanguageId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): RegisterTenantInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RegisterTenantInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenancyName\"] = this.tenancyName;\r\n data[\"name\"] = this.name;\r\n data[\"adminEmailAddress\"] = this.adminEmailAddress;\r\n data[\"adminName\"] = this.adminName;\r\n data[\"adminSurname\"] = this.adminSurname;\r\n data[\"adminPassword\"] = this.adminPassword;\r\n data[\"captchaResponse\"] = this.captchaResponse;\r\n data[\"subscriptionStartType\"] = this.subscriptionStartType;\r\n data[\"editionId\"] = this.editionId;\r\n data[\"tenantLanguageId\"] = this.tenantLanguageId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRegisterTenantInput {\r\n tenancyName: string;\r\n name: string;\r\n adminEmailAddress: string;\r\n adminName: string | undefined;\r\n adminSurname: string | undefined;\r\n adminPassword: string | undefined;\r\n captchaResponse: string | undefined;\r\n subscriptionStartType: SubscriptionStartType;\r\n editionId: number | undefined;\r\n tenantLanguageId: number | undefined;\r\n}\r\n\r\nexport class RegisterTenantOutput implements IRegisterTenantOutput {\r\n tenantId!: number;\r\n tenancyName!: string | undefined;\r\n name!: string | undefined;\r\n userName!: string | undefined;\r\n emailAddress!: string | undefined;\r\n isTenantActive!: boolean;\r\n isActive!: boolean;\r\n isEmailConfirmationRequired!: boolean;\r\n\r\n constructor(data?: IRegisterTenantOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenantId = _data[\"tenantId\"];\r\n this.tenancyName = _data[\"tenancyName\"];\r\n this.name = _data[\"name\"];\r\n this.userName = _data[\"userName\"];\r\n this.emailAddress = _data[\"emailAddress\"];\r\n this.isTenantActive = _data[\"isTenantActive\"];\r\n this.isActive = _data[\"isActive\"];\r\n this.isEmailConfirmationRequired = _data[\"isEmailConfirmationRequired\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): RegisterTenantOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RegisterTenantOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"tenancyName\"] = this.tenancyName;\r\n data[\"name\"] = this.name;\r\n data[\"userName\"] = this.userName;\r\n data[\"emailAddress\"] = this.emailAddress;\r\n data[\"isTenantActive\"] = this.isTenantActive;\r\n data[\"isActive\"] = this.isActive;\r\n data[\"isEmailConfirmationRequired\"] = this.isEmailConfirmationRequired;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRegisterTenantOutput {\r\n tenantId: number;\r\n tenancyName: string | undefined;\r\n name: string | undefined;\r\n userName: string | undefined;\r\n emailAddress: string | undefined;\r\n isTenantActive: boolean;\r\n isActive: boolean;\r\n isEmailConfirmationRequired: boolean;\r\n}\r\n\r\nexport class RenamePageInput implements IRenamePageInput {\r\n dashboardName!: string | undefined;\r\n id!: string | undefined;\r\n name!: string | undefined;\r\n application!: string | undefined;\r\n\r\n constructor(data?: IRenamePageInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.dashboardName = _data[\"dashboardName\"];\r\n this.id = _data[\"id\"];\r\n this.name = _data[\"name\"];\r\n this.application = _data[\"application\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): RenamePageInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RenamePageInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"dashboardName\"] = this.dashboardName;\r\n data[\"id\"] = this.id;\r\n data[\"name\"] = this.name;\r\n data[\"application\"] = this.application;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRenamePageInput {\r\n dashboardName: string | undefined;\r\n id: string | undefined;\r\n name: string | undefined;\r\n application: string | undefined;\r\n}\r\n\r\nexport class ResetPasswordInput implements IResetPasswordInput {\r\n userId!: number;\r\n resetCode!: string | undefined;\r\n expireDate!: DateTime;\r\n password!: string | undefined;\r\n returnUrl!: string | undefined;\r\n singleSignIn!: string | undefined;\r\n c!: string | undefined;\r\n\r\n constructor(data?: IResetPasswordInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"];\r\n this.resetCode = _data[\"resetCode\"];\r\n this.expireDate = _data[\"expireDate\"] ? DateTime.fromISO(_data[\"expireDate\"].toString()) : undefined;\r\n this.password = _data[\"password\"];\r\n this.returnUrl = _data[\"returnUrl\"];\r\n this.singleSignIn = _data[\"singleSignIn\"];\r\n this.c = _data[\"c\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ResetPasswordInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ResetPasswordInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId;\r\n data[\"resetCode\"] = this.resetCode;\r\n data[\"expireDate\"] = this.expireDate ? this.expireDate.toString() : undefined;\r\n data[\"password\"] = this.password;\r\n data[\"returnUrl\"] = this.returnUrl;\r\n data[\"singleSignIn\"] = this.singleSignIn;\r\n data[\"c\"] = this.c;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IResetPasswordInput {\r\n userId: number;\r\n resetCode: string | undefined;\r\n expireDate: DateTime;\r\n password: string | undefined;\r\n returnUrl: string | undefined;\r\n singleSignIn: string | undefined;\r\n c: string | undefined;\r\n}\r\n\r\nexport class ResetPasswordOutput implements IResetPasswordOutput {\r\n canLogin!: boolean;\r\n userName!: string | undefined;\r\n\r\n constructor(data?: IResetPasswordOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.canLogin = _data[\"canLogin\"];\r\n this.userName = _data[\"userName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ResetPasswordOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ResetPasswordOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"canLogin\"] = this.canLogin;\r\n data[\"userName\"] = this.userName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IResetPasswordOutput {\r\n canLogin: boolean;\r\n userName: string | undefined;\r\n}\r\n\r\nexport class ResolveTenantIdInput implements IResolveTenantIdInput {\r\n c!: string | undefined;\r\n\r\n constructor(data?: IResolveTenantIdInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.c = _data[\"c\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ResolveTenantIdInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ResolveTenantIdInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"c\"] = this.c;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IResolveTenantIdInput {\r\n c: string | undefined;\r\n}\r\n\r\nexport class RoleEditDto implements IRoleEditDto {\r\n id!: number | undefined;\r\n displayName!: string;\r\n isDefault!: boolean;\r\n\r\n constructor(data?: IRoleEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.isDefault = _data[\"isDefault\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): RoleEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RoleEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"isDefault\"] = this.isDefault;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRoleEditDto {\r\n id: number | undefined;\r\n displayName: string;\r\n isDefault: boolean;\r\n}\r\n\r\nexport class RoleListDto implements IRoleListDto {\r\n name!: string | undefined;\r\n displayName!: string | undefined;\r\n isStatic!: boolean;\r\n isDefault!: boolean;\r\n creationTime!: DateTime;\r\n id!: number;\r\n\r\n constructor(data?: IRoleListDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.displayName = _data[\"displayName\"];\r\n this.isStatic = _data[\"isStatic\"];\r\n this.isDefault = _data[\"isDefault\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): RoleListDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RoleListDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"displayName\"] = this.displayName;\r\n data[\"isStatic\"] = this.isStatic;\r\n data[\"isDefault\"] = this.isDefault;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRoleListDto {\r\n name: string | undefined;\r\n displayName: string | undefined;\r\n isStatic: boolean;\r\n isDefault: boolean;\r\n creationTime: DateTime;\r\n id: number;\r\n}\r\n\r\nexport class RoleListDtoListResultDto implements IRoleListDtoListResultDto {\r\n items!: RoleListDto[] | undefined;\r\n\r\n constructor(data?: IRoleListDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(RoleListDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): RoleListDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RoleListDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRoleListDtoListResultDto {\r\n items: RoleListDto[] | undefined;\r\n}\r\n\r\nexport class RolesToOrganizationUnitInput implements IRolesToOrganizationUnitInput {\r\n roleIds!: number[] | undefined;\r\n organizationUnitId!: number;\r\n\r\n constructor(data?: IRolesToOrganizationUnitInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"roleIds\"])) {\r\n this.roleIds = [] as any;\r\n for (let item of _data[\"roleIds\"])\r\n this.roleIds!.push(item);\r\n }\r\n this.organizationUnitId = _data[\"organizationUnitId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): RolesToOrganizationUnitInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new RolesToOrganizationUnitInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.roleIds)) {\r\n data[\"roleIds\"] = [];\r\n for (let item of this.roleIds)\r\n data[\"roleIds\"].push(item);\r\n }\r\n data[\"organizationUnitId\"] = this.organizationUnitId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IRolesToOrganizationUnitInput {\r\n roleIds: number[] | undefined;\r\n organizationUnitId: number;\r\n}\r\n\r\nexport class SalesSummaryData implements ISalesSummaryData {\r\n period!: string | undefined;\r\n sales!: number;\r\n profit!: number;\r\n\r\n constructor(data?: ISalesSummaryData) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.period = _data[\"period\"];\r\n this.sales = _data[\"sales\"];\r\n this.profit = _data[\"profit\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SalesSummaryData {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SalesSummaryData();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"period\"] = this.period;\r\n data[\"sales\"] = this.sales;\r\n data[\"profit\"] = this.profit;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISalesSummaryData {\r\n period: string | undefined;\r\n sales: number;\r\n profit: number;\r\n}\r\n\r\nexport enum SalesSummaryDatePeriod {\r\n Daily = 1,\r\n Weekly = 2,\r\n Monthly = 3,\r\n _Daily = Daily,\r\n _Weekly = Weekly,\r\n _Monthly = Monthly,\r\n}\r\n\r\nexport class SavePageInput implements ISavePageInput {\r\n dashboardName!: string | undefined;\r\n application!: string | undefined;\r\n pages!: Page[] | undefined;\r\n\r\n constructor(data?: ISavePageInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.dashboardName = _data[\"dashboardName\"];\r\n this.application = _data[\"application\"];\r\n if (Array.isArray(_data[\"pages\"])) {\r\n this.pages = [] as any;\r\n for (let item of _data[\"pages\"])\r\n this.pages!.push(Page.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): SavePageInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SavePageInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"dashboardName\"] = this.dashboardName;\r\n data[\"application\"] = this.application;\r\n if (Array.isArray(this.pages)) {\r\n data[\"pages\"] = [];\r\n for (let item of this.pages)\r\n data[\"pages\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISavePageInput {\r\n dashboardName: string | undefined;\r\n application: string | undefined;\r\n pages: Page[] | undefined;\r\n}\r\n\r\nexport class SecuritySettingsEditDto implements ISecuritySettingsEditDto {\r\n allowOneConcurrentLoginPerUser!: boolean;\r\n useDefaultPasswordComplexitySettings!: boolean;\r\n passwordComplexity!: PasswordComplexitySetting;\r\n defaultPasswordComplexity!: PasswordComplexitySetting;\r\n userLockOut!: UserLockOutSettingsEditDto;\r\n twoFactorLogin!: TwoFactorLoginSettingsEditDto;\r\n\r\n constructor(data?: ISecuritySettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.allowOneConcurrentLoginPerUser = _data[\"allowOneConcurrentLoginPerUser\"];\r\n this.useDefaultPasswordComplexitySettings = _data[\"useDefaultPasswordComplexitySettings\"];\r\n this.passwordComplexity = _data[\"passwordComplexity\"] ? PasswordComplexitySetting.fromJS(_data[\"passwordComplexity\"]) : undefined;\r\n this.defaultPasswordComplexity = _data[\"defaultPasswordComplexity\"] ? PasswordComplexitySetting.fromJS(_data[\"defaultPasswordComplexity\"]) : undefined;\r\n this.userLockOut = _data[\"userLockOut\"] ? UserLockOutSettingsEditDto.fromJS(_data[\"userLockOut\"]) : undefined;\r\n this.twoFactorLogin = _data[\"twoFactorLogin\"] ? TwoFactorLoginSettingsEditDto.fromJS(_data[\"twoFactorLogin\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): SecuritySettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SecuritySettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"allowOneConcurrentLoginPerUser\"] = this.allowOneConcurrentLoginPerUser;\r\n data[\"useDefaultPasswordComplexitySettings\"] = this.useDefaultPasswordComplexitySettings;\r\n data[\"passwordComplexity\"] = this.passwordComplexity ? this.passwordComplexity.toJSON() : undefined;\r\n data[\"defaultPasswordComplexity\"] = this.defaultPasswordComplexity ? this.defaultPasswordComplexity.toJSON() : undefined;\r\n data[\"userLockOut\"] = this.userLockOut ? this.userLockOut.toJSON() : undefined;\r\n data[\"twoFactorLogin\"] = this.twoFactorLogin ? this.twoFactorLogin.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISecuritySettingsEditDto {\r\n allowOneConcurrentLoginPerUser: boolean;\r\n useDefaultPasswordComplexitySettings: boolean;\r\n passwordComplexity: PasswordComplexitySetting;\r\n defaultPasswordComplexity: PasswordComplexitySetting;\r\n userLockOut: UserLockOutSettingsEditDto;\r\n twoFactorLogin: TwoFactorLoginSettingsEditDto;\r\n}\r\n\r\nexport class SendAndGetDateWithTextInput implements ISendAndGetDateWithTextInput {\r\n text!: string | undefined;\r\n date!: DateTime;\r\n\r\n constructor(data?: ISendAndGetDateWithTextInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.text = _data[\"text\"];\r\n this.date = _data[\"date\"] ? DateTime.fromISO(_data[\"date\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): SendAndGetDateWithTextInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SendAndGetDateWithTextInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"text\"] = this.text;\r\n data[\"date\"] = this.date ? this.date.toString() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISendAndGetDateWithTextInput {\r\n text: string | undefined;\r\n date: DateTime;\r\n}\r\n\r\nexport class SendEmailActivationLinkInput implements ISendEmailActivationLinkInput {\r\n emailAddress!: string;\r\n\r\n constructor(data?: ISendEmailActivationLinkInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.emailAddress = _data[\"emailAddress\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SendEmailActivationLinkInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SendEmailActivationLinkInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"emailAddress\"] = this.emailAddress;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISendEmailActivationLinkInput {\r\n emailAddress: string;\r\n}\r\n\r\nexport class SendPasswordResetCodeInput implements ISendPasswordResetCodeInput {\r\n emailAddress!: string;\r\n\r\n constructor(data?: ISendPasswordResetCodeInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.emailAddress = _data[\"emailAddress\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SendPasswordResetCodeInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SendPasswordResetCodeInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"emailAddress\"] = this.emailAddress;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISendPasswordResetCodeInput {\r\n emailAddress: string;\r\n}\r\n\r\nexport class SendTestEmailInput implements ISendTestEmailInput {\r\n emailAddress!: string;\r\n\r\n constructor(data?: ISendTestEmailInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.emailAddress = _data[\"emailAddress\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SendTestEmailInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SendTestEmailInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"emailAddress\"] = this.emailAddress;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISendTestEmailInput {\r\n emailAddress: string;\r\n}\r\n\r\nexport class SendTwoFactorAuthCodeModel implements ISendTwoFactorAuthCodeModel {\r\n userId!: number;\r\n provider!: string;\r\n\r\n constructor(data?: ISendTwoFactorAuthCodeModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"];\r\n this.provider = _data[\"provider\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SendTwoFactorAuthCodeModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SendTwoFactorAuthCodeModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId;\r\n data[\"provider\"] = this.provider;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISendTwoFactorAuthCodeModel {\r\n userId: number;\r\n provider: string;\r\n}\r\n\r\nexport class SendVerificationSmsInputDto implements ISendVerificationSmsInputDto {\r\n phoneNumber!: string | undefined;\r\n\r\n constructor(data?: ISendVerificationSmsInputDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.phoneNumber = _data[\"phoneNumber\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SendVerificationSmsInputDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SendVerificationSmsInputDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"phoneNumber\"] = this.phoneNumber;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISendVerificationSmsInputDto {\r\n phoneNumber: string | undefined;\r\n}\r\n\r\nexport class SessionTimeOutSettingsEditDto implements ISessionTimeOutSettingsEditDto {\r\n isEnabled!: boolean;\r\n timeOutSecond!: number;\r\n showTimeOutNotificationSecond!: number;\r\n showLockScreenWhenTimedOut!: boolean;\r\n\r\n constructor(data?: ISessionTimeOutSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.isEnabled = _data[\"isEnabled\"];\r\n this.timeOutSecond = _data[\"timeOutSecond\"];\r\n this.showTimeOutNotificationSecond = _data[\"showTimeOutNotificationSecond\"];\r\n this.showLockScreenWhenTimedOut = _data[\"showLockScreenWhenTimedOut\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SessionTimeOutSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SessionTimeOutSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"isEnabled\"] = this.isEnabled;\r\n data[\"timeOutSecond\"] = this.timeOutSecond;\r\n data[\"showTimeOutNotificationSecond\"] = this.showTimeOutNotificationSecond;\r\n data[\"showLockScreenWhenTimedOut\"] = this.showLockScreenWhenTimedOut;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISessionTimeOutSettingsEditDto {\r\n isEnabled: boolean;\r\n timeOutSecond: number;\r\n showTimeOutNotificationSecond: number;\r\n showLockScreenWhenTimedOut: boolean;\r\n}\r\n\r\nexport class SetDefaultLanguageInput implements ISetDefaultLanguageInput {\r\n name!: string;\r\n\r\n constructor(data?: ISetDefaultLanguageInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SetDefaultLanguageInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SetDefaultLanguageInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISetDefaultLanguageInput {\r\n name: string;\r\n}\r\n\r\nexport class SetNotificationAsReadOutput implements ISetNotificationAsReadOutput {\r\n success!: boolean;\r\n\r\n constructor(data?: ISetNotificationAsReadOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.success = _data[\"success\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SetNotificationAsReadOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SetNotificationAsReadOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"success\"] = this.success;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISetNotificationAsReadOutput {\r\n success: boolean;\r\n}\r\n\r\nexport enum SettingScopes {\r\n Application = 1,\r\n Tenant = 2,\r\n User = 4,\r\n All = 7,\r\n _Application = Application,\r\n _Tenant = Tenant,\r\n _User = User,\r\n _All = All,\r\n}\r\n\r\nexport class StorageFileInputDto implements IStorageFileInputDto {\r\n fileId!: string;\r\n\r\n constructor(data?: IStorageFileInputDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.fileId = _data[\"fileId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): StorageFileInputDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new StorageFileInputDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"fileId\"] = this.fileId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IStorageFileInputDto {\r\n fileId: string;\r\n}\r\n\r\nexport class StorageFileOutputDto implements IStorageFileOutputDto {\r\n fileId!: string;\r\n url!: string | undefined;\r\n\r\n constructor(data?: IStorageFileOutputDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.fileId = _data[\"fileId\"];\r\n this.url = _data[\"url\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): StorageFileOutputDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new StorageFileOutputDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"fileId\"] = this.fileId;\r\n data[\"url\"] = this.url;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IStorageFileOutputDto {\r\n fileId: string;\r\n url: string | undefined;\r\n}\r\n\r\nexport class StringEntityDto implements IStringEntityDto {\r\n id!: string | undefined;\r\n\r\n constructor(data?: IStringEntityDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): StringEntityDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new StringEntityDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IStringEntityDto {\r\n id: string | undefined;\r\n}\r\n\r\nexport class StringNameValue implements IStringNameValue {\r\n name!: string | undefined;\r\n value!: string | undefined;\r\n\r\n constructor(data?: IStringNameValue) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.value = _data[\"value\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): StringNameValue {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new StringNameValue();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"value\"] = this.value;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IStringNameValue {\r\n name: string | undefined;\r\n value: string | undefined;\r\n}\r\n\r\nexport class StringOutput implements IStringOutput {\r\n output!: string | undefined;\r\n\r\n constructor(data?: IStringOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.output = _data[\"output\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): StringOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new StringOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"output\"] = this.output;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IStringOutput {\r\n output: string | undefined;\r\n}\r\n\r\nexport class StripeConfigurationDto implements IStripeConfigurationDto {\r\n publishableKey!: string | undefined;\r\n\r\n constructor(data?: IStripeConfigurationDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.publishableKey = _data[\"publishableKey\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): StripeConfigurationDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new StripeConfigurationDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"publishableKey\"] = this.publishableKey;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IStripeConfigurationDto {\r\n publishableKey: string | undefined;\r\n}\r\n\r\nexport class StripeCreatePaymentSessionInput implements IStripeCreatePaymentSessionInput {\r\n paymentId!: number;\r\n successUrl!: string | undefined;\r\n cancelUrl!: string | undefined;\r\n\r\n constructor(data?: IStripeCreatePaymentSessionInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.paymentId = _data[\"paymentId\"];\r\n this.successUrl = _data[\"successUrl\"];\r\n this.cancelUrl = _data[\"cancelUrl\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): StripeCreatePaymentSessionInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new StripeCreatePaymentSessionInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"paymentId\"] = this.paymentId;\r\n data[\"successUrl\"] = this.successUrl;\r\n data[\"cancelUrl\"] = this.cancelUrl;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IStripeCreatePaymentSessionInput {\r\n paymentId: number;\r\n successUrl: string | undefined;\r\n cancelUrl: string | undefined;\r\n}\r\n\r\nexport class StripePaymentResultOutput implements IStripePaymentResultOutput {\r\n paymentDone!: boolean;\r\n\r\n constructor(data?: IStripePaymentResultOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.paymentDone = _data[\"paymentDone\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): StripePaymentResultOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new StripePaymentResultOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"paymentDone\"] = this.paymentDone;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IStripePaymentResultOutput {\r\n paymentDone: boolean;\r\n}\r\n\r\nexport class SubscribableEditionComboboxItemDto implements ISubscribableEditionComboboxItemDto {\r\n isFree!: boolean | undefined;\r\n value!: string | undefined;\r\n displayText!: string | undefined;\r\n isSelected!: boolean;\r\n\r\n constructor(data?: ISubscribableEditionComboboxItemDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.isFree = _data[\"isFree\"];\r\n this.value = _data[\"value\"];\r\n this.displayText = _data[\"displayText\"];\r\n this.isSelected = _data[\"isSelected\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SubscribableEditionComboboxItemDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SubscribableEditionComboboxItemDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"isFree\"] = this.isFree;\r\n data[\"value\"] = this.value;\r\n data[\"displayText\"] = this.displayText;\r\n data[\"isSelected\"] = this.isSelected;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISubscribableEditionComboboxItemDto {\r\n isFree: boolean | undefined;\r\n value: string | undefined;\r\n displayText: string | undefined;\r\n isSelected: boolean;\r\n}\r\n\r\nexport class SubscribableEditionComboboxItemDtoListResultDto implements ISubscribableEditionComboboxItemDtoListResultDto {\r\n items!: SubscribableEditionComboboxItemDto[] | undefined;\r\n\r\n constructor(data?: ISubscribableEditionComboboxItemDtoListResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(SubscribableEditionComboboxItemDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): SubscribableEditionComboboxItemDtoListResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SubscribableEditionComboboxItemDtoListResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISubscribableEditionComboboxItemDtoListResultDto {\r\n items: SubscribableEditionComboboxItemDto[] | undefined;\r\n}\r\n\r\nexport class SubscriptionPaymentDto implements ISubscriptionPaymentDto {\r\n description!: string | undefined;\r\n gateway!: SubscriptionPaymentGatewayType;\r\n amount!: number;\r\n editionId!: number;\r\n tenantId!: number;\r\n dayCount!: number;\r\n paymentPeriodType!: PaymentPeriodType;\r\n paymentId!: string | undefined;\r\n payerId!: string | undefined;\r\n editionDisplayName!: string | undefined;\r\n invoiceNo!: number;\r\n status!: SubscriptionPaymentStatus;\r\n isRecurring!: boolean;\r\n externalPaymentId!: string | undefined;\r\n successUrl!: string | undefined;\r\n errorUrl!: string | undefined;\r\n editionPaymentType!: EditionPaymentType;\r\n id!: number;\r\n\r\n constructor(data?: ISubscriptionPaymentDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.description = _data[\"description\"];\r\n this.gateway = _data[\"gateway\"];\r\n this.amount = _data[\"amount\"];\r\n this.editionId = _data[\"editionId\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n this.dayCount = _data[\"dayCount\"];\r\n this.paymentPeriodType = _data[\"paymentPeriodType\"];\r\n this.paymentId = _data[\"paymentId\"];\r\n this.payerId = _data[\"payerId\"];\r\n this.editionDisplayName = _data[\"editionDisplayName\"];\r\n this.invoiceNo = _data[\"invoiceNo\"];\r\n this.status = _data[\"status\"];\r\n this.isRecurring = _data[\"isRecurring\"];\r\n this.externalPaymentId = _data[\"externalPaymentId\"];\r\n this.successUrl = _data[\"successUrl\"];\r\n this.errorUrl = _data[\"errorUrl\"];\r\n this.editionPaymentType = _data[\"editionPaymentType\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SubscriptionPaymentDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SubscriptionPaymentDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"description\"] = this.description;\r\n data[\"gateway\"] = this.gateway;\r\n data[\"amount\"] = this.amount;\r\n data[\"editionId\"] = this.editionId;\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"dayCount\"] = this.dayCount;\r\n data[\"paymentPeriodType\"] = this.paymentPeriodType;\r\n data[\"paymentId\"] = this.paymentId;\r\n data[\"payerId\"] = this.payerId;\r\n data[\"editionDisplayName\"] = this.editionDisplayName;\r\n data[\"invoiceNo\"] = this.invoiceNo;\r\n data[\"status\"] = this.status;\r\n data[\"isRecurring\"] = this.isRecurring;\r\n data[\"externalPaymentId\"] = this.externalPaymentId;\r\n data[\"successUrl\"] = this.successUrl;\r\n data[\"errorUrl\"] = this.errorUrl;\r\n data[\"editionPaymentType\"] = this.editionPaymentType;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISubscriptionPaymentDto {\r\n description: string | undefined;\r\n gateway: SubscriptionPaymentGatewayType;\r\n amount: number;\r\n editionId: number;\r\n tenantId: number;\r\n dayCount: number;\r\n paymentPeriodType: PaymentPeriodType;\r\n paymentId: string | undefined;\r\n payerId: string | undefined;\r\n editionDisplayName: string | undefined;\r\n invoiceNo: number;\r\n status: SubscriptionPaymentStatus;\r\n isRecurring: boolean;\r\n externalPaymentId: string | undefined;\r\n successUrl: string | undefined;\r\n errorUrl: string | undefined;\r\n editionPaymentType: EditionPaymentType;\r\n id: number;\r\n}\r\n\r\nexport enum SubscriptionPaymentGatewayType {\r\n Paypal = 1,\r\n Stripe = 2,\r\n _Paypal = Paypal,\r\n _Stripe = Stripe,\r\n}\r\n\r\nexport class SubscriptionPaymentListDto implements ISubscriptionPaymentListDto {\r\n gateway!: string | undefined;\r\n amount!: number;\r\n editionId!: number;\r\n dayCount!: number;\r\n paymentPeriodType!: string | undefined;\r\n externalPaymentId!: string | undefined;\r\n payerId!: string | undefined;\r\n status!: string | undefined;\r\n editionDisplayName!: string | undefined;\r\n tenantId!: number;\r\n invoiceNo!: string | undefined;\r\n lastModificationTime!: DateTime | undefined;\r\n lastModifierUserId!: number | undefined;\r\n creationTime!: DateTime;\r\n creatorUserId!: number | undefined;\r\n id!: number;\r\n\r\n constructor(data?: ISubscriptionPaymentListDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.gateway = _data[\"gateway\"];\r\n this.amount = _data[\"amount\"];\r\n this.editionId = _data[\"editionId\"];\r\n this.dayCount = _data[\"dayCount\"];\r\n this.paymentPeriodType = _data[\"paymentPeriodType\"];\r\n this.externalPaymentId = _data[\"externalPaymentId\"];\r\n this.payerId = _data[\"payerId\"];\r\n this.status = _data[\"status\"];\r\n this.editionDisplayName = _data[\"editionDisplayName\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n this.invoiceNo = _data[\"invoiceNo\"];\r\n this.lastModificationTime = _data[\"lastModificationTime\"] ? DateTime.fromISO(_data[\"lastModificationTime\"].toString()) : undefined;\r\n this.lastModifierUserId = _data[\"lastModifierUserId\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n this.creatorUserId = _data[\"creatorUserId\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SubscriptionPaymentListDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SubscriptionPaymentListDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"gateway\"] = this.gateway;\r\n data[\"amount\"] = this.amount;\r\n data[\"editionId\"] = this.editionId;\r\n data[\"dayCount\"] = this.dayCount;\r\n data[\"paymentPeriodType\"] = this.paymentPeriodType;\r\n data[\"externalPaymentId\"] = this.externalPaymentId;\r\n data[\"payerId\"] = this.payerId;\r\n data[\"status\"] = this.status;\r\n data[\"editionDisplayName\"] = this.editionDisplayName;\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"invoiceNo\"] = this.invoiceNo;\r\n data[\"lastModificationTime\"] = this.lastModificationTime ? this.lastModificationTime.toString() : undefined;\r\n data[\"lastModifierUserId\"] = this.lastModifierUserId;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n data[\"creatorUserId\"] = this.creatorUserId;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISubscriptionPaymentListDto {\r\n gateway: string | undefined;\r\n amount: number;\r\n editionId: number;\r\n dayCount: number;\r\n paymentPeriodType: string | undefined;\r\n externalPaymentId: string | undefined;\r\n payerId: string | undefined;\r\n status: string | undefined;\r\n editionDisplayName: string | undefined;\r\n tenantId: number;\r\n invoiceNo: string | undefined;\r\n lastModificationTime: DateTime | undefined;\r\n lastModifierUserId: number | undefined;\r\n creationTime: DateTime;\r\n creatorUserId: number | undefined;\r\n id: number;\r\n}\r\n\r\nexport class SubscriptionPaymentListDtoPagedResultDto implements ISubscriptionPaymentListDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: SubscriptionPaymentListDto[] | undefined;\r\n\r\n constructor(data?: ISubscriptionPaymentListDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(SubscriptionPaymentListDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): SubscriptionPaymentListDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SubscriptionPaymentListDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISubscriptionPaymentListDtoPagedResultDto {\r\n totalCount: number;\r\n items: SubscriptionPaymentListDto[] | undefined;\r\n}\r\n\r\nexport enum SubscriptionPaymentStatus {\r\n NotPaid = 1,\r\n Paid = 2,\r\n Failed = 3,\r\n Cancelled = 4,\r\n Completed = 5,\r\n _NotPaid = NotPaid,\r\n _Paid = Paid,\r\n _Failed = Failed,\r\n _Cancelled = Cancelled,\r\n _Completed = Completed,\r\n}\r\n\r\nexport enum SubscriptionPaymentType {\r\n Manual = 0,\r\n RecurringAutomatic = 1,\r\n RecurringManual = 2,\r\n _Manual = Manual,\r\n _RecurringAutomatic = RecurringAutomatic,\r\n _RecurringManual = RecurringManual,\r\n}\r\n\r\nexport enum SubscriptionStartType {\r\n Free = 1,\r\n Trial = 2,\r\n Paid = 3,\r\n _Free = Free,\r\n _Trial = Trial,\r\n _Paid = Paid,\r\n}\r\n\r\nexport class SwitchToLinkedAccountInput implements ISwitchToLinkedAccountInput {\r\n targetTenantId!: number | undefined;\r\n targetUserId!: number;\r\n\r\n constructor(data?: ISwitchToLinkedAccountInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.targetTenantId = _data[\"targetTenantId\"];\r\n this.targetUserId = _data[\"targetUserId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SwitchToLinkedAccountInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SwitchToLinkedAccountInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"targetTenantId\"] = this.targetTenantId;\r\n data[\"targetUserId\"] = this.targetUserId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISwitchToLinkedAccountInput {\r\n targetTenantId: number | undefined;\r\n targetUserId: number;\r\n}\r\n\r\nexport class SwitchToLinkedAccountOutput implements ISwitchToLinkedAccountOutput {\r\n switchAccountToken!: string | undefined;\r\n tenancyName!: string | undefined;\r\n\r\n constructor(data?: ISwitchToLinkedAccountOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.switchAccountToken = _data[\"switchAccountToken\"];\r\n this.tenancyName = _data[\"tenancyName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SwitchToLinkedAccountOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SwitchToLinkedAccountOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"switchAccountToken\"] = this.switchAccountToken;\r\n data[\"tenancyName\"] = this.tenancyName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISwitchToLinkedAccountOutput {\r\n switchAccountToken: string | undefined;\r\n tenancyName: string | undefined;\r\n}\r\n\r\nexport class SwitchedAccountAuthenticateResultModel implements ISwitchedAccountAuthenticateResultModel {\r\n accessToken!: string | undefined;\r\n encryptedAccessToken!: string | undefined;\r\n expireInSeconds!: number;\r\n\r\n constructor(data?: ISwitchedAccountAuthenticateResultModel) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.accessToken = _data[\"accessToken\"];\r\n this.encryptedAccessToken = _data[\"encryptedAccessToken\"];\r\n this.expireInSeconds = _data[\"expireInSeconds\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): SwitchedAccountAuthenticateResultModel {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new SwitchedAccountAuthenticateResultModel();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"accessToken\"] = this.accessToken;\r\n data[\"encryptedAccessToken\"] = this.encryptedAccessToken;\r\n data[\"expireInSeconds\"] = this.expireInSeconds;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ISwitchedAccountAuthenticateResultModel {\r\n accessToken: string | undefined;\r\n encryptedAccessToken: string | undefined;\r\n expireInSeconds: number;\r\n}\r\n\r\nexport enum TemplateName {\r\n Default = 1,\r\n LM1 = 2,\r\n LM2 = 3,\r\n LM3 = 4,\r\n LM4 = 5,\r\n LM5 = 6,\r\n LM6 = 7,\r\n _Default = Default,\r\n _LM1 = LM1,\r\n _LM2 = LM2,\r\n _LM3 = LM3,\r\n _LM4 = LM4,\r\n _LM5 = LM5,\r\n _LM6 = LM6,\r\n}\r\n\r\nexport class TenantApplicationLanguageLookupTableDto implements ITenantApplicationLanguageLookupTableDto {\r\n id!: number;\r\n displayName!: string | undefined;\r\n\r\n constructor(data?: ITenantApplicationLanguageLookupTableDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantApplicationLanguageLookupTableDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantApplicationLanguageLookupTableDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantApplicationLanguageLookupTableDto {\r\n id: number;\r\n displayName: string | undefined;\r\n}\r\n\r\nexport enum TenantAvailabilityState {\r\n Available = 1,\r\n InActive = 2,\r\n NotFound = 3,\r\n _Available = Available,\r\n _InActive = InActive,\r\n _NotFound = NotFound,\r\n}\r\n\r\nexport class TenantBillingSettingsEditDto implements ITenantBillingSettingsEditDto {\r\n legalName!: string | undefined;\r\n address!: string | undefined;\r\n taxVatNo!: string | undefined;\r\n\r\n constructor(data?: ITenantBillingSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.legalName = _data[\"legalName\"];\r\n this.address = _data[\"address\"];\r\n this.taxVatNo = _data[\"taxVatNo\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantBillingSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantBillingSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"legalName\"] = this.legalName;\r\n data[\"address\"] = this.address;\r\n data[\"taxVatNo\"] = this.taxVatNo;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantBillingSettingsEditDto {\r\n legalName: string | undefined;\r\n address: string | undefined;\r\n taxVatNo: string | undefined;\r\n}\r\n\r\nexport class TenantEditDto implements ITenantEditDto {\r\n tenancyName!: string;\r\n name!: string;\r\n connectionString!: string | undefined;\r\n editionId!: number | undefined;\r\n tenantLanguageId!: number | undefined;\r\n isActive!: boolean;\r\n subscriptionEndDateUtc!: DateTime | undefined;\r\n isInTrialPeriod!: boolean;\r\n id!: number;\r\n\r\n constructor(data?: ITenantEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenancyName = _data[\"tenancyName\"];\r\n this.name = _data[\"name\"];\r\n this.connectionString = _data[\"connectionString\"];\r\n this.editionId = _data[\"editionId\"];\r\n this.tenantLanguageId = _data[\"tenantLanguageId\"];\r\n this.isActive = _data[\"isActive\"];\r\n this.subscriptionEndDateUtc = _data[\"subscriptionEndDateUtc\"] ? DateTime.fromISO(_data[\"subscriptionEndDateUtc\"].toString()) : undefined;\r\n this.isInTrialPeriod = _data[\"isInTrialPeriod\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenancyName\"] = this.tenancyName;\r\n data[\"name\"] = this.name;\r\n data[\"connectionString\"] = this.connectionString;\r\n data[\"editionId\"] = this.editionId;\r\n data[\"tenantLanguageId\"] = this.tenantLanguageId;\r\n data[\"isActive\"] = this.isActive;\r\n data[\"subscriptionEndDateUtc\"] = this.subscriptionEndDateUtc ? this.subscriptionEndDateUtc.toString() : undefined;\r\n data[\"isInTrialPeriod\"] = this.isInTrialPeriod;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantEditDto {\r\n tenancyName: string;\r\n name: string;\r\n connectionString: string | undefined;\r\n editionId: number | undefined;\r\n tenantLanguageId: number | undefined;\r\n isActive: boolean;\r\n subscriptionEndDateUtc: DateTime | undefined;\r\n isInTrialPeriod: boolean;\r\n id: number;\r\n}\r\n\r\nexport class TenantEdition implements ITenantEdition {\r\n label!: string | undefined;\r\n value!: number;\r\n\r\n constructor(data?: ITenantEdition) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.label = _data[\"label\"];\r\n this.value = _data[\"value\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantEdition {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantEdition();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"label\"] = this.label;\r\n data[\"value\"] = this.value;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantEdition {\r\n label: string | undefined;\r\n value: number;\r\n}\r\n\r\nexport class TenantEmailSettingsEditDto implements ITenantEmailSettingsEditDto {\r\n useHostDefaultEmailSettings!: boolean;\r\n defaultFromAddress!: string | undefined;\r\n defaultFromDisplayName!: string | undefined;\r\n smtpHost!: string | undefined;\r\n smtpPort!: number;\r\n smtpUserName!: string | undefined;\r\n smtpPassword!: string | undefined;\r\n smtpDomain!: string | undefined;\r\n smtpEnableSsl!: boolean;\r\n smtpUseDefaultCredentials!: boolean;\r\n\r\n constructor(data?: ITenantEmailSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.useHostDefaultEmailSettings = _data[\"useHostDefaultEmailSettings\"];\r\n this.defaultFromAddress = _data[\"defaultFromAddress\"];\r\n this.defaultFromDisplayName = _data[\"defaultFromDisplayName\"];\r\n this.smtpHost = _data[\"smtpHost\"];\r\n this.smtpPort = _data[\"smtpPort\"];\r\n this.smtpUserName = _data[\"smtpUserName\"];\r\n this.smtpPassword = _data[\"smtpPassword\"];\r\n this.smtpDomain = _data[\"smtpDomain\"];\r\n this.smtpEnableSsl = _data[\"smtpEnableSsl\"];\r\n this.smtpUseDefaultCredentials = _data[\"smtpUseDefaultCredentials\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantEmailSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantEmailSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"useHostDefaultEmailSettings\"] = this.useHostDefaultEmailSettings;\r\n data[\"defaultFromAddress\"] = this.defaultFromAddress;\r\n data[\"defaultFromDisplayName\"] = this.defaultFromDisplayName;\r\n data[\"smtpHost\"] = this.smtpHost;\r\n data[\"smtpPort\"] = this.smtpPort;\r\n data[\"smtpUserName\"] = this.smtpUserName;\r\n data[\"smtpPassword\"] = this.smtpPassword;\r\n data[\"smtpDomain\"] = this.smtpDomain;\r\n data[\"smtpEnableSsl\"] = this.smtpEnableSsl;\r\n data[\"smtpUseDefaultCredentials\"] = this.smtpUseDefaultCredentials;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantEmailSettingsEditDto {\r\n useHostDefaultEmailSettings: boolean;\r\n defaultFromAddress: string | undefined;\r\n defaultFromDisplayName: string | undefined;\r\n smtpHost: string | undefined;\r\n smtpPort: number;\r\n smtpUserName: string | undefined;\r\n smtpPassword: string | undefined;\r\n smtpDomain: string | undefined;\r\n smtpEnableSsl: boolean;\r\n smtpUseDefaultCredentials: boolean;\r\n}\r\n\r\nexport class TenantListDto implements ITenantListDto {\r\n tenancyName!: string | undefined;\r\n name!: string | undefined;\r\n editionDisplayName!: string | undefined;\r\n tenantLanguageName!: string | undefined;\r\n connectionString!: string | undefined;\r\n isActive!: boolean;\r\n creationTime!: DateTime;\r\n subscriptionEndDateUtc!: DateTime | undefined;\r\n editionId!: number | undefined;\r\n tenantLanguageId!: number | undefined;\r\n isInTrialPeriod!: boolean;\r\n id!: number;\r\n\r\n constructor(data?: ITenantListDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenancyName = _data[\"tenancyName\"];\r\n this.name = _data[\"name\"];\r\n this.editionDisplayName = _data[\"editionDisplayName\"];\r\n this.tenantLanguageName = _data[\"tenantLanguageName\"];\r\n this.connectionString = _data[\"connectionString\"];\r\n this.isActive = _data[\"isActive\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n this.subscriptionEndDateUtc = _data[\"subscriptionEndDateUtc\"] ? DateTime.fromISO(_data[\"subscriptionEndDateUtc\"].toString()) : undefined;\r\n this.editionId = _data[\"editionId\"];\r\n this.tenantLanguageId = _data[\"tenantLanguageId\"];\r\n this.isInTrialPeriod = _data[\"isInTrialPeriod\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantListDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantListDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenancyName\"] = this.tenancyName;\r\n data[\"name\"] = this.name;\r\n data[\"editionDisplayName\"] = this.editionDisplayName;\r\n data[\"tenantLanguageName\"] = this.tenantLanguageName;\r\n data[\"connectionString\"] = this.connectionString;\r\n data[\"isActive\"] = this.isActive;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n data[\"subscriptionEndDateUtc\"] = this.subscriptionEndDateUtc ? this.subscriptionEndDateUtc.toString() : undefined;\r\n data[\"editionId\"] = this.editionId;\r\n data[\"tenantLanguageId\"] = this.tenantLanguageId;\r\n data[\"isInTrialPeriod\"] = this.isInTrialPeriod;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantListDto {\r\n tenancyName: string | undefined;\r\n name: string | undefined;\r\n editionDisplayName: string | undefined;\r\n tenantLanguageName: string | undefined;\r\n connectionString: string | undefined;\r\n isActive: boolean;\r\n creationTime: DateTime;\r\n subscriptionEndDateUtc: DateTime | undefined;\r\n editionId: number | undefined;\r\n tenantLanguageId: number | undefined;\r\n isInTrialPeriod: boolean;\r\n id: number;\r\n}\r\n\r\nexport class TenantListDtoPagedResultDto implements ITenantListDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: TenantListDto[] | undefined;\r\n\r\n constructor(data?: ITenantListDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(TenantListDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantListDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantListDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantListDtoPagedResultDto {\r\n totalCount: number;\r\n items: TenantListDto[] | undefined;\r\n}\r\n\r\nexport class TenantLoginInfoDto implements ITenantLoginInfoDto {\r\n tenancyName!: string | undefined;\r\n name!: string | undefined;\r\n logoId!: string | undefined;\r\n logoFileType!: string | undefined;\r\n customCssId!: string | undefined;\r\n subscriptionEndDateUtc!: DateTime | undefined;\r\n isInTrialPeriod!: boolean;\r\n subscriptionPaymentType!: SubscriptionPaymentType;\r\n edition!: EditionInfoDto;\r\n featureValues!: NameValueDto[] | undefined;\r\n creationTime!: DateTime;\r\n paymentPeriodType!: PaymentPeriodType;\r\n subscriptionDateString!: string | undefined;\r\n creationTimeString!: string | undefined;\r\n languageName!: string | undefined;\r\n id!: number;\r\n\r\n constructor(data?: ITenantLoginInfoDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenancyName = _data[\"tenancyName\"];\r\n this.name = _data[\"name\"];\r\n this.logoId = _data[\"logoId\"];\r\n this.logoFileType = _data[\"logoFileType\"];\r\n this.customCssId = _data[\"customCssId\"];\r\n this.subscriptionEndDateUtc = _data[\"subscriptionEndDateUtc\"] ? DateTime.fromISO(_data[\"subscriptionEndDateUtc\"].toString()) : undefined;\r\n this.isInTrialPeriod = _data[\"isInTrialPeriod\"];\r\n this.subscriptionPaymentType = _data[\"subscriptionPaymentType\"];\r\n this.edition = _data[\"edition\"] ? EditionInfoDto.fromJS(_data[\"edition\"]) : undefined;\r\n if (Array.isArray(_data[\"featureValues\"])) {\r\n this.featureValues = [] as any;\r\n for (let item of _data[\"featureValues\"])\r\n this.featureValues!.push(NameValueDto.fromJS(item));\r\n }\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n this.paymentPeriodType = _data[\"paymentPeriodType\"];\r\n this.subscriptionDateString = _data[\"subscriptionDateString\"];\r\n this.creationTimeString = _data[\"creationTimeString\"];\r\n this.languageName = _data[\"languageName\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantLoginInfoDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantLoginInfoDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenancyName\"] = this.tenancyName;\r\n data[\"name\"] = this.name;\r\n data[\"logoId\"] = this.logoId;\r\n data[\"logoFileType\"] = this.logoFileType;\r\n data[\"customCssId\"] = this.customCssId;\r\n data[\"subscriptionEndDateUtc\"] = this.subscriptionEndDateUtc ? this.subscriptionEndDateUtc.toString() : undefined;\r\n data[\"isInTrialPeriod\"] = this.isInTrialPeriod;\r\n data[\"subscriptionPaymentType\"] = this.subscriptionPaymentType;\r\n data[\"edition\"] = this.edition ? this.edition.toJSON() : undefined;\r\n if (Array.isArray(this.featureValues)) {\r\n data[\"featureValues\"] = [];\r\n for (let item of this.featureValues)\r\n data[\"featureValues\"].push(item.toJSON());\r\n }\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n data[\"paymentPeriodType\"] = this.paymentPeriodType;\r\n data[\"subscriptionDateString\"] = this.subscriptionDateString;\r\n data[\"creationTimeString\"] = this.creationTimeString;\r\n data[\"languageName\"] = this.languageName;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantLoginInfoDto {\r\n tenancyName: string | undefined;\r\n name: string | undefined;\r\n logoId: string | undefined;\r\n logoFileType: string | undefined;\r\n customCssId: string | undefined;\r\n subscriptionEndDateUtc: DateTime | undefined;\r\n isInTrialPeriod: boolean;\r\n subscriptionPaymentType: SubscriptionPaymentType;\r\n edition: EditionInfoDto;\r\n featureValues: NameValueDto[] | undefined;\r\n creationTime: DateTime;\r\n paymentPeriodType: PaymentPeriodType;\r\n subscriptionDateString: string | undefined;\r\n creationTimeString: string | undefined;\r\n languageName: string | undefined;\r\n id: number;\r\n}\r\n\r\nexport class TenantManagementSettingsEditDto implements ITenantManagementSettingsEditDto {\r\n allowSelfRegistration!: boolean;\r\n isNewRegisteredTenantActiveByDefault!: boolean;\r\n useCaptchaOnRegistration!: boolean;\r\n defaultEditionId!: number | undefined;\r\n\r\n constructor(data?: ITenantManagementSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.allowSelfRegistration = _data[\"allowSelfRegistration\"];\r\n this.isNewRegisteredTenantActiveByDefault = _data[\"isNewRegisteredTenantActiveByDefault\"];\r\n this.useCaptchaOnRegistration = _data[\"useCaptchaOnRegistration\"];\r\n this.defaultEditionId = _data[\"defaultEditionId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantManagementSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantManagementSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"allowSelfRegistration\"] = this.allowSelfRegistration;\r\n data[\"isNewRegisteredTenantActiveByDefault\"] = this.isNewRegisteredTenantActiveByDefault;\r\n data[\"useCaptchaOnRegistration\"] = this.useCaptchaOnRegistration;\r\n data[\"defaultEditionId\"] = this.defaultEditionId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantManagementSettingsEditDto {\r\n allowSelfRegistration: boolean;\r\n isNewRegisteredTenantActiveByDefault: boolean;\r\n useCaptchaOnRegistration: boolean;\r\n defaultEditionId: number | undefined;\r\n}\r\n\r\nexport class TenantNotification implements ITenantNotification {\r\n tenantId!: number | undefined;\r\n notificationName!: string | undefined;\r\n data!: NotificationData;\r\n entityType!: string | undefined;\r\n entityTypeName!: string | undefined;\r\n entityId!: any | undefined;\r\n severity!: NotificationSeverity;\r\n creationTime!: DateTime;\r\n id!: string;\r\n\r\n constructor(data?: ITenantNotification) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenantId = _data[\"tenantId\"];\r\n this.notificationName = _data[\"notificationName\"];\r\n this.data = _data[\"data\"] ? NotificationData.fromJS(_data[\"data\"]) : undefined;\r\n this.entityType = _data[\"entityType\"];\r\n this.entityTypeName = _data[\"entityTypeName\"];\r\n this.entityId = _data[\"entityId\"];\r\n this.severity = _data[\"severity\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantNotification {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantNotification();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"notificationName\"] = this.notificationName;\r\n data[\"data\"] = this.data ? this.data.toJSON() : undefined;\r\n data[\"entityType\"] = this.entityType;\r\n data[\"entityTypeName\"] = this.entityTypeName;\r\n data[\"entityId\"] = this.entityId;\r\n data[\"severity\"] = this.severity;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantNotification {\r\n tenantId: number | undefined;\r\n notificationName: string | undefined;\r\n data: NotificationData;\r\n entityType: string | undefined;\r\n entityTypeName: string | undefined;\r\n entityId: any | undefined;\r\n severity: NotificationSeverity;\r\n creationTime: DateTime;\r\n id: string;\r\n}\r\n\r\nexport class TenantOtherSettingsEditDto implements ITenantOtherSettingsEditDto {\r\n isQuickThemeSelectEnabled!: boolean;\r\n\r\n constructor(data?: ITenantOtherSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.isQuickThemeSelectEnabled = _data[\"isQuickThemeSelectEnabled\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantOtherSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantOtherSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"isQuickThemeSelectEnabled\"] = this.isQuickThemeSelectEnabled;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantOtherSettingsEditDto {\r\n isQuickThemeSelectEnabled: boolean;\r\n}\r\n\r\nexport class TenantSettingsEditDto implements ITenantSettingsEditDto {\r\n general!: GeneralSettingsEditDto;\r\n userManagement!: TenantUserManagementSettingsEditDto;\r\n email!: TenantEmailSettingsEditDto;\r\n ldap!: LdapSettingsEditDto;\r\n security!: SecuritySettingsEditDto;\r\n billing!: TenantBillingSettingsEditDto;\r\n otherSettings!: TenantOtherSettingsEditDto;\r\n externalLoginProviderSettings!: ExternalLoginProviderSettingsEditDto;\r\n\r\n constructor(data?: ITenantSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.userManagement = new TenantUserManagementSettingsEditDto();\r\n this.security = new SecuritySettingsEditDto();\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.general = _data[\"general\"] ? GeneralSettingsEditDto.fromJS(_data[\"general\"]) : undefined;\r\n this.userManagement = _data[\"userManagement\"] ? TenantUserManagementSettingsEditDto.fromJS(_data[\"userManagement\"]) : new TenantUserManagementSettingsEditDto();\r\n this.email = _data[\"email\"] ? TenantEmailSettingsEditDto.fromJS(_data[\"email\"]) : undefined;\r\n this.ldap = _data[\"ldap\"] ? LdapSettingsEditDto.fromJS(_data[\"ldap\"]) : undefined;\r\n this.security = _data[\"security\"] ? SecuritySettingsEditDto.fromJS(_data[\"security\"]) : new SecuritySettingsEditDto();\r\n this.billing = _data[\"billing\"] ? TenantBillingSettingsEditDto.fromJS(_data[\"billing\"]) : undefined;\r\n this.otherSettings = _data[\"otherSettings\"] ? TenantOtherSettingsEditDto.fromJS(_data[\"otherSettings\"]) : undefined;\r\n this.externalLoginProviderSettings = _data[\"externalLoginProviderSettings\"] ? ExternalLoginProviderSettingsEditDto.fromJS(_data[\"externalLoginProviderSettings\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"general\"] = this.general ? this.general.toJSON() : undefined;\r\n data[\"userManagement\"] = this.userManagement ? this.userManagement.toJSON() : undefined;\r\n data[\"email\"] = this.email ? this.email.toJSON() : undefined;\r\n data[\"ldap\"] = this.ldap ? this.ldap.toJSON() : undefined;\r\n data[\"security\"] = this.security ? this.security.toJSON() : undefined;\r\n data[\"billing\"] = this.billing ? this.billing.toJSON() : undefined;\r\n data[\"otherSettings\"] = this.otherSettings ? this.otherSettings.toJSON() : undefined;\r\n data[\"externalLoginProviderSettings\"] = this.externalLoginProviderSettings ? this.externalLoginProviderSettings.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantSettingsEditDto {\r\n general: GeneralSettingsEditDto;\r\n userManagement: TenantUserManagementSettingsEditDto;\r\n email: TenantEmailSettingsEditDto;\r\n ldap: LdapSettingsEditDto;\r\n security: SecuritySettingsEditDto;\r\n billing: TenantBillingSettingsEditDto;\r\n otherSettings: TenantOtherSettingsEditDto;\r\n externalLoginProviderSettings: ExternalLoginProviderSettingsEditDto;\r\n}\r\n\r\nexport class TenantUserManagementSettingsEditDto implements ITenantUserManagementSettingsEditDto {\r\n allowSelfRegistration!: boolean;\r\n isNewRegisteredUserActiveByDefault!: boolean;\r\n isEmailConfirmationRequiredForLogin!: boolean;\r\n useCaptchaOnRegistration!: boolean;\r\n useCaptchaOnLogin!: boolean;\r\n isCookieConsentEnabled!: boolean;\r\n isQuickThemeSelectEnabled!: boolean;\r\n allowUsingGravatarProfilePicture!: boolean;\r\n sessionTimeOutSettings!: SessionTimeOutSettingsEditDto;\r\n\r\n constructor(data?: ITenantUserManagementSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.allowSelfRegistration = _data[\"allowSelfRegistration\"];\r\n this.isNewRegisteredUserActiveByDefault = _data[\"isNewRegisteredUserActiveByDefault\"];\r\n this.isEmailConfirmationRequiredForLogin = _data[\"isEmailConfirmationRequiredForLogin\"];\r\n this.useCaptchaOnRegistration = _data[\"useCaptchaOnRegistration\"];\r\n this.useCaptchaOnLogin = _data[\"useCaptchaOnLogin\"];\r\n this.isCookieConsentEnabled = _data[\"isCookieConsentEnabled\"];\r\n this.isQuickThemeSelectEnabled = _data[\"isQuickThemeSelectEnabled\"];\r\n this.allowUsingGravatarProfilePicture = _data[\"allowUsingGravatarProfilePicture\"];\r\n this.sessionTimeOutSettings = _data[\"sessionTimeOutSettings\"] ? SessionTimeOutSettingsEditDto.fromJS(_data[\"sessionTimeOutSettings\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantUserManagementSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantUserManagementSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"allowSelfRegistration\"] = this.allowSelfRegistration;\r\n data[\"isNewRegisteredUserActiveByDefault\"] = this.isNewRegisteredUserActiveByDefault;\r\n data[\"isEmailConfirmationRequiredForLogin\"] = this.isEmailConfirmationRequiredForLogin;\r\n data[\"useCaptchaOnRegistration\"] = this.useCaptchaOnRegistration;\r\n data[\"useCaptchaOnLogin\"] = this.useCaptchaOnLogin;\r\n data[\"isCookieConsentEnabled\"] = this.isCookieConsentEnabled;\r\n data[\"isQuickThemeSelectEnabled\"] = this.isQuickThemeSelectEnabled;\r\n data[\"allowUsingGravatarProfilePicture\"] = this.allowUsingGravatarProfilePicture;\r\n data[\"sessionTimeOutSettings\"] = this.sessionTimeOutSettings ? this.sessionTimeOutSettings.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantUserManagementSettingsEditDto {\r\n allowSelfRegistration: boolean;\r\n isNewRegisteredUserActiveByDefault: boolean;\r\n isEmailConfirmationRequiredForLogin: boolean;\r\n useCaptchaOnRegistration: boolean;\r\n useCaptchaOnLogin: boolean;\r\n isCookieConsentEnabled: boolean;\r\n isQuickThemeSelectEnabled: boolean;\r\n allowUsingGravatarProfilePicture: boolean;\r\n sessionTimeOutSettings: SessionTimeOutSettingsEditDto;\r\n}\r\n\r\nexport class TenantsNameListDto implements ITenantsNameListDto {\r\n tenancyName!: string | undefined;\r\n id!: number;\r\n\r\n constructor(data?: ITenantsNameListDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenancyName = _data[\"tenancyName\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TenantsNameListDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TenantsNameListDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenancyName\"] = this.tenancyName;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITenantsNameListDto {\r\n tenancyName: string | undefined;\r\n id: number;\r\n}\r\n\r\nexport class ThemeFooterSettingsDto implements IThemeFooterSettingsDto {\r\n fixedFooter!: boolean;\r\n\r\n constructor(data?: IThemeFooterSettingsDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.fixedFooter = _data[\"fixedFooter\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ThemeFooterSettingsDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ThemeFooterSettingsDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"fixedFooter\"] = this.fixedFooter;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IThemeFooterSettingsDto {\r\n fixedFooter: boolean;\r\n}\r\n\r\nexport class ThemeHeaderSettingsDto implements IThemeHeaderSettingsDto {\r\n readonly desktopFixedHeader!: boolean;\r\n readonly mobileFixedHeader!: boolean;\r\n minimizeDesktopHeaderType!: string | undefined;\r\n\r\n constructor(data?: IThemeHeaderSettingsDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n (this).desktopFixedHeader = _data[\"desktopFixedHeader\"];\r\n (this).mobileFixedHeader = _data[\"mobileFixedHeader\"];\r\n this.minimizeDesktopHeaderType = _data[\"minimizeDesktopHeaderType\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ThemeHeaderSettingsDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ThemeHeaderSettingsDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"desktopFixedHeader\"] = this.desktopFixedHeader;\r\n data[\"mobileFixedHeader\"] = this.mobileFixedHeader;\r\n data[\"minimizeDesktopHeaderType\"] = this.minimizeDesktopHeaderType;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IThemeHeaderSettingsDto {\r\n desktopFixedHeader: boolean;\r\n mobileFixedHeader: boolean;\r\n minimizeDesktopHeaderType: string | undefined;\r\n}\r\n\r\nexport class ThemeLayoutSettingsDto implements IThemeLayoutSettingsDto {\r\n layoutType!: string | undefined;\r\n darkMode!: boolean;\r\n\r\n constructor(data?: IThemeLayoutSettingsDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.layoutType = _data[\"layoutType\"];\r\n this.darkMode = _data[\"darkMode\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ThemeLayoutSettingsDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ThemeLayoutSettingsDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"layoutType\"] = this.layoutType;\r\n data[\"darkMode\"] = this.darkMode;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IThemeLayoutSettingsDto {\r\n layoutType: string | undefined;\r\n darkMode: boolean;\r\n}\r\n\r\nexport class ThemeMenuSettingsDto implements IThemeMenuSettingsDto {\r\n position!: string | undefined;\r\n asideSkin!: string | undefined;\r\n fixedAside!: boolean;\r\n allowAsideMinimizing!: boolean;\r\n defaultMinimizedAside!: boolean;\r\n submenuToggle!: string | undefined;\r\n searchActive!: boolean;\r\n enableSecondary!: boolean;\r\n hoverableAside!: boolean;\r\n\r\n constructor(data?: IThemeMenuSettingsDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.position = _data[\"position\"];\r\n this.asideSkin = _data[\"asideSkin\"];\r\n this.fixedAside = _data[\"fixedAside\"];\r\n this.allowAsideMinimizing = _data[\"allowAsideMinimizing\"];\r\n this.defaultMinimizedAside = _data[\"defaultMinimizedAside\"];\r\n this.submenuToggle = _data[\"submenuToggle\"];\r\n this.searchActive = _data[\"searchActive\"];\r\n this.enableSecondary = _data[\"enableSecondary\"];\r\n this.hoverableAside = _data[\"hoverableAside\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ThemeMenuSettingsDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ThemeMenuSettingsDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"position\"] = this.position;\r\n data[\"asideSkin\"] = this.asideSkin;\r\n data[\"fixedAside\"] = this.fixedAside;\r\n data[\"allowAsideMinimizing\"] = this.allowAsideMinimizing;\r\n data[\"defaultMinimizedAside\"] = this.defaultMinimizedAside;\r\n data[\"submenuToggle\"] = this.submenuToggle;\r\n data[\"searchActive\"] = this.searchActive;\r\n data[\"enableSecondary\"] = this.enableSecondary;\r\n data[\"hoverableAside\"] = this.hoverableAside;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IThemeMenuSettingsDto {\r\n position: string | undefined;\r\n asideSkin: string | undefined;\r\n fixedAside: boolean;\r\n allowAsideMinimizing: boolean;\r\n defaultMinimizedAside: boolean;\r\n submenuToggle: string | undefined;\r\n searchActive: boolean;\r\n enableSecondary: boolean;\r\n hoverableAside: boolean;\r\n}\r\n\r\nexport class ThemeSettingsDto implements IThemeSettingsDto {\r\n theme!: string | undefined;\r\n layout!: ThemeLayoutSettingsDto;\r\n header!: ThemeHeaderSettingsDto;\r\n subHeader!: ThemeSubHeaderSettingsDto;\r\n menu!: ThemeMenuSettingsDto;\r\n footer!: ThemeFooterSettingsDto;\r\n\r\n constructor(data?: IThemeSettingsDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.theme = _data[\"theme\"];\r\n this.layout = _data[\"layout\"] ? ThemeLayoutSettingsDto.fromJS(_data[\"layout\"]) : undefined;\r\n this.header = _data[\"header\"] ? ThemeHeaderSettingsDto.fromJS(_data[\"header\"]) : undefined;\r\n this.subHeader = _data[\"subHeader\"] ? ThemeSubHeaderSettingsDto.fromJS(_data[\"subHeader\"]) : undefined;\r\n this.menu = _data[\"menu\"] ? ThemeMenuSettingsDto.fromJS(_data[\"menu\"]) : undefined;\r\n this.footer = _data[\"footer\"] ? ThemeFooterSettingsDto.fromJS(_data[\"footer\"]) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): ThemeSettingsDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ThemeSettingsDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"theme\"] = this.theme;\r\n data[\"layout\"] = this.layout ? this.layout.toJSON() : undefined;\r\n data[\"header\"] = this.header ? this.header.toJSON() : undefined;\r\n data[\"subHeader\"] = this.subHeader ? this.subHeader.toJSON() : undefined;\r\n data[\"menu\"] = this.menu ? this.menu.toJSON() : undefined;\r\n data[\"footer\"] = this.footer ? this.footer.toJSON() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IThemeSettingsDto {\r\n theme: string | undefined;\r\n layout: ThemeLayoutSettingsDto;\r\n header: ThemeHeaderSettingsDto;\r\n subHeader: ThemeSubHeaderSettingsDto;\r\n menu: ThemeMenuSettingsDto;\r\n footer: ThemeFooterSettingsDto;\r\n}\r\n\r\nexport class ThemeSubHeaderSettingsDto implements IThemeSubHeaderSettingsDto {\r\n fixedSubHeader!: boolean;\r\n subheaderStyle!: string | undefined;\r\n subheaderSize!: number;\r\n titleStyle!: string | undefined;\r\n containerStyle!: string | undefined;\r\n subContainerStyle!: string | undefined;\r\n\r\n constructor(data?: IThemeSubHeaderSettingsDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.fixedSubHeader = _data[\"fixedSubHeader\"];\r\n this.subheaderStyle = _data[\"subheaderStyle\"];\r\n this.subheaderSize = _data[\"subheaderSize\"];\r\n this.titleStyle = _data[\"titleStyle\"];\r\n this.containerStyle = _data[\"containerStyle\"];\r\n this.subContainerStyle = _data[\"subContainerStyle\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): ThemeSubHeaderSettingsDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new ThemeSubHeaderSettingsDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"fixedSubHeader\"] = this.fixedSubHeader;\r\n data[\"subheaderStyle\"] = this.subheaderStyle;\r\n data[\"subheaderSize\"] = this.subheaderSize;\r\n data[\"titleStyle\"] = this.titleStyle;\r\n data[\"containerStyle\"] = this.containerStyle;\r\n data[\"subContainerStyle\"] = this.subContainerStyle;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IThemeSubHeaderSettingsDto {\r\n fixedSubHeader: boolean;\r\n subheaderStyle: string | undefined;\r\n subheaderSize: number;\r\n titleStyle: string | undefined;\r\n containerStyle: string | undefined;\r\n subContainerStyle: string | undefined;\r\n}\r\n\r\nexport class TopStatsData implements ITopStatsData {\r\n newTenantsCount!: number;\r\n newSubscriptionAmount!: number;\r\n dashboardPlaceholder1!: number;\r\n dashboardPlaceholder2!: number;\r\n\r\n constructor(data?: ITopStatsData) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.newTenantsCount = _data[\"newTenantsCount\"];\r\n this.newSubscriptionAmount = _data[\"newSubscriptionAmount\"];\r\n this.dashboardPlaceholder1 = _data[\"dashboardPlaceholder1\"];\r\n this.dashboardPlaceholder2 = _data[\"dashboardPlaceholder2\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TopStatsData {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TopStatsData();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"newTenantsCount\"] = this.newTenantsCount;\r\n data[\"newSubscriptionAmount\"] = this.newSubscriptionAmount;\r\n data[\"dashboardPlaceholder1\"] = this.dashboardPlaceholder1;\r\n data[\"dashboardPlaceholder2\"] = this.dashboardPlaceholder2;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITopStatsData {\r\n newTenantsCount: number;\r\n newSubscriptionAmount: number;\r\n dashboardPlaceholder1: number;\r\n dashboardPlaceholder2: number;\r\n}\r\n\r\nexport class TwitterExternalLoginProviderSettings implements ITwitterExternalLoginProviderSettings {\r\n consumerKey!: string | undefined;\r\n consumerSecret!: string | undefined;\r\n\r\n constructor(data?: ITwitterExternalLoginProviderSettings) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.consumerKey = _data[\"consumerKey\"];\r\n this.consumerSecret = _data[\"consumerSecret\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TwitterExternalLoginProviderSettings {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TwitterExternalLoginProviderSettings();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"consumerKey\"] = this.consumerKey;\r\n data[\"consumerSecret\"] = this.consumerSecret;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITwitterExternalLoginProviderSettings {\r\n consumerKey: string | undefined;\r\n consumerSecret: string | undefined;\r\n}\r\n\r\nexport class TwitterGetAccessTokenResponse implements ITwitterGetAccessTokenResponse {\r\n accessToken!: string | undefined;\r\n accessTokenSecret!: string | undefined;\r\n userId!: string | undefined;\r\n userName!: string | undefined;\r\n\r\n constructor(data?: ITwitterGetAccessTokenResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.accessToken = _data[\"accessToken\"];\r\n this.accessTokenSecret = _data[\"accessTokenSecret\"];\r\n this.userId = _data[\"userId\"];\r\n this.userName = _data[\"userName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TwitterGetAccessTokenResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TwitterGetAccessTokenResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"accessToken\"] = this.accessToken;\r\n data[\"accessTokenSecret\"] = this.accessTokenSecret;\r\n data[\"userId\"] = this.userId;\r\n data[\"userName\"] = this.userName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITwitterGetAccessTokenResponse {\r\n accessToken: string | undefined;\r\n accessTokenSecret: string | undefined;\r\n userId: string | undefined;\r\n userName: string | undefined;\r\n}\r\n\r\nexport class TwitterGetRequestTokenResponse implements ITwitterGetRequestTokenResponse {\r\n token!: string | undefined;\r\n secret!: string | undefined;\r\n confirmed!: boolean;\r\n redirectUrl!: string | undefined;\r\n\r\n constructor(data?: ITwitterGetRequestTokenResponse) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.token = _data[\"token\"];\r\n this.secret = _data[\"secret\"];\r\n this.confirmed = _data[\"confirmed\"];\r\n this.redirectUrl = _data[\"redirectUrl\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TwitterGetRequestTokenResponse {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TwitterGetRequestTokenResponse();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"token\"] = this.token;\r\n data[\"secret\"] = this.secret;\r\n data[\"confirmed\"] = this.confirmed;\r\n data[\"redirectUrl\"] = this.redirectUrl;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITwitterGetRequestTokenResponse {\r\n token: string | undefined;\r\n secret: string | undefined;\r\n confirmed: boolean;\r\n redirectUrl: string | undefined;\r\n}\r\n\r\nexport class TwoFactorLoginSettingsEditDto implements ITwoFactorLoginSettingsEditDto {\r\n isEnabledForApplication!: boolean;\r\n isEnabled!: boolean;\r\n isEmailProviderEnabled!: boolean;\r\n isSmsProviderEnabled!: boolean;\r\n isRememberBrowserEnabled!: boolean;\r\n isGoogleAuthenticatorEnabled!: boolean;\r\n\r\n constructor(data?: ITwoFactorLoginSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.isEnabledForApplication = _data[\"isEnabledForApplication\"];\r\n this.isEnabled = _data[\"isEnabled\"];\r\n this.isEmailProviderEnabled = _data[\"isEmailProviderEnabled\"];\r\n this.isSmsProviderEnabled = _data[\"isSmsProviderEnabled\"];\r\n this.isRememberBrowserEnabled = _data[\"isRememberBrowserEnabled\"];\r\n this.isGoogleAuthenticatorEnabled = _data[\"isGoogleAuthenticatorEnabled\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): TwoFactorLoginSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new TwoFactorLoginSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"isEnabledForApplication\"] = this.isEnabledForApplication;\r\n data[\"isEnabled\"] = this.isEnabled;\r\n data[\"isEmailProviderEnabled\"] = this.isEmailProviderEnabled;\r\n data[\"isSmsProviderEnabled\"] = this.isSmsProviderEnabled;\r\n data[\"isRememberBrowserEnabled\"] = this.isRememberBrowserEnabled;\r\n data[\"isGoogleAuthenticatorEnabled\"] = this.isGoogleAuthenticatorEnabled;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface ITwoFactorLoginSettingsEditDto {\r\n isEnabledForApplication: boolean;\r\n isEnabled: boolean;\r\n isEmailProviderEnabled: boolean;\r\n isSmsProviderEnabled: boolean;\r\n isRememberBrowserEnabled: boolean;\r\n isGoogleAuthenticatorEnabled: boolean;\r\n}\r\n\r\nexport class UiCustomizationSettingsDto implements IUiCustomizationSettingsDto {\r\n baseSettings!: ThemeSettingsDto;\r\n isLeftMenuUsed!: boolean;\r\n isTopMenuUsed!: boolean;\r\n isTabMenuUsed!: boolean;\r\n allowMenuScroll!: boolean;\r\n\r\n constructor(data?: IUiCustomizationSettingsDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.baseSettings = _data[\"baseSettings\"] ? ThemeSettingsDto.fromJS(_data[\"baseSettings\"]) : undefined;\r\n this.isLeftMenuUsed = _data[\"isLeftMenuUsed\"];\r\n this.isTopMenuUsed = _data[\"isTopMenuUsed\"];\r\n this.isTabMenuUsed = _data[\"isTabMenuUsed\"];\r\n this.allowMenuScroll = _data[\"allowMenuScroll\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UiCustomizationSettingsDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UiCustomizationSettingsDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"baseSettings\"] = this.baseSettings ? this.baseSettings.toJSON() : undefined;\r\n data[\"isLeftMenuUsed\"] = this.isLeftMenuUsed;\r\n data[\"isTopMenuUsed\"] = this.isTopMenuUsed;\r\n data[\"isTabMenuUsed\"] = this.isTabMenuUsed;\r\n data[\"allowMenuScroll\"] = this.allowMenuScroll;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUiCustomizationSettingsDto {\r\n baseSettings: ThemeSettingsDto;\r\n isLeftMenuUsed: boolean;\r\n isTopMenuUsed: boolean;\r\n isTabMenuUsed: boolean;\r\n allowMenuScroll: boolean;\r\n}\r\n\r\nexport class UnblockUserInput implements IUnblockUserInput {\r\n userId!: number;\r\n tenantId!: number | undefined;\r\n\r\n constructor(data?: IUnblockUserInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"];\r\n this.tenantId = _data[\"tenantId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UnblockUserInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UnblockUserInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId;\r\n data[\"tenantId\"] = this.tenantId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUnblockUserInput {\r\n userId: number;\r\n tenantId: number | undefined;\r\n}\r\n\r\nexport class UnlinkUserInput implements IUnlinkUserInput {\r\n tenantId!: number | undefined;\r\n userId!: number;\r\n\r\n constructor(data?: IUnlinkUserInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenantId = _data[\"tenantId\"];\r\n this.userId = _data[\"userId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UnlinkUserInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UnlinkUserInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"userId\"] = this.userId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUnlinkUserInput {\r\n tenantId: number | undefined;\r\n userId: number;\r\n}\r\n\r\nexport class UpdateEditionDto implements IUpdateEditionDto {\r\n edition!: EditionEditDto;\r\n featureValues!: NameValueDto[];\r\n\r\n constructor(data?: IUpdateEditionDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.edition = new EditionEditDto();\r\n this.featureValues = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.edition = _data[\"edition\"] ? EditionEditDto.fromJS(_data[\"edition\"]) : new EditionEditDto();\r\n if (Array.isArray(_data[\"featureValues\"])) {\r\n this.featureValues = [] as any;\r\n for (let item of _data[\"featureValues\"])\r\n this.featureValues!.push(NameValueDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): UpdateEditionDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UpdateEditionDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"edition\"] = this.edition ? this.edition.toJSON() : undefined;\r\n if (Array.isArray(this.featureValues)) {\r\n data[\"featureValues\"] = [];\r\n for (let item of this.featureValues)\r\n data[\"featureValues\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUpdateEditionDto {\r\n edition: EditionEditDto;\r\n featureValues: NameValueDto[];\r\n}\r\n\r\nexport class UpdateGoogleAuthenticatorKeyOutput implements IUpdateGoogleAuthenticatorKeyOutput {\r\n qrCodeSetupImageUrl!: string | undefined;\r\n\r\n constructor(data?: IUpdateGoogleAuthenticatorKeyOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.qrCodeSetupImageUrl = _data[\"qrCodeSetupImageUrl\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UpdateGoogleAuthenticatorKeyOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UpdateGoogleAuthenticatorKeyOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"qrCodeSetupImageUrl\"] = this.qrCodeSetupImageUrl;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUpdateGoogleAuthenticatorKeyOutput {\r\n qrCodeSetupImageUrl: string | undefined;\r\n}\r\n\r\nexport class UpdateLanguageTextInput implements IUpdateLanguageTextInput {\r\n languageName!: string;\r\n sourceName!: string;\r\n key!: string;\r\n value!: string;\r\n\r\n constructor(data?: IUpdateLanguageTextInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.languageName = _data[\"languageName\"];\r\n this.sourceName = _data[\"sourceName\"];\r\n this.key = _data[\"key\"];\r\n this.value = _data[\"value\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UpdateLanguageTextInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UpdateLanguageTextInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"languageName\"] = this.languageName;\r\n data[\"sourceName\"] = this.sourceName;\r\n data[\"key\"] = this.key;\r\n data[\"value\"] = this.value;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUpdateLanguageTextInput {\r\n languageName: string;\r\n sourceName: string;\r\n key: string;\r\n value: string;\r\n}\r\n\r\nexport class UpdateNotificationSettingsInput implements IUpdateNotificationSettingsInput {\r\n receiveNotifications!: boolean;\r\n notifications!: NotificationSubscriptionDto[] | undefined;\r\n\r\n constructor(data?: IUpdateNotificationSettingsInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.receiveNotifications = _data[\"receiveNotifications\"];\r\n if (Array.isArray(_data[\"notifications\"])) {\r\n this.notifications = [] as any;\r\n for (let item of _data[\"notifications\"])\r\n this.notifications!.push(NotificationSubscriptionDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): UpdateNotificationSettingsInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UpdateNotificationSettingsInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"receiveNotifications\"] = this.receiveNotifications;\r\n if (Array.isArray(this.notifications)) {\r\n data[\"notifications\"] = [];\r\n for (let item of this.notifications)\r\n data[\"notifications\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUpdateNotificationSettingsInput {\r\n receiveNotifications: boolean;\r\n notifications: NotificationSubscriptionDto[] | undefined;\r\n}\r\n\r\nexport class UpdateOrganizationUnitInput implements IUpdateOrganizationUnitInput {\r\n id!: number;\r\n displayName!: string;\r\n\r\n constructor(data?: IUpdateOrganizationUnitInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.displayName = _data[\"displayName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UpdateOrganizationUnitInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UpdateOrganizationUnitInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"displayName\"] = this.displayName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUpdateOrganizationUnitInput {\r\n id: number;\r\n displayName: string;\r\n}\r\n\r\nexport class UpdateOvalsOrderDto implements IUpdateOvalsOrderDto {\r\n id!: number;\r\n dropIndex!: number;\r\n\r\n constructor(data?: IUpdateOvalsOrderDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.dropIndex = _data[\"dropIndex\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UpdateOvalsOrderDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UpdateOvalsOrderDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"dropIndex\"] = this.dropIndex;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUpdateOvalsOrderDto {\r\n id: number;\r\n dropIndex: number;\r\n}\r\n\r\nexport class UpdateProfilePictureInput implements IUpdateProfilePictureInput {\r\n fileToken!: string | undefined;\r\n useGravatarProfilePicture!: boolean;\r\n userId!: number | undefined;\r\n\r\n constructor(data?: IUpdateProfilePictureInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.fileToken = _data[\"fileToken\"];\r\n this.useGravatarProfilePicture = _data[\"useGravatarProfilePicture\"];\r\n this.userId = _data[\"userId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UpdateProfilePictureInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UpdateProfilePictureInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"fileToken\"] = this.fileToken;\r\n data[\"useGravatarProfilePicture\"] = this.useGravatarProfilePicture;\r\n data[\"userId\"] = this.userId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUpdateProfilePictureInput {\r\n fileToken: string | undefined;\r\n useGravatarProfilePicture: boolean;\r\n userId: number | undefined;\r\n}\r\n\r\nexport class UpdateTenantFeaturesInput implements IUpdateTenantFeaturesInput {\r\n id!: number;\r\n featureValues!: NameValueDto[];\r\n\r\n constructor(data?: IUpdateTenantFeaturesInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.featureValues = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n if (Array.isArray(_data[\"featureValues\"])) {\r\n this.featureValues = [] as any;\r\n for (let item of _data[\"featureValues\"])\r\n this.featureValues!.push(NameValueDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): UpdateTenantFeaturesInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UpdateTenantFeaturesInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n if (Array.isArray(this.featureValues)) {\r\n data[\"featureValues\"] = [];\r\n for (let item of this.featureValues)\r\n data[\"featureValues\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUpdateTenantFeaturesInput {\r\n id: number;\r\n featureValues: NameValueDto[];\r\n}\r\n\r\nexport class UpdateUserPermissionsInput implements IUpdateUserPermissionsInput {\r\n id!: number;\r\n grantedPermissionNames!: string[];\r\n\r\n constructor(data?: IUpdateUserPermissionsInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n if (!data) {\r\n this.grantedPermissionNames = [];\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n if (Array.isArray(_data[\"grantedPermissionNames\"])) {\r\n this.grantedPermissionNames = [] as any;\r\n for (let item of _data[\"grantedPermissionNames\"])\r\n this.grantedPermissionNames!.push(item);\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): UpdateUserPermissionsInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UpdateUserPermissionsInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n if (Array.isArray(this.grantedPermissionNames)) {\r\n data[\"grantedPermissionNames\"] = [];\r\n for (let item of this.grantedPermissionNames)\r\n data[\"grantedPermissionNames\"].push(item);\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUpdateUserPermissionsInput {\r\n id: number;\r\n grantedPermissionNames: string[];\r\n}\r\n\r\nexport class UpdateUserSignInTokenOutput implements IUpdateUserSignInTokenOutput {\r\n signInToken!: string | undefined;\r\n encodedUserId!: string | undefined;\r\n encodedTenantId!: string | undefined;\r\n\r\n constructor(data?: IUpdateUserSignInTokenOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.signInToken = _data[\"signInToken\"];\r\n this.encodedUserId = _data[\"encodedUserId\"];\r\n this.encodedTenantId = _data[\"encodedTenantId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UpdateUserSignInTokenOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UpdateUserSignInTokenOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"signInToken\"] = this.signInToken;\r\n data[\"encodedUserId\"] = this.encodedUserId;\r\n data[\"encodedTenantId\"] = this.encodedTenantId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUpdateUserSignInTokenOutput {\r\n signInToken: string | undefined;\r\n encodedUserId: string | undefined;\r\n encodedTenantId: string | undefined;\r\n}\r\n\r\nexport class UserDelegationDto implements IUserDelegationDto {\r\n username!: string | undefined;\r\n startTime!: DateTime;\r\n endTime!: DateTime;\r\n id!: number;\r\n\r\n constructor(data?: IUserDelegationDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.username = _data[\"username\"];\r\n this.startTime = _data[\"startTime\"] ? DateTime.fromISO(_data[\"startTime\"].toString()) : undefined;\r\n this.endTime = _data[\"endTime\"] ? DateTime.fromISO(_data[\"endTime\"].toString()) : undefined;\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserDelegationDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserDelegationDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"username\"] = this.username;\r\n data[\"startTime\"] = this.startTime ? this.startTime.toString() : undefined;\r\n data[\"endTime\"] = this.endTime ? this.endTime.toString() : undefined;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserDelegationDto {\r\n username: string | undefined;\r\n startTime: DateTime;\r\n endTime: DateTime;\r\n id: number;\r\n}\r\n\r\nexport class UserDelegationDtoPagedResultDto implements IUserDelegationDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: UserDelegationDto[] | undefined;\r\n\r\n constructor(data?: IUserDelegationDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(UserDelegationDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserDelegationDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserDelegationDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserDelegationDtoPagedResultDto {\r\n totalCount: number;\r\n items: UserDelegationDto[] | undefined;\r\n}\r\n\r\nexport class UserEditDto implements IUserEditDto {\r\n id!: number | undefined;\r\n name!: string;\r\n surname!: string;\r\n userName!: string;\r\n emailAddress!: string;\r\n phoneNumber!: string | undefined;\r\n password!: string | undefined;\r\n isActive!: boolean;\r\n shouldChangePasswordOnNextLogin!: boolean;\r\n isTwoFactorEnabled!: boolean;\r\n isLockoutEnabled!: boolean;\r\n\r\n constructor(data?: IUserEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.name = _data[\"name\"];\r\n this.surname = _data[\"surname\"];\r\n this.userName = _data[\"userName\"];\r\n this.emailAddress = _data[\"emailAddress\"];\r\n this.phoneNumber = _data[\"phoneNumber\"];\r\n this.password = _data[\"password\"];\r\n this.isActive = _data[\"isActive\"];\r\n this.shouldChangePasswordOnNextLogin = _data[\"shouldChangePasswordOnNextLogin\"];\r\n this.isTwoFactorEnabled = _data[\"isTwoFactorEnabled\"];\r\n this.isLockoutEnabled = _data[\"isLockoutEnabled\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"name\"] = this.name;\r\n data[\"surname\"] = this.surname;\r\n data[\"userName\"] = this.userName;\r\n data[\"emailAddress\"] = this.emailAddress;\r\n data[\"phoneNumber\"] = this.phoneNumber;\r\n data[\"password\"] = this.password;\r\n data[\"isActive\"] = this.isActive;\r\n data[\"shouldChangePasswordOnNextLogin\"] = this.shouldChangePasswordOnNextLogin;\r\n data[\"isTwoFactorEnabled\"] = this.isTwoFactorEnabled;\r\n data[\"isLockoutEnabled\"] = this.isLockoutEnabled;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserEditDto {\r\n id: number | undefined;\r\n name: string;\r\n surname: string;\r\n userName: string;\r\n emailAddress: string;\r\n phoneNumber: string | undefined;\r\n password: string | undefined;\r\n isActive: boolean;\r\n shouldChangePasswordOnNextLogin: boolean;\r\n isTwoFactorEnabled: boolean;\r\n isLockoutEnabled: boolean;\r\n}\r\n\r\nexport class UserListDto implements IUserListDto {\r\n name!: string | undefined;\r\n surname!: string | undefined;\r\n userName!: string | undefined;\r\n emailAddress!: string | undefined;\r\n birthDate!: DateTime | undefined;\r\n gender!: GenderType;\r\n lockoutEndDateUtc!: DateTime | undefined;\r\n phoneNumber!: string | undefined;\r\n profilePictureId!: string | undefined;\r\n isEmailConfirmed!: boolean;\r\n roles!: UserListRoleDto[] | undefined;\r\n isActive!: boolean;\r\n creationTime!: DateTime;\r\n id!: number;\r\n\r\n constructor(data?: IUserListDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.surname = _data[\"surname\"];\r\n this.userName = _data[\"userName\"];\r\n this.emailAddress = _data[\"emailAddress\"];\r\n this.birthDate = _data[\"birthDate\"] ? DateTime.fromISO(_data[\"birthDate\"].toString()) : undefined;\r\n this.gender = _data[\"gender\"];\r\n this.lockoutEndDateUtc = _data[\"lockoutEndDateUtc\"] ? DateTime.fromISO(_data[\"lockoutEndDateUtc\"].toString()) : undefined;\r\n this.phoneNumber = _data[\"phoneNumber\"];\r\n this.profilePictureId = _data[\"profilePictureId\"];\r\n this.isEmailConfirmed = _data[\"isEmailConfirmed\"];\r\n if (Array.isArray(_data[\"roles\"])) {\r\n this.roles = [] as any;\r\n for (let item of _data[\"roles\"])\r\n this.roles!.push(UserListRoleDto.fromJS(item));\r\n }\r\n this.isActive = _data[\"isActive\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserListDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserListDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"surname\"] = this.surname;\r\n data[\"userName\"] = this.userName;\r\n data[\"emailAddress\"] = this.emailAddress;\r\n data[\"birthDate\"] = this.birthDate ? this.birthDate.toString() : undefined;\r\n data[\"gender\"] = this.gender;\r\n data[\"lockoutEndDateUtc\"] = this.lockoutEndDateUtc ? this.lockoutEndDateUtc.toString() : undefined;\r\n data[\"phoneNumber\"] = this.phoneNumber;\r\n data[\"profilePictureId\"] = this.profilePictureId;\r\n data[\"isEmailConfirmed\"] = this.isEmailConfirmed;\r\n if (Array.isArray(this.roles)) {\r\n data[\"roles\"] = [];\r\n for (let item of this.roles)\r\n data[\"roles\"].push(item.toJSON());\r\n }\r\n data[\"isActive\"] = this.isActive;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserListDto {\r\n name: string | undefined;\r\n surname: string | undefined;\r\n userName: string | undefined;\r\n emailAddress: string | undefined;\r\n birthDate: DateTime | undefined;\r\n gender: GenderType;\r\n lockoutEndDateUtc: DateTime | undefined;\r\n phoneNumber: string | undefined;\r\n profilePictureId: string | undefined;\r\n isEmailConfirmed: boolean;\r\n roles: UserListRoleDto[] | undefined;\r\n isActive: boolean;\r\n creationTime: DateTime;\r\n id: number;\r\n}\r\n\r\nexport class UserListDtoPagedResultDto implements IUserListDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: UserListDto[] | undefined;\r\n\r\n constructor(data?: IUserListDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(UserListDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserListDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserListDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserListDtoPagedResultDto {\r\n totalCount: number;\r\n items: UserListDto[] | undefined;\r\n}\r\n\r\nexport class UserListRoleDto implements IUserListRoleDto {\r\n roleId!: number;\r\n roleName!: string | undefined;\r\n\r\n constructor(data?: IUserListRoleDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.roleId = _data[\"roleId\"];\r\n this.roleName = _data[\"roleName\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserListRoleDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserListRoleDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"roleId\"] = this.roleId;\r\n data[\"roleName\"] = this.roleName;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserListRoleDto {\r\n roleId: number;\r\n roleName: string | undefined;\r\n}\r\n\r\nexport class UserLockOutSettingsEditDto implements IUserLockOutSettingsEditDto {\r\n isEnabled!: boolean;\r\n maxFailedAccessAttemptsBeforeLockout!: number;\r\n defaultAccountLockoutSeconds!: number;\r\n\r\n constructor(data?: IUserLockOutSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.isEnabled = _data[\"isEnabled\"];\r\n this.maxFailedAccessAttemptsBeforeLockout = _data[\"maxFailedAccessAttemptsBeforeLockout\"];\r\n this.defaultAccountLockoutSeconds = _data[\"defaultAccountLockoutSeconds\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserLockOutSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserLockOutSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"isEnabled\"] = this.isEnabled;\r\n data[\"maxFailedAccessAttemptsBeforeLockout\"] = this.maxFailedAccessAttemptsBeforeLockout;\r\n data[\"defaultAccountLockoutSeconds\"] = this.defaultAccountLockoutSeconds;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserLockOutSettingsEditDto {\r\n isEnabled: boolean;\r\n maxFailedAccessAttemptsBeforeLockout: number;\r\n defaultAccountLockoutSeconds: number;\r\n}\r\n\r\nexport class UserLoginAttemptDto implements IUserLoginAttemptDto {\r\n tenancyName!: string | undefined;\r\n userNameOrEmail!: string | undefined;\r\n clientIpAddress!: string | undefined;\r\n clientName!: string | undefined;\r\n browserInfo!: string | undefined;\r\n result!: string | undefined;\r\n creationTime!: DateTime;\r\n\r\n constructor(data?: IUserLoginAttemptDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenancyName = _data[\"tenancyName\"];\r\n this.userNameOrEmail = _data[\"userNameOrEmail\"];\r\n this.clientIpAddress = _data[\"clientIpAddress\"];\r\n this.clientName = _data[\"clientName\"];\r\n this.browserInfo = _data[\"browserInfo\"];\r\n this.result = _data[\"result\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserLoginAttemptDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserLoginAttemptDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenancyName\"] = this.tenancyName;\r\n data[\"userNameOrEmail\"] = this.userNameOrEmail;\r\n data[\"clientIpAddress\"] = this.clientIpAddress;\r\n data[\"clientName\"] = this.clientName;\r\n data[\"browserInfo\"] = this.browserInfo;\r\n data[\"result\"] = this.result;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserLoginAttemptDto {\r\n tenancyName: string | undefined;\r\n userNameOrEmail: string | undefined;\r\n clientIpAddress: string | undefined;\r\n clientName: string | undefined;\r\n browserInfo: string | undefined;\r\n result: string | undefined;\r\n creationTime: DateTime;\r\n}\r\n\r\nexport class UserLoginAttemptDtoPagedResultDto implements IUserLoginAttemptDtoPagedResultDto {\r\n totalCount!: number;\r\n items!: UserLoginAttemptDto[] | undefined;\r\n\r\n constructor(data?: IUserLoginAttemptDtoPagedResultDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.totalCount = _data[\"totalCount\"];\r\n if (Array.isArray(_data[\"items\"])) {\r\n this.items = [] as any;\r\n for (let item of _data[\"items\"])\r\n this.items!.push(UserLoginAttemptDto.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserLoginAttemptDtoPagedResultDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserLoginAttemptDtoPagedResultDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"totalCount\"] = this.totalCount;\r\n if (Array.isArray(this.items)) {\r\n data[\"items\"] = [];\r\n for (let item of this.items)\r\n data[\"items\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserLoginAttemptDtoPagedResultDto {\r\n totalCount: number;\r\n items: UserLoginAttemptDto[] | undefined;\r\n}\r\n\r\nexport class UserLoginInfoDto implements IUserLoginInfoDto {\r\n name!: string | undefined;\r\n surname!: string | undefined;\r\n userName!: string | undefined;\r\n emailAddress!: string | undefined;\r\n profilePictureId!: string | undefined;\r\n easilyLoggedIn!: boolean;\r\n id!: number;\r\n\r\n constructor(data?: IUserLoginInfoDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.surname = _data[\"surname\"];\r\n this.userName = _data[\"userName\"];\r\n this.emailAddress = _data[\"emailAddress\"];\r\n this.profilePictureId = _data[\"profilePictureId\"];\r\n this.easilyLoggedIn = _data[\"easilyLoggedIn\"];\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserLoginInfoDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserLoginInfoDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"surname\"] = this.surname;\r\n data[\"userName\"] = this.userName;\r\n data[\"emailAddress\"] = this.emailAddress;\r\n data[\"profilePictureId\"] = this.profilePictureId;\r\n data[\"easilyLoggedIn\"] = this.easilyLoggedIn;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserLoginInfoDto {\r\n name: string | undefined;\r\n surname: string | undefined;\r\n userName: string | undefined;\r\n emailAddress: string | undefined;\r\n profilePictureId: string | undefined;\r\n easilyLoggedIn: boolean;\r\n id: number;\r\n}\r\n\r\nexport class UserLoginInputDto implements IUserLoginInputDto {\r\n name!: string | undefined;\r\n surname!: string | undefined;\r\n\r\n constructor(data?: IUserLoginInputDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.surname = _data[\"surname\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserLoginInputDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserLoginInputDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"surname\"] = this.surname;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserLoginInputDto {\r\n name: string | undefined;\r\n surname: string | undefined;\r\n}\r\n\r\nexport class UserLoginOutputDto implements IUserLoginOutputDto {\r\n name!: string | undefined;\r\n surname!: string | undefined;\r\n\r\n constructor(data?: IUserLoginOutputDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.name = _data[\"name\"];\r\n this.surname = _data[\"surname\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserLoginOutputDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserLoginOutputDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"name\"] = this.name;\r\n data[\"surname\"] = this.surname;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserLoginOutputDto {\r\n name: string | undefined;\r\n surname: string | undefined;\r\n}\r\n\r\nexport class UserNotification implements IUserNotification {\r\n tenantId!: number | undefined;\r\n userId!: number;\r\n state!: UserNotificationState;\r\n notification!: TenantNotification;\r\n targetNotifiers!: string | undefined;\r\n readonly targetNotifiersList!: string[] | undefined;\r\n id!: string;\r\n\r\n constructor(data?: IUserNotification) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenantId = _data[\"tenantId\"];\r\n this.userId = _data[\"userId\"];\r\n this.state = _data[\"state\"];\r\n this.notification = _data[\"notification\"] ? TenantNotification.fromJS(_data[\"notification\"]) : undefined;\r\n this.targetNotifiers = _data[\"targetNotifiers\"];\r\n if (Array.isArray(_data[\"targetNotifiersList\"])) {\r\n (this).targetNotifiersList = [] as any;\r\n for (let item of _data[\"targetNotifiersList\"])\r\n (this).targetNotifiersList!.push(item);\r\n }\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserNotification {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserNotification();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"userId\"] = this.userId;\r\n data[\"state\"] = this.state;\r\n data[\"notification\"] = this.notification ? this.notification.toJSON() : undefined;\r\n data[\"targetNotifiers\"] = this.targetNotifiers;\r\n if (Array.isArray(this.targetNotifiersList)) {\r\n data[\"targetNotifiersList\"] = [];\r\n for (let item of this.targetNotifiersList)\r\n data[\"targetNotifiersList\"].push(item);\r\n }\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserNotification {\r\n tenantId: number | undefined;\r\n userId: number;\r\n state: UserNotificationState;\r\n notification: TenantNotification;\r\n targetNotifiers: string | undefined;\r\n targetNotifiersList: string[] | undefined;\r\n id: string;\r\n}\r\n\r\nexport enum UserNotificationState {\r\n Unread = 0,\r\n Read = 1,\r\n _Unread = Unread,\r\n _Read = Read,\r\n}\r\n\r\nexport class UserPasswordSettingsEditDto implements IUserPasswordSettingsEditDto {\r\n enableCheckingLastXPasswordWhenPasswordChange!: boolean;\r\n checkingLastXPasswordCount!: number;\r\n enablePasswordExpiration!: boolean;\r\n passwordExpirationDayCount!: number;\r\n passwordResetCodeExpirationHours!: number;\r\n\r\n constructor(data?: IUserPasswordSettingsEditDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.enableCheckingLastXPasswordWhenPasswordChange = _data[\"enableCheckingLastXPasswordWhenPasswordChange\"];\r\n this.checkingLastXPasswordCount = _data[\"checkingLastXPasswordCount\"];\r\n this.enablePasswordExpiration = _data[\"enablePasswordExpiration\"];\r\n this.passwordExpirationDayCount = _data[\"passwordExpirationDayCount\"];\r\n this.passwordResetCodeExpirationHours = _data[\"passwordResetCodeExpirationHours\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserPasswordSettingsEditDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserPasswordSettingsEditDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"enableCheckingLastXPasswordWhenPasswordChange\"] = this.enableCheckingLastXPasswordWhenPasswordChange;\r\n data[\"checkingLastXPasswordCount\"] = this.checkingLastXPasswordCount;\r\n data[\"enablePasswordExpiration\"] = this.enablePasswordExpiration;\r\n data[\"passwordExpirationDayCount\"] = this.passwordExpirationDayCount;\r\n data[\"passwordResetCodeExpirationHours\"] = this.passwordResetCodeExpirationHours;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserPasswordSettingsEditDto {\r\n enableCheckingLastXPasswordWhenPasswordChange: boolean;\r\n checkingLastXPasswordCount: number;\r\n enablePasswordExpiration: boolean;\r\n passwordExpirationDayCount: number;\r\n passwordResetCodeExpirationHours: number;\r\n}\r\n\r\nexport class UserRoleDto implements IUserRoleDto {\r\n roleId!: number;\r\n roleName!: string | undefined;\r\n roleDisplayName!: string | undefined;\r\n isAssigned!: boolean;\r\n inheritedFromOrganizationUnit!: boolean;\r\n\r\n constructor(data?: IUserRoleDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.roleId = _data[\"roleId\"];\r\n this.roleName = _data[\"roleName\"];\r\n this.roleDisplayName = _data[\"roleDisplayName\"];\r\n this.isAssigned = _data[\"isAssigned\"];\r\n this.inheritedFromOrganizationUnit = _data[\"inheritedFromOrganizationUnit\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserRoleDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserRoleDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"roleId\"] = this.roleId;\r\n data[\"roleName\"] = this.roleName;\r\n data[\"roleDisplayName\"] = this.roleDisplayName;\r\n data[\"isAssigned\"] = this.isAssigned;\r\n data[\"inheritedFromOrganizationUnit\"] = this.inheritedFromOrganizationUnit;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserRoleDto {\r\n roleId: number;\r\n roleName: string | undefined;\r\n roleDisplayName: string | undefined;\r\n isAssigned: boolean;\r\n inheritedFromOrganizationUnit: boolean;\r\n}\r\n\r\nexport class UserSubmitedFeedbackDto implements IUserSubmitedFeedbackDto {\r\n userId!: string | undefined;\r\n episodeId!: string | undefined;\r\n\r\n constructor(data?: IUserSubmitedFeedbackDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.userId = _data[\"userId\"];\r\n this.episodeId = _data[\"episodeId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UserSubmitedFeedbackDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UserSubmitedFeedbackDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"userId\"] = this.userId;\r\n data[\"episodeId\"] = this.episodeId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUserSubmitedFeedbackDto {\r\n userId: string | undefined;\r\n episodeId: string | undefined;\r\n}\r\n\r\nexport class UsersToOrganizationUnitInput implements IUsersToOrganizationUnitInput {\r\n userIds!: number[] | undefined;\r\n organizationUnitId!: number;\r\n\r\n constructor(data?: IUsersToOrganizationUnitInput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n if (Array.isArray(_data[\"userIds\"])) {\r\n this.userIds = [] as any;\r\n for (let item of _data[\"userIds\"])\r\n this.userIds!.push(item);\r\n }\r\n this.organizationUnitId = _data[\"organizationUnitId\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): UsersToOrganizationUnitInput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new UsersToOrganizationUnitInput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n if (Array.isArray(this.userIds)) {\r\n data[\"userIds\"] = [];\r\n for (let item of this.userIds)\r\n data[\"userIds\"].push(item);\r\n }\r\n data[\"organizationUnitId\"] = this.organizationUnitId;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IUsersToOrganizationUnitInput {\r\n userIds: number[] | undefined;\r\n organizationUnitId: number;\r\n}\r\n\r\nexport class VerifySmsCodeInputDto implements IVerifySmsCodeInputDto {\r\n code!: string | undefined;\r\n phoneNumber!: string | undefined;\r\n\r\n constructor(data?: IVerifySmsCodeInputDto) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.code = _data[\"code\"];\r\n this.phoneNumber = _data[\"phoneNumber\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): VerifySmsCodeInputDto {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new VerifySmsCodeInputDto();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"code\"] = this.code;\r\n data[\"phoneNumber\"] = this.phoneNumber;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IVerifySmsCodeInputDto {\r\n code: string | undefined;\r\n phoneNumber: string | undefined;\r\n}\r\n\r\nexport class WebhookEvent implements IWebhookEvent {\r\n webhookName!: string;\r\n data!: string | undefined;\r\n creationTime!: DateTime;\r\n tenantId!: number | undefined;\r\n isDeleted!: boolean;\r\n deletionTime!: DateTime | undefined;\r\n id!: string;\r\n\r\n constructor(data?: IWebhookEvent) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.webhookName = _data[\"webhookName\"];\r\n this.data = _data[\"data\"];\r\n this.creationTime = _data[\"creationTime\"] ? DateTime.fromISO(_data[\"creationTime\"].toString()) : undefined;\r\n this.tenantId = _data[\"tenantId\"];\r\n this.isDeleted = _data[\"isDeleted\"];\r\n this.deletionTime = _data[\"deletionTime\"] ? DateTime.fromISO(_data[\"deletionTime\"].toString()) : undefined;\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): WebhookEvent {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new WebhookEvent();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"webhookName\"] = this.webhookName;\r\n data[\"data\"] = this.data;\r\n data[\"creationTime\"] = this.creationTime ? this.creationTime.toString() : undefined;\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"isDeleted\"] = this.isDeleted;\r\n data[\"deletionTime\"] = this.deletionTime ? this.deletionTime.toString() : undefined;\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IWebhookEvent {\r\n webhookName: string;\r\n data: string | undefined;\r\n creationTime: DateTime;\r\n tenantId: number | undefined;\r\n isDeleted: boolean;\r\n deletionTime: DateTime | undefined;\r\n id: string;\r\n}\r\n\r\nexport class WebhookSubscription implements IWebhookSubscription {\r\n tenantId!: number | undefined;\r\n webhookUri!: string | undefined;\r\n secret!: string | undefined;\r\n isActive!: boolean;\r\n webhooks!: string[] | undefined;\r\n headers!: { [key: string]: string; } | undefined;\r\n id!: string;\r\n\r\n constructor(data?: IWebhookSubscription) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.tenantId = _data[\"tenantId\"];\r\n this.webhookUri = _data[\"webhookUri\"];\r\n this.secret = _data[\"secret\"];\r\n this.isActive = _data[\"isActive\"];\r\n if (Array.isArray(_data[\"webhooks\"])) {\r\n this.webhooks = [] as any;\r\n for (let item of _data[\"webhooks\"])\r\n this.webhooks!.push(item);\r\n }\r\n if (_data[\"headers\"]) {\r\n this.headers = {} as any;\r\n for (let key in _data[\"headers\"]) {\r\n if (_data[\"headers\"].hasOwnProperty(key))\r\n (this.headers)![key] = _data[\"headers\"][key];\r\n }\r\n }\r\n this.id = _data[\"id\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): WebhookSubscription {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new WebhookSubscription();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"tenantId\"] = this.tenantId;\r\n data[\"webhookUri\"] = this.webhookUri;\r\n data[\"secret\"] = this.secret;\r\n data[\"isActive\"] = this.isActive;\r\n if (Array.isArray(this.webhooks)) {\r\n data[\"webhooks\"] = [];\r\n for (let item of this.webhooks)\r\n data[\"webhooks\"].push(item);\r\n }\r\n if (this.headers) {\r\n data[\"headers\"] = {};\r\n for (let key in this.headers) {\r\n if (this.headers.hasOwnProperty(key))\r\n (data[\"headers\"])[key] = (this.headers)[key];\r\n }\r\n }\r\n data[\"id\"] = this.id;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IWebhookSubscription {\r\n tenantId: number | undefined;\r\n webhookUri: string | undefined;\r\n secret: string | undefined;\r\n isActive: boolean;\r\n webhooks: string[] | undefined;\r\n headers: { [key: string]: string; } | undefined;\r\n id: string;\r\n}\r\n\r\nexport class Widget implements IWidget {\r\n widgetId!: string | undefined;\r\n height!: number;\r\n width!: number;\r\n positionX!: number;\r\n positionY!: number;\r\n\r\n constructor(data?: IWidget) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.widgetId = _data[\"widgetId\"];\r\n this.height = _data[\"height\"];\r\n this.width = _data[\"width\"];\r\n this.positionX = _data[\"positionX\"];\r\n this.positionY = _data[\"positionY\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): Widget {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new Widget();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"widgetId\"] = this.widgetId;\r\n data[\"height\"] = this.height;\r\n data[\"width\"] = this.width;\r\n data[\"positionX\"] = this.positionX;\r\n data[\"positionY\"] = this.positionY;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IWidget {\r\n widgetId: string | undefined;\r\n height: number;\r\n width: number;\r\n positionX: number;\r\n positionY: number;\r\n}\r\n\r\nexport class WidgetFilterOutput implements IWidgetFilterOutput {\r\n id!: string | undefined;\r\n name!: string | undefined;\r\n\r\n constructor(data?: IWidgetFilterOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.name = _data[\"name\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): WidgetFilterOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new WidgetFilterOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"name\"] = this.name;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IWidgetFilterOutput {\r\n id: string | undefined;\r\n name: string | undefined;\r\n}\r\n\r\nexport class WidgetOutput implements IWidgetOutput {\r\n id!: string | undefined;\r\n name!: string | undefined;\r\n description!: string | undefined;\r\n filters!: WidgetFilterOutput[] | undefined;\r\n\r\n constructor(data?: IWidgetOutput) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.id = _data[\"id\"];\r\n this.name = _data[\"name\"];\r\n this.description = _data[\"description\"];\r\n if (Array.isArray(_data[\"filters\"])) {\r\n this.filters = [] as any;\r\n for (let item of _data[\"filters\"])\r\n this.filters!.push(WidgetFilterOutput.fromJS(item));\r\n }\r\n }\r\n }\r\n\r\n static fromJS(data: any): WidgetOutput {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new WidgetOutput();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"id\"] = this.id;\r\n data[\"name\"] = this.name;\r\n data[\"description\"] = this.description;\r\n if (Array.isArray(this.filters)) {\r\n data[\"filters\"] = [];\r\n for (let item of this.filters)\r\n data[\"filters\"].push(item.toJSON());\r\n }\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IWidgetOutput {\r\n id: string | undefined;\r\n name: string | undefined;\r\n description: string | undefined;\r\n filters: WidgetFilterOutput[] | undefined;\r\n}\r\n\r\nexport class WsFederationExternalLoginProviderSettings implements IWsFederationExternalLoginProviderSettings {\r\n clientId!: string | undefined;\r\n tenant!: string | undefined;\r\n metaDataAddress!: string | undefined;\r\n wtrealm!: string | undefined;\r\n authority!: string | undefined;\r\n\r\n constructor(data?: IWsFederationExternalLoginProviderSettings) {\r\n if (data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property))\r\n (this)[property] = (data)[property];\r\n }\r\n }\r\n }\r\n\r\n init(_data?: any) {\r\n if (_data) {\r\n this.clientId = _data[\"clientId\"];\r\n this.tenant = _data[\"tenant\"];\r\n this.metaDataAddress = _data[\"metaDataAddress\"];\r\n this.wtrealm = _data[\"wtrealm\"];\r\n this.authority = _data[\"authority\"];\r\n }\r\n }\r\n\r\n static fromJS(data: any): WsFederationExternalLoginProviderSettings {\r\n data = typeof data === 'object' ? data : {};\r\n let result = new WsFederationExternalLoginProviderSettings();\r\n result.init(data);\r\n return result;\r\n }\r\n\r\n toJSON(data?: any) {\r\n data = typeof data === 'object' ? data : {};\r\n data[\"clientId\"] = this.clientId;\r\n data[\"tenant\"] = this.tenant;\r\n data[\"metaDataAddress\"] = this.metaDataAddress;\r\n data[\"wtrealm\"] = this.wtrealm;\r\n data[\"authority\"] = this.authority;\r\n return data;\r\n }\r\n}\r\n\r\nexport interface IWsFederationExternalLoginProviderSettings {\r\n clientId: string | undefined;\r\n tenant: string | undefined;\r\n metaDataAddress: string | undefined;\r\n wtrealm: string | undefined;\r\n authority: string | undefined;\r\n}\r\n\r\nexport class ApiException extends Error {\r\n override message: string;\r\n status: number;\r\n response: string;\r\n headers: { [key: string]: any; };\r\n result: any;\r\n\r\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\r\n super();\r\n\r\n this.message = message;\r\n this.status = status;\r\n this.response = response;\r\n this.headers = headers;\r\n this.result = result;\r\n }\r\n\r\n protected isApiException = true;\r\n\r\n static isApiException(obj: any): obj is ApiException {\r\n return obj.isApiException === true;\r\n }\r\n}\r\n\r\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): Observable {\r\n if (result !== null && result !== undefined)\r\n return _observableThrow(result);\r\n else\r\n return _observableThrow(new ApiException(message, status, response, headers, null));\r\n}\r\n\r\nfunction blobToText(blob: any): Observable {\r\n return new Observable((observer: any) => {\r\n if (!blob) {\r\n observer.next(\"\");\r\n observer.complete();\r\n } else {\r\n let reader = new FileReader();\r\n reader.onload = event => {\r\n observer.next((event.target as any).result);\r\n observer.complete();\r\n };\r\n reader.readAsText(blob);\r\n }\r\n });\r\n}","import { Injectable } from '@angular/core';\r\nimport { TokenService, RefreshTokenService } from 'abp-ng2-module';\r\nimport { TokenAuthServiceProxy, RefreshTokenResult } from '@shared/service-proxies/service-proxies';\r\nimport { Observable, Subject, of } from 'rxjs';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { LocalStorageService } from '@shared/utils/local-storage.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ZeroRefreshTokenService implements RefreshTokenService {\r\n constructor(\r\n private _tokenAuthService: TokenAuthServiceProxy,\r\n private _tokenService: TokenService,\r\n private _localStorageService: LocalStorageService\r\n ) {}\r\n\r\n tryAuthWithRefreshToken(): Observable {\r\n let refreshTokenObservable = new Subject();\r\n\r\n let token = this._tokenService.getRefreshToken();\r\n if (!token || token.trim() === '') {\r\n return of(false);\r\n }\r\n\r\n this._tokenAuthService.refreshToken(token).subscribe(\r\n (tokenResult: RefreshTokenResult) => {\r\n if (tokenResult && tokenResult.accessToken) {\r\n let tokenExpireDate = new Date(new Date().getTime() + 1000 * tokenResult.expireInSeconds);\r\n this._tokenService.setToken(tokenResult.accessToken, tokenExpireDate);\r\n\r\n this._localStorageService.setItem(AppConsts.authorization.encrptedAuthTokenName, {\r\n token: tokenResult.encryptedAccessToken,\r\n expireDate: tokenExpireDate,\r\n });\r\n\r\n refreshTokenObservable.next(true);\r\n } else {\r\n refreshTokenObservable.next(false);\r\n }\r\n },\r\n (error: any) => {\r\n refreshTokenObservable.next(false);\r\n }\r\n );\r\n return refreshTokenObservable;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AbpHttpConfigurationService, LogService, MessageService } from 'abp-ng2-module';\r\nimport { Router } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ZeroTemplateHttpConfigurationService extends AbpHttpConfigurationService {\r\n constructor(messageService: MessageService, logService: LogService, private _route: Router) {\r\n super(messageService, logService);\r\n }\r\n\r\n // Override handleUnAuthorizedRequest so it doesn't refresh the page during failed login attempts.\r\n handleUnAuthorizedRequest(messagePromise: any, targetUrl?: string) {\r\n if (this.shouldIgnoreUnAuthorizedRequest()) {\r\n return;\r\n }\r\n\r\n const self = this;\r\n\r\n if (messagePromise) {\r\n messagePromise.done(() => {\r\n this.handleTargetUrl(targetUrl || '/');\r\n });\r\n } else {\r\n self.handleTargetUrl(targetUrl || '/');\r\n }\r\n }\r\n\r\n private _ignoreUnAuthorizedUrls = [\r\n '/account/login',\r\n '/account/easy-login',\r\n '/account/session-locked',\r\n '/app/home'\r\n ];\r\n private shouldIgnoreUnAuthorizedRequest(): boolean{\r\n const url = this._route.url;\r\n if (!url){\r\n return false;\r\n }\r\n\r\n for (var i = 0; i< this._ignoreUnAuthorizedUrls.length; ++i){\r\n const ignoreUnAuthorizedUrl = this._ignoreUnAuthorizedUrls[i];\r\n if (url.startsWith(ignoreUnAuthorizedUrl)){\r\n return true;\r\n } \r\n }\r\n return false;\r\n }\r\n}\r\n","import { AbpHttpInterceptor, RefreshTokenService, AbpHttpConfigurationService } from 'abp-ng2-module';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport * as ApiServiceProxies from './service-proxies';\r\nimport { ZeroRefreshTokenService } from '@account/auth/zero-refresh-token.service';\r\nimport { ZeroTemplateHttpConfigurationService } from './zero-template-http-configuration.service';\r\n\r\n@NgModule({\r\n providers: [\r\n ApiServiceProxies.CustomAudioForEpisodesServiceProxy, \r\n ApiServiceProxies.EpisodeVideosServiceProxy, \r\n ApiServiceProxies.DifficultyLevelsServiceProxy, \r\n ApiServiceProxies.EpisodeOvalsServiceProxy, \r\n ApiServiceProxies.OvalsServiceProxy, \r\n ApiServiceProxies.EpisodeUsersServiceProxy, \r\n ApiServiceProxies.StorageServiceServiceProxy, \r\n ApiServiceProxies.EpisodesServiceProxy, \r\n ApiServiceProxies.AuditLogServiceProxy,\r\n ApiServiceProxies.CachingServiceProxy,\r\n ApiServiceProxies.ChatServiceProxy,\r\n ApiServiceProxies.CommonLookupServiceProxy,\r\n ApiServiceProxies.EditionServiceProxy,\r\n ApiServiceProxies.FriendshipServiceProxy,\r\n ApiServiceProxies.HostSettingsServiceProxy,\r\n ApiServiceProxies.InstallServiceProxy,\r\n ApiServiceProxies.LanguageServiceProxy,\r\n ApiServiceProxies.NotificationServiceProxy,\r\n ApiServiceProxies.OrganizationUnitServiceProxy,\r\n ApiServiceProxies.PermissionServiceProxy,\r\n ApiServiceProxies.ProfileServiceProxy,\r\n ApiServiceProxies.RoleServiceProxy,\r\n ApiServiceProxies.SessionServiceProxy,\r\n ApiServiceProxies.TenantServiceProxy,\r\n ApiServiceProxies.TenantDashboardServiceProxy,\r\n ApiServiceProxies.TenantSettingsServiceProxy,\r\n ApiServiceProxies.TimingServiceProxy,\r\n ApiServiceProxies.UserServiceProxy,\r\n ApiServiceProxies.UserLinkServiceProxy,\r\n ApiServiceProxies.UserLoginServiceProxy,\r\n ApiServiceProxies.WebLogServiceProxy,\r\n ApiServiceProxies.AccountServiceProxy,\r\n ApiServiceProxies.TokenAuthServiceProxy,\r\n ApiServiceProxies.TenantRegistrationServiceProxy,\r\n ApiServiceProxies.HostDashboardServiceProxy,\r\n ApiServiceProxies.PaymentServiceProxy,\r\n ApiServiceProxies.DemoUiComponentsServiceProxy,\r\n ApiServiceProxies.InvoiceServiceProxy,\r\n ApiServiceProxies.SubscriptionServiceProxy,\r\n ApiServiceProxies.InstallServiceProxy,\r\n ApiServiceProxies.UiCustomizationSettingsServiceProxy,\r\n ApiServiceProxies.PayPalPaymentServiceProxy,\r\n ApiServiceProxies.StripePaymentServiceProxy,\r\n ApiServiceProxies.DashboardCustomizationServiceProxy,\r\n ApiServiceProxies.WebhookEventServiceProxy,\r\n ApiServiceProxies.WebhookSubscriptionServiceProxy,\r\n ApiServiceProxies.WebhookSendAttemptServiceProxy,\r\n ApiServiceProxies.UserDelegationServiceProxy,\r\n ApiServiceProxies.DynamicPropertyServiceProxy,\r\n ApiServiceProxies.DynamicEntityPropertyDefinitionServiceProxy,\r\n ApiServiceProxies.DynamicEntityPropertyServiceProxy,\r\n ApiServiceProxies.DynamicPropertyValueServiceProxy,\r\n ApiServiceProxies.DynamicEntityPropertyValueServiceProxy,\r\n ApiServiceProxies.TwitterServiceProxy,\r\n { provide: RefreshTokenService, useClass: ZeroRefreshTokenService },\r\n { provide: AbpHttpConfigurationService, useClass: ZeroTemplateHttpConfigurationService },\r\n { provide: HTTP_INTERCEPTORS, useClass: AbpHttpInterceptor, multi: true },\r\n ],\r\n})\r\nexport class ServiceProxyModule {}\r\n","import { Injectable } from '@angular/core';\r\nimport { filter as _filter, forEach as _forEach } from 'lodash-es';\r\n\r\n@Injectable()\r\nexport class ArrayToTreeConverterService {\r\n createTree(\r\n array: any[],\r\n parentIdProperty,\r\n idProperty,\r\n parentIdValue,\r\n childrenProperty: string,\r\n fieldMappings\r\n ): any {\r\n let tree = [];\r\n\r\n let nodes = _filter(array, [parentIdProperty, parentIdValue]);\r\n\r\n _forEach(nodes, (node) => {\r\n let newNode = {\r\n data: node,\r\n };\r\n\r\n this.mapFields(node, newNode, fieldMappings);\r\n\r\n newNode[childrenProperty] = this.createTree(\r\n array,\r\n parentIdProperty,\r\n idProperty,\r\n node[idProperty],\r\n childrenProperty,\r\n fieldMappings\r\n );\r\n\r\n tree.push(newNode);\r\n });\r\n\r\n return tree;\r\n }\r\n\r\n mapFields(node, newNode, fieldMappings): void {\r\n _forEach(fieldMappings, (fieldMapping) => {\r\n if (!fieldMapping['target']) {\r\n return;\r\n }\r\n\r\n if (fieldMapping.hasOwnProperty('value')) {\r\n newNode[fieldMapping['target']] = fieldMapping['value'];\r\n } else if (fieldMapping['source']) {\r\n newNode[fieldMapping['target']] = node[fieldMapping['source']];\r\n } else if (fieldMapping['targetFunction']) {\r\n newNode[fieldMapping['target']] = fieldMapping['targetFunction'](node);\r\n }\r\n });\r\n }\r\n}\r\n","import { AfterViewInit, Directive, ElementRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[autoFocus]',\r\n})\r\nexport class AutoFocusDirective implements AfterViewInit {\r\n constructor(private _element: ElementRef) {}\r\n\r\n ngAfterViewInit(): void {\r\n this._element.nativeElement.focus();\r\n }\r\n}\r\n","import {\r\n Directive,\r\n Input,\r\n ComponentFactoryResolver,\r\n ViewContainerRef,\r\n Injector,\r\n SimpleChanges,\r\n OnChanges,\r\n} from '@angular/core';\r\nimport { NgxSpinnerService, NgxSpinnerComponent } from 'ngx-spinner';\r\n\r\n@Directive({\r\n selector: '[busyIf]',\r\n})\r\nexport class BusyIfDirective implements OnChanges {\r\n private static index = 0;\r\n\r\n @Input() busyIf: boolean;\r\n\r\n ngxSpinnerService: NgxSpinnerService;\r\n isBusy = false;\r\n\r\n private spinnerName = '';\r\n\r\n constructor(\r\n private _viewContainer: ViewContainerRef,\r\n private _componentFactoryResolver: ComponentFactoryResolver,\r\n private _injector: Injector\r\n ) {\r\n this.ngxSpinnerService = _injector.get(NgxSpinnerService);\r\n this.loadComponent();\r\n }\r\n\r\n\r\n refreshState(): void {\r\n if (this.isBusy === undefined || this.spinnerName === '') {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n if (this.isBusy) {\r\n this.ngxSpinnerService.show(this.spinnerName);\r\n } else {\r\n this.ngxSpinnerService.hide(this.spinnerName);\r\n }\r\n }, 1000);\r\n }\r\n\r\n loadComponent() {\r\n const componentFactory = this._componentFactoryResolver.resolveComponentFactory(NgxSpinnerComponent);\r\n const componentRef = this._viewContainer.createComponent(componentFactory);\r\n this.spinnerName = 'busyIfSpinner-' + BusyIfDirective.index++ + '-' + Math.floor(Math.random() * 1000000); // generate random name\r\n let component = componentRef.instance;\r\n component.name = this.spinnerName;\r\n component.fullScreen = false;\r\n\r\n component.type = 'ball-clip-rotate';\r\n component.size = 'medium';\r\n component.color = '#5ba7ea';\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.busyIf) {\r\n this.isBusy = changes.busyIf.currentValue;\r\n this.refreshState();\r\n }\r\n }\r\n}\r\n","import { Directive, ElementRef, Input, OnInit, AfterViewInit } from '@angular/core';\r\nimport { AppLocalizationService } from '@app/shared/common/localization/app-localization.service';\r\n\r\n@Directive({\r\n selector: '[buttonBusy]',\r\n})\r\nexport class ButtonBusyDirective implements OnInit, AfterViewInit {\r\n @Input() busyText: string;\r\n private _originalButtonInnerHtml: any;\r\n private _button: any;\r\n\r\n constructor(private _element: ElementRef, private _appLocalizationService: AppLocalizationService) {}\r\n\r\n @Input() set buttonBusy(isBusy: boolean) {\r\n this.refreshState(isBusy);\r\n }\r\n\r\n ngOnInit(): void {\r\n this._button = this._element.nativeElement;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this._originalButtonInnerHtml = this._button.innerHTML;\r\n }\r\n\r\n refreshState(isBusy: boolean): void {\r\n if (!this._button) {\r\n return;\r\n }\r\n\r\n if (isBusy) {\r\n // disable button\r\n this._button.setAttribute('disabled', 'disabled');\r\n\r\n this._button.innerHTML =\r\n '' +\r\n '' +\r\n (this.busyText ? this.busyText : this._appLocalizationService.l('ProcessingWithThreeDot')) +\r\n '';\r\n\r\n this._button.setAttribute('_disabledBefore', true);\r\n } else {\r\n if (!this._button.getAttribute('_disabledBefore')) {\r\n return;\r\n }\r\n\r\n // enable button\r\n this._button.removeAttribute('disabled');\r\n this._button.innerHTML = this._originalButtonInnerHtml;\r\n }\r\n }\r\n}\r\n","import { Directive, Self, Output, EventEmitter, Input, SimpleChanges, OnDestroy, OnChanges } from '@angular/core';\r\nimport { BsDatepickerDirective } from 'ngx-bootstrap/datepicker';\r\nimport { Subscription } from 'rxjs';\r\nimport { DateTime } from 'luxon';\r\nimport compare from 'just-compare';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\n\r\n///this directive ensures that the date value will always be the luxon.\r\n@Directive({\r\n selector: '[datePickerLuxonModifier]',\r\n})\r\nexport class DatePickerLuxonModifierDirective implements OnDestroy, OnChanges {\r\n @Input() date = new EventEmitter();\r\n @Input() isUtc = false;\r\n @Input() withTimepicker = false;\r\n @Output() dateChange = new EventEmitter();\r\n\r\n subscribe: Subscription;\r\n lastDate: Date = null;\r\n\r\n constructor(@Self() private bsDatepicker: BsDatepickerDirective, private _dateTimeService: DateTimeService) {\r\n this.subscribe = bsDatepicker.bsValueChange.subscribe((date: Date) => {\r\n if (!date) {\r\n this.lastDate = null;\r\n this.dateChange.emit(null);\r\n } else if (date instanceof Date && !compare(this.lastDate, date) && date.toString() !== 'Invalid Date') {\r\n // clear hour, minute, seconds and milliseconds since this is a date\r\n if (!this.withTimepicker) {\r\n date.setHours(0);\r\n date.setMinutes(0);\r\n }\r\n\r\n date.setSeconds(0);\r\n date.setMilliseconds(0);\r\n\r\n if (this.isUtc) {\r\n // using UTC date regardless of timing configuration\r\n var utcDateString = new Date(date.getTime() - date.getTimezoneOffset() * 60000).toISOString();\r\n date = this._dateTimeService.fromISODateString(utcDateString).toJSDate();\r\n } else if (abp.clock.provider.supportsMultipleTimezone) {\r\n date = this._dateTimeService.changeTimeZone(date, abp.timing.timeZoneInfo.iana.timeZoneId);\r\n }\r\n\r\n this.lastDate = date;\r\n this.dateChange.emit(this._dateTimeService.fromJSDate(this.lastDate));\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscribe.unsubscribe();\r\n }\r\n\r\n ngOnChanges({ date }: SimpleChanges) {\r\n if (date && date.currentValue) {\r\n if (!compare(date.currentValue, date.previousValue)) {\r\n setTimeout(() => {\r\n if (date.currentValue instanceof DateTime) {\r\n this.bsDatepicker.bsValue = date.currentValue.toJSDate();\r\n } else {\r\n this.bsDatepicker.bsValue = date.currentValue;\r\n }\r\n }, 0);\r\n }\r\n } else {\r\n setTimeout(() => {\r\n this.bsDatepicker.bsValue = null;\r\n }, 0);\r\n }\r\n }\r\n}\r\n","import { Directive, Self, Output, EventEmitter, Input, SimpleChanges, OnDestroy, OnChanges } from '@angular/core';\r\nimport { BsDaterangepickerDirective } from 'ngx-bootstrap/datepicker';\r\nimport { Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\nimport { DateTime } from 'luxon';\r\nimport compare from 'just-compare';\r\nimport { DateTimeService } from '@app/shared/common/timing/date-time.service';\r\n\r\n///this directive ensures that date values will always be the luxon.\r\n@Directive({\r\n selector: '[dateRangePickerLuxonModifier]',\r\n})\r\nexport class DateRangePickerLuxonModifierDirective implements OnDestroy, OnChanges {\r\n @Input() date = new EventEmitter();\r\n @Output() dateChange = new EventEmitter();\r\n\r\n subscribe: Subscription;\r\n lastDates: Date[] = null;\r\n\r\n constructor(\r\n @Self() private bsDateRangepicker: BsDaterangepickerDirective,\r\n private _dateTimeService: DateTimeService\r\n ) {\r\n this.subscribe = bsDateRangepicker.bsValueChange\r\n .pipe(\r\n filter(\r\n (dates) =>\r\n !!(\r\n dates &&\r\n dates[0] instanceof Date &&\r\n dates[1] instanceof Date &&\r\n !compare(this.lastDates, dates) &&\r\n dates[0].toString() !== 'Invalid Date' &&\r\n dates[1].toString() !== 'Invalid Date'\r\n )\r\n )\r\n )\r\n .subscribe((dates: Date[]) => {\r\n this.lastDates = dates;\r\n let startDate = this._dateTimeService.fromJSDate(dates[0]);\r\n let endDate = this._dateTimeService.fromJSDate(dates[1]);\r\n this.dateChange.emit([startDate, endDate]);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscribe.unsubscribe();\r\n }\r\n\r\n ngOnChanges({ date }: SimpleChanges) {\r\n if (date && date.currentValue && !compare(date.currentValue, date.previousValue)) {\r\n setTimeout(\r\n () =>\r\n (this.bsDateRangepicker.bsValue = [new Date(date.currentValue[0]), new Date(date.currentValue[1])]),\r\n 0\r\n );\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AppConsts } from '@shared/AppConsts';\r\nimport { FileDto } from '@shared/service-proxies/service-proxies';\r\n\r\n@Injectable()\r\nexport class FileDownloadService {\r\n downloadTempFile(file: FileDto) {\r\n const url =\r\n AppConsts.remoteServiceBaseUrl +\r\n '/File/DownloadTempFile?fileType=' +\r\n file.fileType +\r\n '&fileToken=' +\r\n file.fileToken +\r\n '&fileName=' +\r\n file.fileName;\r\n location.href = url; //TODO: This causes reloading of same page in Firefox\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class GuidGeneratorService { \r\n guid(): string {\r\n function s4() {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n }\r\n\r\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport * as localForage from 'localforage';\r\n\r\n@Injectable()\r\nexport class LocalStorageService {\r\n getItem(key: string, callback: any): void {\r\n if (!localForage) {\r\n return;\r\n }\r\n\r\n localForage.getItem(key, callback);\r\n }\r\n\r\n setItem(key, value, callback?: any): void {\r\n if (!localForage) {\r\n return;\r\n }\r\n\r\n if (value === null) {\r\n value = undefined;\r\n }\r\n\r\n localForage.setItem(key, value, callback);\r\n }\r\n\r\n removeItem(key, callback?: any): void {\r\n if (!localForage) {\r\n return;\r\n }\r\n\r\n localForage.removeItem(key, callback);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DateTime } from 'luxon';\r\n\r\n@Pipe({ name: 'luxonFormat' })\r\nexport class LuxonFormatPipe implements PipeTransform {\r\n transform(value: DateTime, format: string) {\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n return value.toFormat(format);\r\n }\r\n}\r\n","export class NameValuePair {\r\n\r\n name!: string | undefined;\r\n value!: string | undefined;\r\n\r\n constructor(data?: any) {\r\n if (!data) {\r\n return;\r\n }\r\n\r\n this.name = data.name;\r\n this.value = data.value;\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n@Injectable()\r\nexport class ScriptLoaderService {\r\n private scripts: any = {};\r\n\r\n load(...scripts: string[]) {\r\n this.scripts = scripts;\r\n let promises: any[] = [];\r\n scripts.forEach((script) => promises.push(this.loadScript(script)));\r\n return Promise.all(promises);\r\n }\r\n\r\n loadScript(name: string) {\r\n return new Promise((resolve, reject) => {\r\n let script = document.createElement('script') as any;\r\n script.type = 'text/javascript';\r\n script.src = name;\r\n\r\n if (script.readyState) {\r\n //IE\r\n script.onreadystatechange = () => {\r\n if (script.readyState === 'loaded' || script.readyState === 'complete') {\r\n script.onreadystatechange = null;\r\n resolve({ script: name, loaded: true, status: 'Loaded' });\r\n }\r\n };\r\n } else {\r\n //Others\r\n script.onload = () => {\r\n resolve({ script: name, loaded: true, status: 'Loaded' });\r\n };\r\n }\r\n\r\n script.onerror = (error: any) => resolve({ script: name, loaded: false, status: 'Loaded' });\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n@Injectable()\r\nexport class StyleLoaderService {\r\n private styles: any = {};\r\n\r\n load(...styles: string[]) {\r\n this.styles = styles;\r\n let promises: any[] = [];\r\n styles.forEach((style) => promises.push(this.loadStyle(style)));\r\n return Promise.all(promises);\r\n }\r\n\r\n loadArray(styles: string[]) {\r\n this.styles = styles;\r\n let promises: any[] = [];\r\n styles.forEach((style) => promises.push(this.loadStyle(style)));\r\n return Promise.all(promises);\r\n }\r\n\r\n loadStyle(name: string) {\r\n return new Promise((resolve, reject) => {\r\n let style = document.createElement('link') as any;\r\n style.type = 'text/css';\r\n style.rel = 'stylesheet';\r\n style.href = name;\r\n\r\n if (style.readyState) {\r\n //IE\r\n style.onreadystatechange = () => {\r\n if (style.readyState === 'loaded' || style.readyState === 'complete') {\r\n style.onreadystatechange = null;\r\n resolve({ style: name, loaded: true, status: 'Loaded' });\r\n }\r\n };\r\n } else {\r\n //Others\r\n style.onload = () => {\r\n resolve({ style: name, loaded: true, status: 'Loaded' });\r\n };\r\n }\r\n\r\n style.onerror = (error: any) => resolve({ style: name, loaded: false, status: 'Loaded' });\r\n document.getElementsByTagName('head')[0].appendChild(style);\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { filter as _filter, forEach as _forEach } from 'lodash-es';\r\n\r\n@Injectable()\r\nexport class TreeDataHelperService {\r\n findNode(data, selector): any {\r\n let nodes = _filter(data, selector);\r\n if (nodes && nodes.length === 1) {\r\n return nodes[0];\r\n }\r\n\r\n let foundNode = null;\r\n\r\n _forEach(data, (d) => {\r\n if (!foundNode) {\r\n foundNode = this.findNode(d.children, selector);\r\n }\r\n });\r\n\r\n return foundNode;\r\n }\r\n\r\n findParent(data, nodeSelector) {\r\n let node = this.findNode(data, nodeSelector);\r\n if (!node) {\r\n return null;\r\n }\r\n\r\n return node.parent;\r\n }\r\n\r\n findChildren(data, selector) {\r\n let traverseChildren = function (node) {\r\n let names = [];\r\n if (node.children) {\r\n _forEach(node.children, (c) => {\r\n names.push(c.data.name);\r\n names = names.concat(traverseChildren(c));\r\n });\r\n }\r\n return names;\r\n };\r\n\r\n let foundNode = this.findNode(data, selector);\r\n if (foundNode) {\r\n return traverseChildren(foundNode);\r\n } else {\r\n return [];\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { AutoFocusDirective } from './auto-focus.directive';\r\nimport { BusyIfDirective } from './busy-if.directive';\r\nimport { ButtonBusyDirective } from './button-busy.directive';\r\nimport { FileDownloadService } from './file-download.service';\r\nimport { FriendProfilePictureComponent } from './friend-profile-picture.component';\r\nimport { LocalStorageService } from './local-storage.service';\r\nimport { LuxonFormatPipe } from './luxon-format.pipe';\r\nimport { LuxonFromNowPipe } from './luxon-from-now.pipe';\r\nimport { ValidationMessagesComponent } from './validation-messages.component';\r\nimport { EqualValidator } from './validation/equal-validator.directive';\r\nimport { PasswordComplexityValidator } from './validation/password-complexity-validator.directive';\r\nimport { NullDefaultValueDirective } from './null-value.directive';\r\nimport { ScriptLoaderService } from './script-loader.service';\r\nimport { StyleLoaderService } from './style-loader.service';\r\nimport { ArrayToTreeConverterService } from './array-to-tree-converter.service';\r\nimport { TreeDataHelperService } from './tree-data-helper.service';\r\nimport { LocalizePipe } from '@shared/common/pipes/localize.pipe';\r\nimport { PermissionPipe } from '@shared/common/pipes/permission.pipe';\r\nimport { PermissionAnyPipe } from '@shared/common/pipes/permission-any.pipe';\r\nimport { PermissionAllPipe } from '@shared/common/pipes/permission-all.pipe';\r\nimport { FeatureCheckerPipe } from '@shared/common/pipes/feature-checker.pipe';\r\nimport { DatePickerLuxonModifierDirective } from './date-time/date-picker-luxon-modifier.directive';\r\nimport { DateRangePickerLuxonModifierDirective } from './date-time/date-range-picker-luxon-modifier.directive';\r\nimport { GuidGeneratorService } from './guid-generator.service';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n providers: [\r\n FileDownloadService,\r\n LocalStorageService,\r\n ScriptLoaderService,\r\n StyleLoaderService,\r\n ArrayToTreeConverterService,\r\n TreeDataHelperService,\r\n GuidGeneratorService\r\n ],\r\n declarations: [\r\n EqualValidator,\r\n PasswordComplexityValidator,\r\n ButtonBusyDirective,\r\n AutoFocusDirective,\r\n BusyIfDirective,\r\n FriendProfilePictureComponent,\r\n LuxonFormatPipe,\r\n LuxonFromNowPipe,\r\n ValidationMessagesComponent,\r\n NullDefaultValueDirective,\r\n LocalizePipe,\r\n PermissionPipe,\r\n PermissionAnyPipe,\r\n FeatureCheckerPipe,\r\n DatePickerLuxonModifierDirective,\r\n DateRangePickerLuxonModifierDirective,\r\n PermissionAllPipe,\r\n ],\r\n exports: [\r\n EqualValidator,\r\n PasswordComplexityValidator,\r\n ButtonBusyDirective,\r\n AutoFocusDirective,\r\n BusyIfDirective,\r\n FriendProfilePictureComponent,\r\n LuxonFormatPipe,\r\n LuxonFromNowPipe,\r\n ValidationMessagesComponent,\r\n NullDefaultValueDirective,\r\n LocalizePipe,\r\n PermissionPipe,\r\n PermissionAnyPipe,\r\n FeatureCheckerPipe,\r\n DatePickerLuxonModifierDirective,\r\n DateRangePickerLuxonModifierDirective,\r\n PermissionAllPipe,\r\n ],\r\n})\r\nexport class UtilsModule { }\r\n","import { Component, Input } from '@angular/core';\r\nimport { AppLocalizationService } from '@app/shared/common/localization/app-localization.service';\r\nimport { filter as _filter, find as _find, concat as _concat } from 'lodash-es';\r\n\r\nclass ErrorDef {\r\n error: string;\r\n localizationKey: string;\r\n errorProperty: string;\r\n}\r\n\r\n@Component({\r\n selector: '',\r\n template: `\r\n
    \r\n
    \r\n
    \r\n {{ getErrorDefinitionMessage(errorDef) }}\r\n
    \r\n
    \r\n
    \r\n `,\r\n})\r\nexport class ValidationMessagesComponent {\r\n @Input() formCtrl;\r\n\r\n _errorDefs: ErrorDef[] = [];\r\n\r\n readonly standartErrorDefs: ErrorDef[] = [\r\n { error: 'required', localizationKey: 'ThisFieldIsRequired' } as ErrorDef,\r\n {\r\n error: 'minlength',\r\n localizationKey: 'PleaseEnterAtLeastNCharacter',\r\n errorProperty: 'requiredLength',\r\n } as ErrorDef,\r\n {\r\n error: 'maxlength',\r\n localizationKey: 'PleaseEnterNoMoreThanNCharacter',\r\n errorProperty: 'requiredLength',\r\n } as ErrorDef,\r\n { error: 'email', localizationKey: 'InvalidEmailAddress' } as ErrorDef,\r\n { error: 'min', localizationKey: 'ValueMustBeBiggerThanOrEqualToX', errorProperty: 'min' } as ErrorDef,\r\n { error: 'pattern', localizationKey: 'InvalidPattern', errorProperty: 'requiredPattern' } as ErrorDef,\r\n ];\r\n\r\n constructor(private appLocalizationService: AppLocalizationService) {}\r\n\r\n get errorDefsInternal(): ErrorDef[] {\r\n let standarts = _filter(\r\n this.standartErrorDefs,\r\n (ed) => !_find(this._errorDefs, (edC) => edC.error === ed.error)\r\n );\r\n let all = _concat(standarts, this._errorDefs);\r\n\r\n return all;\r\n }\r\n\r\n @Input() set errorDefs(value: ErrorDef[]) {\r\n this._errorDefs = value;\r\n }\r\n\r\n getErrorDefinitionIsInValid(errorDef: ErrorDef): boolean {\r\n return !!this.formCtrl.errors[errorDef.error];\r\n }\r\n\r\n getErrorDefinitionMessage(errorDef: ErrorDef): string {\r\n let errorRequirement = this.formCtrl.errors[errorDef.error][errorDef.errorProperty];\r\n return !!errorRequirement\r\n ? this.appLocalizationService.l(errorDef.localizationKey, errorRequirement)\r\n : this.appLocalizationService.l(errorDef.localizationKey);\r\n }\r\n}\r\n","import arrayPush from './_arrayPush.js';\nimport baseFlatten from './_baseFlatten.js';\nimport copyArray from './_copyArray.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\nfunction concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n}\n\nexport default concat;\n","import { Attribute, Directive, forwardRef } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\r\n\r\n//Got from: https://scotch.io/tutorials/how-to-implement-a-custom-validator-directive-confirm-password-in-angular-2\r\n\r\n@Directive({\r\n selector: '[validateEqual][formControlName],[validateEqual][formControl],[validateEqual][ngModel]',\r\n providers: [{ provide: NG_VALIDATORS, useExisting: forwardRef(() => EqualValidator), multi: true }],\r\n})\r\nexport class EqualValidator implements Validator {\r\n constructor(\r\n @Attribute('validateEqual') public validateEqual: string,\r\n @Attribute('reverse') public reverse: string\r\n ) {}\r\n\r\n private get isReverse() {\r\n if (!this.reverse) {\r\n return false;\r\n }\r\n\r\n return this.reverse === 'true';\r\n }\r\n\r\n validate(control: AbstractControl): { [key: string]: any } {\r\n const pairControl = control.root.get(this.validateEqual);\r\n if (!pairControl) {\r\n return null;\r\n }\r\n\r\n const value = control.value;\r\n const pairValue = pairControl.value;\r\n\r\n if (!value && !pairValue) {\r\n this.deleteErrors(pairControl);\r\n return null;\r\n }\r\n\r\n if (this.isReverse) {\r\n if (value === pairValue) {\r\n this.deleteErrors(pairControl);\r\n } else {\r\n pairControl.setErrors({\r\n validateEqual: true,\r\n });\r\n }\r\n\r\n return null;\r\n } else {\r\n if (value !== pairValue) {\r\n return {\r\n validateEqual: true,\r\n };\r\n }\r\n }\r\n }\r\n\r\n deleteErrors(control: AbstractControl) {\r\n if (control.errors) {\r\n delete control.errors['validateEqual'];\r\n }\r\n\r\n if (control.errors && !Object.keys(control.errors).length) {\r\n control.setErrors(null);\r\n }\r\n }\r\n}\r\n","import { Directive, Input, forwardRef } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[requireDigit],[requireLowercase],[requireNonAlphanumeric],[requireUppercase],[requiredLength]',\r\n providers: [{ provide: NG_VALIDATORS, useExisting: forwardRef(() => PasswordComplexityValidator), multi: true }],\r\n})\r\nexport class PasswordComplexityValidator implements Validator {\r\n @Input('requireDigit') requireDigit: boolean;\r\n @Input('requireUppercase') requireUppercase: boolean;\r\n @Input('requireLowercase') requireLowercase: boolean;\r\n @Input('requireNonAlphanumeric') requireNonAlphanumeric: boolean;\r\n @Input('requiredLength') requiredLength: number;\r\n\r\n validate(control: AbstractControl): { [key: string]: any } {\r\n const givenPassword = control.value;\r\n let validationResult = null;\r\n\r\n const requireDigit = this.requireDigit;\r\n if (requireDigit && givenPassword && !/[0-9]/.test(givenPassword)) {\r\n validationResult = validationResult || {};\r\n validationResult.requireDigit = true;\r\n }\r\n\r\n const requireUppercase = this.requireUppercase;\r\n if (requireUppercase && givenPassword && !/[A-Z]/.test(givenPassword)) {\r\n validationResult = validationResult || {};\r\n validationResult.requireUppercase = true;\r\n }\r\n\r\n const requireLowercase = this.requireLowercase;\r\n if (requireLowercase && givenPassword && !/[a-z]/.test(givenPassword)) {\r\n validationResult = validationResult || {};\r\n validationResult.requireLowercase = true;\r\n }\r\n\r\n const requiredLength = this.requiredLength;\r\n if (requiredLength && givenPassword && givenPassword.length < requiredLength) {\r\n validationResult = validationResult || {};\r\n validationResult.requiredLength = true;\r\n }\r\n\r\n // use upperCaseLetters\r\n const requireNonAlphanumeric = this.requireNonAlphanumeric;\r\n if (requireNonAlphanumeric && givenPassword && /^[0-9a-zA-Z]+$/.test(givenPassword)) {\r\n validationResult = validationResult || {};\r\n validationResult.requireNonAlphanumeric = true;\r\n }\r\n\r\n return validationResult;\r\n }\r\n}\r\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar counto_directive_1 = require(\"./src/counto.directive\");\nexports.CountoDirective = counto_directive_1.CountoDirective;\nvar counto_module_1 = require(\"./src/counto.module\");\nexports.CountoModule = counto_module_1.CountoModule;\nexports.default = counto_module_1.CountoModule;\n\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar ɵngcc0 = require('@angular/core');\nvar CountoDirective = /** @class */ (function () {\n function CountoDirective() {\n this.countoChange = new core_1.EventEmitter();\n this.countoEnd = new core_1.EventEmitter();\n }\n Object.defineProperty(CountoDirective.prototype, \"duration\", {\n set: function (duration) {\n this._duration = parseFloat(duration);\n this.run();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CountoDirective.prototype, \"countTo\", {\n set: function (countTo) {\n this._countTo = parseFloat(countTo);\n this.run();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CountoDirective.prototype, \"countFrom\", {\n set: function (countFrom) {\n this._countFrom = parseFloat(countFrom);\n this.run();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CountoDirective.prototype, \"step\", {\n set: function (step) {\n this._step = parseFloat(step);\n this.run();\n },\n enumerable: true,\n configurable: true\n });\n CountoDirective.prototype.run = function () {\n var _this = this;\n clearInterval(_this._timer);\n if (isNaN(_this._duration)) {\n return false;\n }\n if (isNaN(_this._step)) {\n return false;\n }\n if (isNaN(_this._countFrom)) {\n return false;\n }\n if (isNaN(_this._countTo)) {\n return false;\n }\n if (_this._step <= 0) {\n console.info('Step must be greater than 0.');\n return false;\n }\n if (_this._duration <= 0) {\n console.info('Duration must be greater than 0.');\n return false;\n }\n if (_this._step > _this._duration * 1000) {\n console.info('Step must be equal or smaller than duration.');\n return false;\n }\n var intermediate = _this._countFrom;\n var increment = Math.abs(_this._countTo - _this._countFrom) / ((_this._duration * 1000) / _this._step);\n _this.countoChange.emit(intermediate);\n _this._timer = setInterval(function () {\n if (_this._countTo < _this._countFrom) {\n if (intermediate <= _this._countTo) {\n clearInterval(_this._timer);\n _this.countoChange.emit(_this._countTo);\n _this.countoEnd.emit();\n }\n else {\n _this.countoChange.emit(intermediate);\n intermediate -= increment;\n }\n }\n else {\n if (intermediate >= _this._countTo) {\n clearInterval(_this._timer);\n _this.countoChange.emit(_this._countTo);\n _this.countoEnd.emit();\n }\n else {\n _this.countoChange.emit(intermediate);\n intermediate += increment;\n }\n }\n }, _this._step);\n };\n /** @nocollapse */\n CountoDirective.ctorParameters = function () { return []; };\n CountoDirective.propDecorators = {\n \"countoChange\": [{ type: core_1.Output },],\n \"countoEnd\": [{ type: core_1.Output },],\n \"duration\": [{ type: core_1.Input },],\n \"countTo\": [{ type: core_1.Input },],\n \"countFrom\": [{ type: core_1.Input },],\n \"step\": [{ type: core_1.Input },],\n };\nCountoDirective.ɵfac = function CountoDirective_Factory(t) { return new (t || CountoDirective)(); };\nCountoDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CountoDirective, selectors: [[\"\", \"counto\", \"\"]], inputs: { duration: \"duration\", countTo: \"countTo\", countFrom: \"countFrom\", step: \"step\" }, outputs: { countoChange: \"countoChange\", countoEnd: \"countoEnd\" } });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CountoDirective, [{\n type: core_1.Directive,\n args: [{\n selector: '[counto]'\n }]\n }], function () { return []; }, { countoChange: [{\n type: core_1.Output\n }], countoEnd: [{\n type: core_1.Output\n }], duration: [{\n type: core_1.Input\n }], countTo: [{\n type: core_1.Input\n }], countFrom: [{\n type: core_1.Input\n }], step: [{\n type: core_1.Input\n }] }); })();\n return CountoDirective;\n}());\nexports.CountoDirective = CountoDirective;\n\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar counto_directive_1 = require(\"./counto.directive\");\nvar ɵngcc0 = require('@angular/core');\nvar ɵngcc1 = require('./counto.directive');\nvar CountoModule = /** @class */ (function () {\n function CountoModule() {\n }\n /** @nocollapse */\n CountoModule.ctorParameters = function () { return []; };\nCountoModule.ɵfac = function CountoModule_Factory(t) { return new (t || CountoModule)(); };\nCountoModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CountoModule });\nCountoModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CountoModule, [{\n type: core_1.NgModule,\n args: [{\n declarations: [counto_directive_1.CountoDirective],\n exports: [counto_directive_1.CountoDirective]\n }]\n }], function () { return []; }, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CountoModule, { declarations: [ɵngcc1.CountoDirective], exports: [ɵngcc1.CountoDirective] }); })();\n return CountoModule;\n}());\nexports.CountoModule = CountoModule;\n\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar forms_1 = require(\"@angular/forms\");\nvar platform_browser_1 = require(\"@angular/platform-browser\");\nvar textMaskCore_1 = require(\"text-mask-core/dist/textMaskCore\");\nvar ɵngcc0 = require('@angular/core');\nvar TextMaskConfig = /** @class */ (function () {\n function TextMaskConfig() {\n }\n return TextMaskConfig;\n}());\nexports.TextMaskConfig = TextMaskConfig;\nexports.MASKEDINPUT_VALUE_ACCESSOR = {\n provide: forms_1.NG_VALUE_ACCESSOR,\n useExisting: core_1.forwardRef(function () { return MaskedInputDirective; }),\n multi: true\n};\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n */\nfunction _isAndroid() {\n var userAgent = platform_browser_1.ɵgetDOM() ? platform_browser_1.ɵgetDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\nvar MaskedInputDirective = /** @class */ (function () {\n function MaskedInputDirective(_renderer, _elementRef, _compositionMode) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this._compositionMode = _compositionMode;\n this.textMaskConfig = {\n mask: [],\n guide: true,\n placeholderChar: '_',\n pipe: undefined,\n keepCharPositions: false,\n };\n this.onChange = function (_) { };\n this.onTouched = function () { };\n /** Whether the user is creating a composition string (IME events). */\n this._composing = false;\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n MaskedInputDirective.prototype.ngOnChanges = function (changes) {\n this._setupMask(true);\n if (this.textMaskInputElement !== undefined) {\n this.textMaskInputElement.update(this.inputElement.value);\n }\n };\n MaskedInputDirective.prototype.writeValue = function (value) {\n this._setupMask();\n // set the initial value for cases where the mask is disabled\n var normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this.inputElement, 'value', normalizedValue);\n if (this.textMaskInputElement !== undefined) {\n this.textMaskInputElement.update(value);\n }\n };\n MaskedInputDirective.prototype.registerOnChange = function (fn) { this.onChange = fn; };\n MaskedInputDirective.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n MaskedInputDirective.prototype.setDisabledState = function (isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n };\n MaskedInputDirective.prototype._handleInput = function (value) {\n if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n this._setupMask();\n if (this.textMaskInputElement !== undefined) {\n this.textMaskInputElement.update(value);\n // get the updated value\n value = this.inputElement.value;\n this.onChange(value);\n }\n }\n };\n MaskedInputDirective.prototype._setupMask = function (create) {\n if (create === void 0) { create = false; }\n if (!this.inputElement) {\n if (this._elementRef.nativeElement.tagName.toUpperCase() === 'INPUT') {\n // `textMask` directive is used directly on an input element\n this.inputElement = this._elementRef.nativeElement;\n }\n else {\n // `textMask` directive is used on an abstracted input element, `md-input-container`, etc\n this.inputElement = this._elementRef.nativeElement.getElementsByTagName('INPUT')[0];\n }\n }\n if (this.inputElement && create) {\n this.textMaskInputElement = textMaskCore_1.createTextMaskInputElement(Object.assign({ inputElement: this.inputElement }, this.textMaskConfig));\n }\n };\n MaskedInputDirective.prototype._compositionStart = function () { this._composing = true; };\n MaskedInputDirective.prototype._compositionEnd = function (value) {\n this._composing = false;\n this._compositionMode && this._handleInput(value);\n };\n /** @nocollapse */\n MaskedInputDirective.ctorParameters = function () { return [\n { type: core_1.Renderer2, },\n { type: core_1.ElementRef, },\n { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [forms_1.COMPOSITION_BUFFER_MODE,] },] },\n ]; };\n MaskedInputDirective.propDecorators = {\n 'textMaskConfig': [{ type: core_1.Input, args: ['textMask',] },],\n };\nMaskedInputDirective.ɵfac = function MaskedInputDirective_Factory(t) { return new (t || MaskedInputDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(forms_1.COMPOSITION_BUFFER_MODE, 8)); };\nMaskedInputDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MaskedInputDirective, selectors: [[\"\", \"textMask\", \"\"]], hostBindings: function MaskedInputDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"input\", function MaskedInputDirective_input_HostBindingHandler($event) { return ctx._handleInput($event.target.value); })(\"blur\", function MaskedInputDirective_blur_HostBindingHandler() { return ctx.onTouched(); })(\"compositionstart\", function MaskedInputDirective_compositionstart_HostBindingHandler() { return ctx._compositionStart(); })(\"compositionend\", function MaskedInputDirective_compositionend_HostBindingHandler($event) { return ctx._compositionEnd($event.target.value); });\n } }, inputs: { textMaskConfig: [\"textMask\", \"textMaskConfig\"] }, exportAs: [\"textMask\"], features: [ɵngcc0.ɵɵProvidersFeature([exports.MASKEDINPUT_VALUE_ACCESSOR]), ɵngcc0.ɵɵNgOnChangesFeature] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MaskedInputDirective, [{\n type: core_1.Directive,\n args: [{\n host: {\n '(input)': '_handleInput($event.target.value)',\n '(blur)': 'onTouched()',\n '(compositionstart)': '_compositionStart()',\n '(compositionend)': '_compositionEnd($event.target.value)'\n },\n selector: '[textMask]',\n exportAs: 'textMask',\n providers: [exports.MASKEDINPUT_VALUE_ACCESSOR]\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: undefined, decorators: [{\n type: core_1.Optional\n }, {\n type: core_1.Inject,\n args: [forms_1.COMPOSITION_BUFFER_MODE]\n }] }]; }, { textMaskConfig: [{\n type: core_1.Input,\n args: ['textMask']\n }] }); })();\n return MaskedInputDirective;\n}());\nexports.MaskedInputDirective = MaskedInputDirective;\nvar TextMaskModule = /** @class */ (function () {\n function TextMaskModule() {\n }\n /** @nocollapse */\n TextMaskModule.ctorParameters = function () { return []; };\nTextMaskModule.ɵfac = function TextMaskModule_Factory(t) { return new (t || TextMaskModule)(); };\nTextMaskModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: TextMaskModule });\nTextMaskModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TextMaskModule, [{\n type: core_1.NgModule,\n args: [{\n declarations: [MaskedInputDirective],\n exports: [MaskedInputDirective]\n }]\n }], function () { return []; }, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TextMaskModule, { declarations: [MaskedInputDirective], exports: [MaskedInputDirective] }); })();\n return TextMaskModule;\n}());\nexports.TextMaskModule = TextMaskModule;\nvar textMaskCore_2 = require(\"text-mask-core/dist/textMaskCore\");\nexports.conformToMask = textMaskCore_2.conformToMask;\n\n","\"use strict\";function _typeof(obj){\"@babel/helpers - typeof\";if(typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj}}return _typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\")}}function _defineProperties(target,props){for(var i=0;i element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","import { EventEmitter, Directive, ElementRef, Input, Output, HostListener, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @param {?} node\n * @return {?}\n */\nimport * as ɵngcc0 from '@angular/core';\nfunction isElement(node) {\n return !!(node && (node.nodeName || node.prop && node.attr && node.find));\n}\nclass FileLikeObject {\n /**\n * @param {?} fileOrInput\n */\n constructor(fileOrInput) {\n this.rawFile = fileOrInput;\n /** @type {?} */\n let isInput = isElement(fileOrInput);\n /** @type {?} */\n let fakePathOrObject = isInput ? fileOrInput.value : fileOrInput;\n /** @type {?} */\n let postfix = typeof fakePathOrObject === 'string' ? 'FakePath' : 'Object';\n /** @type {?} */\n let method = '_createFrom' + postfix;\n ((/** @type {?} */ (this)))[method](fakePathOrObject);\n }\n /**\n * @param {?} path\n * @return {?}\n */\n _createFromFakePath(path) {\n this.lastModifiedDate = void 0;\n this.size = void 0;\n this.type = 'like/' + path.slice(path.lastIndexOf('.') + 1).toLowerCase();\n this.name = path.slice(path.lastIndexOf('/') + path.lastIndexOf('\\\\') + 2);\n }\n /**\n * @param {?} object\n * @return {?}\n */\n _createFromObject(object) {\n this.size = object.size;\n this.type = object.type;\n this.name = object.name;\n }\n}\nif (false) {\n /** @type {?} */\n FileLikeObject.prototype.lastModifiedDate;\n /** @type {?} */\n FileLikeObject.prototype.size;\n /** @type {?} */\n FileLikeObject.prototype.type;\n /** @type {?} */\n FileLikeObject.prototype.name;\n /** @type {?} */\n FileLikeObject.prototype.rawFile;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass FileItem {\n /**\n * @param {?} uploader\n * @param {?} some\n * @param {?} options\n */\n constructor(uploader, some, options) {\n this.url = '/';\n this.headers = [];\n this.withCredentials = true;\n this.formData = [];\n this.isReady = false;\n this.isUploading = false;\n this.isUploaded = false;\n this.isSuccess = false;\n this.isCancel = false;\n this.isError = false;\n this.progress = 0;\n this.index = void 0;\n this.uploader = uploader;\n this.some = some;\n this.options = options;\n this.file = new FileLikeObject(some);\n this._file = some;\n if (uploader.options) {\n this.method = uploader.options.method || 'POST';\n this.alias = uploader.options.itemAlias || 'file';\n }\n this.url = uploader.options.url;\n }\n /**\n * @return {?}\n */\n upload() {\n try {\n this.uploader.uploadItem(this);\n }\n catch (e) {\n this.uploader._onCompleteItem(this, '', 0, {});\n this.uploader._onErrorItem(this, '', 0, {});\n }\n }\n /**\n * @return {?}\n */\n cancel() {\n this.uploader.cancelItem(this);\n }\n /**\n * @return {?}\n */\n remove() {\n this.uploader.removeFromQueue(this);\n }\n /**\n * @return {?}\n */\n onBeforeUpload() {\n return void 0;\n }\n /**\n * @param {?} form\n * @return {?}\n */\n onBuildForm(form) {\n return { form };\n }\n /**\n * @param {?} progress\n * @return {?}\n */\n onProgress(progress) {\n return { progress };\n }\n /**\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n onSuccess(response, status, headers) {\n return { response, status, headers };\n }\n /**\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n onError(response, status, headers) {\n return { response, status, headers };\n }\n /**\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n onCancel(response, status, headers) {\n return { response, status, headers };\n }\n /**\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n onComplete(response, status, headers) {\n return { response, status, headers };\n }\n /**\n * @return {?}\n */\n _onBeforeUpload() {\n this.isReady = true;\n this.isUploading = true;\n this.isUploaded = false;\n this.isSuccess = false;\n this.isCancel = false;\n this.isError = false;\n this.progress = 0;\n this.onBeforeUpload();\n }\n /**\n * @param {?} form\n * @return {?}\n */\n _onBuildForm(form) {\n this.onBuildForm(form);\n }\n /**\n * @param {?} progress\n * @return {?}\n */\n _onProgress(progress) {\n this.progress = progress;\n this.onProgress(progress);\n }\n /**\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n _onSuccess(response, status, headers) {\n this.isReady = false;\n this.isUploading = false;\n this.isUploaded = true;\n this.isSuccess = true;\n this.isCancel = false;\n this.isError = false;\n this.progress = 100;\n this.index = void 0;\n this.onSuccess(response, status, headers);\n }\n /**\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n _onError(response, status, headers) {\n this.isReady = false;\n this.isUploading = false;\n this.isUploaded = true;\n this.isSuccess = false;\n this.isCancel = false;\n this.isError = true;\n this.progress = 0;\n this.index = void 0;\n this.onError(response, status, headers);\n }\n /**\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n _onCancel(response, status, headers) {\n this.isReady = false;\n this.isUploading = false;\n this.isUploaded = false;\n this.isSuccess = false;\n this.isCancel = true;\n this.isError = false;\n this.progress = 0;\n this.index = void 0;\n this.onCancel(response, status, headers);\n }\n /**\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n _onComplete(response, status, headers) {\n this.onComplete(response, status, headers);\n if (this.uploader.options.removeAfterUpload) {\n this.remove();\n }\n }\n /**\n * @return {?}\n */\n _prepareToUploading() {\n this.index = this.index || ++this.uploader._nextIndex;\n this.isReady = true;\n }\n}\nif (false) {\n /** @type {?} */\n FileItem.prototype.file;\n /** @type {?} */\n FileItem.prototype._file;\n /** @type {?} */\n FileItem.prototype.alias;\n /** @type {?} */\n FileItem.prototype.url;\n /** @type {?} */\n FileItem.prototype.method;\n /** @type {?} */\n FileItem.prototype.headers;\n /** @type {?} */\n FileItem.prototype.withCredentials;\n /** @type {?} */\n FileItem.prototype.formData;\n /** @type {?} */\n FileItem.prototype.isReady;\n /** @type {?} */\n FileItem.prototype.isUploading;\n /** @type {?} */\n FileItem.prototype.isUploaded;\n /** @type {?} */\n FileItem.prototype.isSuccess;\n /** @type {?} */\n FileItem.prototype.isCancel;\n /** @type {?} */\n FileItem.prototype.isError;\n /** @type {?} */\n FileItem.prototype.progress;\n /** @type {?} */\n FileItem.prototype.index;\n /** @type {?} */\n FileItem.prototype._xhr;\n /** @type {?} */\n FileItem.prototype._form;\n /**\n * @type {?}\n * @protected\n */\n FileItem.prototype.uploader;\n /**\n * @type {?}\n * @protected\n */\n FileItem.prototype.some;\n /**\n * @type {?}\n * @protected\n */\n FileItem.prototype.options;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass FileType {\n /**\n * @param {?} file\n * @return {?}\n */\n static getMimeClass(file) {\n /** @type {?} */\n let mimeClass = 'application';\n if (this.mime_psd.indexOf(file.type) !== -1) {\n mimeClass = 'image';\n }\n else if (file.type.match('image.*')) {\n mimeClass = 'image';\n }\n else if (file.type.match('video.*')) {\n mimeClass = 'video';\n }\n else if (file.type.match('audio.*')) {\n mimeClass = 'audio';\n }\n else if (file.type === 'application/pdf') {\n mimeClass = 'pdf';\n }\n else if (this.mime_compress.indexOf(file.type) !== -1) {\n mimeClass = 'compress';\n }\n else if (this.mime_doc.indexOf(file.type) !== -1) {\n mimeClass = 'doc';\n }\n else if (this.mime_xsl.indexOf(file.type) !== -1) {\n mimeClass = 'xls';\n }\n else if (this.mime_ppt.indexOf(file.type) !== -1) {\n mimeClass = 'ppt';\n }\n if (mimeClass === 'application') {\n mimeClass = this.fileTypeDetection(file.name);\n }\n return mimeClass;\n }\n /**\n * @param {?} inputFilename\n * @return {?}\n */\n static fileTypeDetection(inputFilename) {\n /** @type {?} */\n let types = {\n 'jpg': 'image',\n 'jpeg': 'image',\n 'tif': 'image',\n 'psd': 'image',\n 'bmp': 'image',\n 'png': 'image',\n 'nef': 'image',\n 'tiff': 'image',\n 'cr2': 'image',\n 'dwg': 'image',\n 'cdr': 'image',\n 'ai': 'image',\n 'indd': 'image',\n 'pin': 'image',\n 'cdp': 'image',\n 'skp': 'image',\n 'stp': 'image',\n '3dm': 'image',\n 'mp3': 'audio',\n 'wav': 'audio',\n 'wma': 'audio',\n 'mod': 'audio',\n 'm4a': 'audio',\n 'compress': 'compress',\n 'zip': 'compress',\n 'rar': 'compress',\n '7z': 'compress',\n 'lz': 'compress',\n 'z01': 'compress',\n 'bz2': 'compress',\n 'gz': 'compress',\n 'pdf': 'pdf',\n 'xls': 'xls',\n 'xlsx': 'xls',\n 'ods': 'xls',\n 'mp4': 'video',\n 'avi': 'video',\n 'wmv': 'video',\n 'mpg': 'video',\n 'mts': 'video',\n 'flv': 'video',\n '3gp': 'video',\n 'vob': 'video',\n 'm4v': 'video',\n 'mpeg': 'video',\n 'm2ts': 'video',\n 'mov': 'video',\n 'doc': 'doc',\n 'docx': 'doc',\n 'eps': 'doc',\n 'txt': 'doc',\n 'odt': 'doc',\n 'rtf': 'doc',\n 'ppt': 'ppt',\n 'pptx': 'ppt',\n 'pps': 'ppt',\n 'ppsx': 'ppt',\n 'odp': 'ppt'\n };\n /** @type {?} */\n let chunks = inputFilename.split('.');\n if (chunks.length < 2) {\n return 'application';\n }\n /** @type {?} */\n let extension = chunks[chunks.length - 1].toLowerCase();\n if (types[extension] === undefined) {\n return 'application';\n }\n else {\n return types[extension];\n }\n }\n}\n/* MS office */\nFileType.mime_doc = [\n 'application/msword',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n 'application/vnd.ms-word.document.macroEnabled.12',\n 'application/vnd.ms-word.template.macroEnabled.12'\n];\nFileType.mime_xsl = [\n 'application/vnd.ms-excel',\n 'application/vnd.ms-excel',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n 'application/vnd.ms-excel.sheet.macroEnabled.12',\n 'application/vnd.ms-excel.template.macroEnabled.12',\n 'application/vnd.ms-excel.addin.macroEnabled.12',\n 'application/vnd.ms-excel.sheet.binary.macroEnabled.12'\n];\nFileType.mime_ppt = [\n 'application/vnd.ms-powerpoint',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.openxmlformats-officedocument.presentationml.template',\n 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n 'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12'\n];\n/* PSD */\nFileType.mime_psd = [\n 'image/photoshop',\n 'image/x-photoshop',\n 'image/psd',\n 'application/photoshop',\n 'application/psd',\n 'zz-application/zz-winassoc-psd'\n];\n/* Compressed files */\nFileType.mime_compress = [\n 'application/x-gtar',\n 'application/x-gcompress',\n 'application/compress',\n 'application/x-tar',\n 'application/x-rar-compressed',\n 'application/octet-stream',\n 'application/x-zip-compressed',\n 'application/zip-compressed',\n 'application/x-7z-compressed',\n 'application/gzip',\n 'application/x-bzip2'\n];\nif (false) {\n /** @type {?} */\n FileType.mime_doc;\n /** @type {?} */\n FileType.mime_xsl;\n /** @type {?} */\n FileType.mime_ppt;\n /** @type {?} */\n FileType.mime_psd;\n /** @type {?} */\n FileType.mime_compress;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @param {?} value\n * @return {?}\n */\nfunction isFile(value) {\n return (File && value instanceof File);\n}\n/**\n * @record\n */\nfunction Headers() { }\nif (false) {\n /** @type {?} */\n Headers.prototype.name;\n /** @type {?} */\n Headers.prototype.value;\n}\n/**\n * @record\n */\nfunction FileUploaderOptions() { }\nif (false) {\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.allowedMimeType;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.allowedFileType;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.autoUpload;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.isHTML5;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.filters;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.headers;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.method;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.authToken;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.maxFileSize;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.queueLimit;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.removeAfterUpload;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.url;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.disableMultipart;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.itemAlias;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.authTokenHeader;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.additionalParameter;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.parametersBeforeFiles;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.formatDataFunction;\n /** @type {?|undefined} */\n FileUploaderOptions.prototype.formatDataFunctionIsAsync;\n}\nclass FileUploader {\n /**\n * @param {?} options\n */\n constructor(options) {\n this.isUploading = false;\n this.queue = [];\n this.progress = 0;\n this._nextIndex = 0;\n this.options = {\n autoUpload: false,\n isHTML5: true,\n filters: [],\n removeAfterUpload: false,\n disableMultipart: false,\n formatDataFunction: (/**\n * @param {?} item\n * @return {?}\n */\n (item) => item._file),\n formatDataFunctionIsAsync: false\n };\n this.setOptions(options);\n this.response = new EventEmitter();\n }\n /**\n * @param {?} options\n * @return {?}\n */\n setOptions(options) {\n this.options = Object.assign(this.options, options);\n this.authToken = this.options.authToken;\n this.authTokenHeader = this.options.authTokenHeader || 'Authorization';\n this.autoUpload = this.options.autoUpload;\n this.options.filters.unshift({ name: 'queueLimit', fn: this._queueLimitFilter });\n if (this.options.maxFileSize) {\n this.options.filters.unshift({ name: 'fileSize', fn: this._fileSizeFilter });\n }\n if (this.options.allowedFileType) {\n this.options.filters.unshift({ name: 'fileType', fn: this._fileTypeFilter });\n }\n if (this.options.allowedMimeType) {\n this.options.filters.unshift({ name: 'mimeType', fn: this._mimeTypeFilter });\n }\n for (let i = 0; i < this.queue.length; i++) {\n this.queue[i].url = this.options.url;\n }\n }\n /**\n * @param {?} files\n * @param {?=} options\n * @param {?=} filters\n * @return {?}\n */\n addToQueue(files, options, filters) {\n /** @type {?} */\n let list = [];\n for (let file of files) {\n list.push(file);\n }\n /** @type {?} */\n let arrayOfFilters = this._getFilters(filters);\n /** @type {?} */\n let count = this.queue.length;\n /** @type {?} */\n let addedFileItems = [];\n list.map((/**\n * @param {?} some\n * @return {?}\n */\n (some) => {\n if (!options) {\n options = this.options;\n }\n /** @type {?} */\n let temp = new FileLikeObject(some);\n if (this._isValidFile(temp, arrayOfFilters, options)) {\n /** @type {?} */\n let fileItem = new FileItem(this, some, options);\n addedFileItems.push(fileItem);\n this.queue.push(fileItem);\n this._onAfterAddingFile(fileItem);\n }\n else {\n /** @type {?} */\n let filter = arrayOfFilters[this._failFilterIndex];\n this._onWhenAddingFileFailed(temp, filter, options);\n }\n }));\n if (this.queue.length !== count) {\n this._onAfterAddingAll(addedFileItems);\n this.progress = this._getTotalProgress();\n }\n this._render();\n if (this.options.autoUpload) {\n this.uploadAll();\n }\n }\n /**\n * @param {?} value\n * @return {?}\n */\n removeFromQueue(value) {\n /** @type {?} */\n let index = this.getIndexOfItem(value);\n /** @type {?} */\n let item = this.queue[index];\n if (item.isUploading) {\n item.cancel();\n }\n this.queue.splice(index, 1);\n this.progress = this._getTotalProgress();\n }\n /**\n * @return {?}\n */\n clearQueue() {\n while (this.queue.length) {\n this.queue[0].remove();\n }\n this.progress = 0;\n }\n /**\n * @param {?} value\n * @return {?}\n */\n uploadItem(value) {\n /** @type {?} */\n let index = this.getIndexOfItem(value);\n /** @type {?} */\n let item = this.queue[index];\n /** @type {?} */\n let transport = this.options.isHTML5 ? '_xhrTransport' : '_iframeTransport';\n item._prepareToUploading();\n if (this.isUploading) {\n return;\n }\n this.isUploading = true;\n ((/** @type {?} */ (this)))[transport](item);\n }\n /**\n * @param {?} value\n * @return {?}\n */\n cancelItem(value) {\n /** @type {?} */\n let index = this.getIndexOfItem(value);\n /** @type {?} */\n let item = this.queue[index];\n /** @type {?} */\n let prop = this.options.isHTML5 ? item._xhr : item._form;\n if (item && item.isUploading) {\n prop.abort();\n }\n }\n /**\n * @return {?}\n */\n uploadAll() {\n /** @type {?} */\n let items = this.getNotUploadedItems().filter((/**\n * @param {?} item\n * @return {?}\n */\n (item) => !item.isUploading));\n if (!items.length) {\n return;\n }\n items.map((/**\n * @param {?} item\n * @return {?}\n */\n (item) => item._prepareToUploading()));\n items[0].upload();\n }\n /**\n * @return {?}\n */\n cancelAll() {\n /** @type {?} */\n let items = this.getNotUploadedItems();\n items.map((/**\n * @param {?} item\n * @return {?}\n */\n (item) => item.cancel()));\n }\n /**\n * @param {?} value\n * @return {?}\n */\n isFile(value) {\n return isFile(value);\n }\n /**\n * @param {?} value\n * @return {?}\n */\n isFileLikeObject(value) {\n return value instanceof FileLikeObject;\n }\n /**\n * @param {?} value\n * @return {?}\n */\n getIndexOfItem(value) {\n return typeof value === 'number' ? value : this.queue.indexOf(value);\n }\n /**\n * @return {?}\n */\n getNotUploadedItems() {\n return this.queue.filter((/**\n * @param {?} item\n * @return {?}\n */\n (item) => !item.isUploaded));\n }\n /**\n * @return {?}\n */\n getReadyItems() {\n return this.queue\n .filter((/**\n * @param {?} item\n * @return {?}\n */\n (item) => (item.isReady && !item.isUploading)))\n .sort((/**\n * @param {?} item1\n * @param {?} item2\n * @return {?}\n */\n (item1, item2) => item1.index - item2.index));\n }\n /**\n * @return {?}\n */\n destroy() {\n return void 0;\n }\n /**\n * @param {?} fileItems\n * @return {?}\n */\n onAfterAddingAll(fileItems) {\n return { fileItems };\n }\n /**\n * @param {?} fileItem\n * @param {?} form\n * @return {?}\n */\n onBuildItemForm(fileItem, form) {\n return { fileItem, form };\n }\n /**\n * @param {?} fileItem\n * @return {?}\n */\n onAfterAddingFile(fileItem) {\n return { fileItem };\n }\n /**\n * @param {?} item\n * @param {?} filter\n * @param {?} options\n * @return {?}\n */\n onWhenAddingFileFailed(item, filter, options) {\n return { item, filter, options };\n }\n /**\n * @param {?} fileItem\n * @return {?}\n */\n onBeforeUploadItem(fileItem) {\n return { fileItem };\n }\n /**\n * @param {?} fileItem\n * @param {?} progress\n * @return {?}\n */\n onProgressItem(fileItem, progress) {\n return { fileItem, progress };\n }\n /**\n * @param {?} progress\n * @return {?}\n */\n onProgressAll(progress) {\n return { progress };\n }\n /**\n * @param {?} item\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n onSuccessItem(item, response, status, headers) {\n return { item, response, status, headers };\n }\n /**\n * @param {?} item\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n onErrorItem(item, response, status, headers) {\n return { item, response, status, headers };\n }\n /**\n * @param {?} item\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n onCancelItem(item, response, status, headers) {\n return { item, response, status, headers };\n }\n /**\n * @param {?} item\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n onCompleteItem(item, response, status, headers) {\n return { item, response, status, headers };\n }\n /**\n * @return {?}\n */\n onCompleteAll() {\n return void 0;\n }\n /**\n * @param {?} item\n * @return {?}\n */\n _mimeTypeFilter(item) {\n return !(this.options.allowedMimeType && this.options.allowedMimeType.indexOf(item.type) === -1);\n }\n /**\n * @param {?} item\n * @return {?}\n */\n _fileSizeFilter(item) {\n return !(this.options.maxFileSize && item.size > this.options.maxFileSize);\n }\n /**\n * @param {?} item\n * @return {?}\n */\n _fileTypeFilter(item) {\n return !(this.options.allowedFileType &&\n this.options.allowedFileType.indexOf(FileType.getMimeClass(item)) === -1);\n }\n /**\n * @param {?} item\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n _onErrorItem(item, response, status, headers) {\n item._onError(response, status, headers);\n this.onErrorItem(item, response, status, headers);\n }\n /**\n * @param {?} item\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n _onCompleteItem(item, response, status, headers) {\n item._onComplete(response, status, headers);\n this.onCompleteItem(item, response, status, headers);\n /** @type {?} */\n let nextItem = this.getReadyItems()[0];\n this.isUploading = false;\n if (nextItem) {\n nextItem.upload();\n return;\n }\n this.onCompleteAll();\n this.progress = this._getTotalProgress();\n this._render();\n }\n /**\n * @protected\n * @param {?} parsedHeaders\n * @return {?}\n */\n _headersGetter(parsedHeaders) {\n return (/**\n * @param {?} name\n * @return {?}\n */\n (name) => {\n if (name) {\n return parsedHeaders[name.toLowerCase()] || void 0;\n }\n return parsedHeaders;\n });\n }\n /**\n * @protected\n * @param {?} item\n * @return {?}\n */\n _xhrTransport(item) {\n /** @type {?} */\n let that = this;\n /** @type {?} */\n let xhr = item._xhr = new XMLHttpRequest();\n /** @type {?} */\n let sendable;\n this._onBeforeUploadItem(item);\n if (typeof item._file.size !== 'number') {\n throw new TypeError('The file specified is no longer valid');\n }\n if (!this.options.disableMultipart) {\n sendable = new FormData();\n this._onBuildItemForm(item, sendable);\n /** @type {?} */\n const appendFile = (/**\n * @return {?}\n */\n () => sendable.append(item.alias, item._file, item.file.name));\n if (!this.options.parametersBeforeFiles) {\n appendFile();\n }\n // For AWS, Additional Parameters must come BEFORE Files\n if (this.options.additionalParameter !== undefined) {\n Object.keys(this.options.additionalParameter).forEach((/**\n * @param {?} key\n * @return {?}\n */\n (key) => {\n /** @type {?} */\n let paramVal = this.options.additionalParameter[key];\n // Allow an additional parameter to include the filename\n if (typeof paramVal === 'string' && paramVal.indexOf('{{file_name}}') >= 0) {\n paramVal = paramVal.replace('{{file_name}}', item.file.name);\n }\n sendable.append(key, paramVal);\n }));\n }\n if (this.options.parametersBeforeFiles) {\n appendFile();\n }\n }\n else {\n sendable = this.options.formatDataFunction(item);\n }\n xhr.upload.onprogress = (/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n /** @type {?} */\n let progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0);\n this._onProgressItem(item, progress);\n });\n xhr.onload = (/**\n * @return {?}\n */\n () => {\n /** @type {?} */\n let headers = this._parseHeaders(xhr.getAllResponseHeaders());\n /** @type {?} */\n let response = this._transformResponse(xhr.response, headers);\n /** @type {?} */\n let gist = this._isSuccessCode(xhr.status) ? 'Success' : 'Error';\n /** @type {?} */\n let method = '_on' + gist + 'Item';\n ((/** @type {?} */ (this)))[method](item, response, xhr.status, headers);\n this._onCompleteItem(item, response, xhr.status, headers);\n });\n xhr.onerror = (/**\n * @return {?}\n */\n () => {\n /** @type {?} */\n let headers = this._parseHeaders(xhr.getAllResponseHeaders());\n /** @type {?} */\n let response = this._transformResponse(xhr.response, headers);\n this._onErrorItem(item, response, xhr.status, headers);\n this._onCompleteItem(item, response, xhr.status, headers);\n });\n xhr.onabort = (/**\n * @return {?}\n */\n () => {\n /** @type {?} */\n let headers = this._parseHeaders(xhr.getAllResponseHeaders());\n /** @type {?} */\n let response = this._transformResponse(xhr.response, headers);\n this._onCancelItem(item, response, xhr.status, headers);\n this._onCompleteItem(item, response, xhr.status, headers);\n });\n xhr.open(item.method, item.url, true);\n xhr.withCredentials = item.withCredentials;\n if (this.options.headers) {\n for (let header of this.options.headers) {\n xhr.setRequestHeader(header.name, header.value);\n }\n }\n if (item.headers.length) {\n for (let header of item.headers) {\n xhr.setRequestHeader(header.name, header.value);\n }\n }\n if (this.authToken) {\n xhr.setRequestHeader(this.authTokenHeader, this.authToken);\n }\n xhr.onreadystatechange = (/**\n * @return {?}\n */\n function () {\n if (xhr.readyState == XMLHttpRequest.DONE) {\n that.response.emit(xhr.responseText);\n }\n });\n if (this.options.formatDataFunctionIsAsync) {\n sendable.then((/**\n * @param {?} result\n * @return {?}\n */\n (result) => xhr.send(JSON.stringify(result))));\n }\n else {\n xhr.send(sendable);\n }\n this._render();\n }\n /**\n * @protected\n * @param {?=} value\n * @return {?}\n */\n _getTotalProgress(value = 0) {\n if (this.options.removeAfterUpload) {\n return value;\n }\n /** @type {?} */\n let notUploaded = this.getNotUploadedItems().length;\n /** @type {?} */\n let uploaded = notUploaded ? this.queue.length - notUploaded : this.queue.length;\n /** @type {?} */\n let ratio = 100 / this.queue.length;\n /** @type {?} */\n let current = value * ratio / 100;\n return Math.round(uploaded * ratio + current);\n }\n /**\n * @protected\n * @param {?} filters\n * @return {?}\n */\n _getFilters(filters) {\n if (!filters) {\n return this.options.filters;\n }\n if (Array.isArray(filters)) {\n return filters;\n }\n if (typeof filters === 'string') {\n /** @type {?} */\n let names = filters.match(/[^\\s,]+/g);\n return this.options.filters\n .filter((/**\n * @param {?} filter\n * @return {?}\n */\n (filter) => names.indexOf(filter.name) !== -1));\n }\n return this.options.filters;\n }\n /**\n * @protected\n * @return {?}\n */\n _render() {\n return void 0;\n }\n /**\n * @protected\n * @return {?}\n */\n _queueLimitFilter() {\n return this.options.queueLimit === undefined || this.queue.length < this.options.queueLimit;\n }\n /**\n * @protected\n * @param {?} file\n * @param {?} filters\n * @param {?} options\n * @return {?}\n */\n _isValidFile(file, filters, options) {\n this._failFilterIndex = -1;\n return !filters.length ? true : filters.every((/**\n * @param {?} filter\n * @return {?}\n */\n (filter) => {\n this._failFilterIndex++;\n return filter.fn.call(this, file, options);\n }));\n }\n /**\n * @protected\n * @param {?} status\n * @return {?}\n */\n _isSuccessCode(status) {\n return (status >= 200 && status < 300) || status === 304;\n }\n /**\n * @protected\n * @param {?} response\n * @param {?} headers\n * @return {?}\n */\n _transformResponse(response, headers) {\n return response;\n }\n /**\n * @protected\n * @param {?} headers\n * @return {?}\n */\n _parseHeaders(headers) {\n /** @type {?} */\n let parsed = {};\n /** @type {?} */\n let key;\n /** @type {?} */\n let val;\n /** @type {?} */\n let i;\n if (!headers) {\n return parsed;\n }\n headers.split('\\n').map((/**\n * @param {?} line\n * @return {?}\n */\n (line) => {\n i = line.indexOf(':');\n key = line.slice(0, i).trim().toLowerCase();\n val = line.slice(i + 1).trim();\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }));\n return parsed;\n }\n /**\n * @protected\n * @param {?} item\n * @param {?} filter\n * @param {?} options\n * @return {?}\n */\n _onWhenAddingFileFailed(item, filter, options) {\n this.onWhenAddingFileFailed(item, filter, options);\n }\n /**\n * @protected\n * @param {?} item\n * @return {?}\n */\n _onAfterAddingFile(item) {\n this.onAfterAddingFile(item);\n }\n /**\n * @protected\n * @param {?} items\n * @return {?}\n */\n _onAfterAddingAll(items) {\n this.onAfterAddingAll(items);\n }\n /**\n * @protected\n * @param {?} item\n * @return {?}\n */\n _onBeforeUploadItem(item) {\n item._onBeforeUpload();\n this.onBeforeUploadItem(item);\n }\n /**\n * @protected\n * @param {?} item\n * @param {?} form\n * @return {?}\n */\n _onBuildItemForm(item, form) {\n item._onBuildForm(form);\n this.onBuildItemForm(item, form);\n }\n /**\n * @protected\n * @param {?} item\n * @param {?} progress\n * @return {?}\n */\n _onProgressItem(item, progress) {\n /** @type {?} */\n let total = this._getTotalProgress(progress);\n this.progress = total;\n item._onProgress(progress);\n this.onProgressItem(item, progress);\n this.onProgressAll(total);\n this._render();\n }\n /**\n * @protected\n * @param {?} item\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n _onSuccessItem(item, response, status, headers) {\n item._onSuccess(response, status, headers);\n this.onSuccessItem(item, response, status, headers);\n }\n /**\n * @protected\n * @param {?} item\n * @param {?} response\n * @param {?} status\n * @param {?} headers\n * @return {?}\n */\n _onCancelItem(item, response, status, headers) {\n item._onCancel(response, status, headers);\n this.onCancelItem(item, response, status, headers);\n }\n}\nif (false) {\n /** @type {?} */\n FileUploader.prototype.authToken;\n /** @type {?} */\n FileUploader.prototype.isUploading;\n /** @type {?} */\n FileUploader.prototype.queue;\n /** @type {?} */\n FileUploader.prototype.progress;\n /** @type {?} */\n FileUploader.prototype._nextIndex;\n /** @type {?} */\n FileUploader.prototype.autoUpload;\n /** @type {?} */\n FileUploader.prototype.authTokenHeader;\n /** @type {?} */\n FileUploader.prototype.response;\n /** @type {?} */\n FileUploader.prototype.options;\n /**\n * @type {?}\n * @protected\n */\n FileUploader.prototype._failFilterIndex;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass FileSelectDirective {\n /**\n * @param {?} element\n */\n constructor(element) {\n this.onFileSelected = new EventEmitter();\n this.element = element;\n }\n /**\n * @return {?}\n */\n getOptions() {\n return this.uploader.options;\n }\n /**\n * @return {?}\n */\n getFilters() {\n return {};\n }\n /**\n * @return {?}\n */\n isEmptyAfterSelection() {\n return !!this.element.nativeElement.attributes.multiple;\n }\n /**\n * @return {?}\n */\n onChange() {\n /** @type {?} */\n let files = this.element.nativeElement.files;\n /** @type {?} */\n let options = this.getOptions();\n /** @type {?} */\n let filters = this.getFilters();\n this.uploader.addToQueue(files, options, filters);\n this.onFileSelected.emit(files);\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = '';\n }\n }\n}\nFileSelectDirective.ɵfac = function FileSelectDirective_Factory(t) { return new (t || FileSelectDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nFileSelectDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: FileSelectDirective, selectors: [[\"\", \"ng2FileSelect\", \"\"]], hostBindings: function FileSelectDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"change\", function FileSelectDirective_change_HostBindingHandler() { return ctx.onChange(); });\n } }, inputs: { uploader: \"uploader\" }, outputs: { onFileSelected: \"onFileSelected\" } });\n/** @nocollapse */\nFileSelectDirective.ctorParameters = () => [\n { type: ElementRef }\n];\nFileSelectDirective.propDecorators = {\n uploader: [{ type: Input }],\n onFileSelected: [{ type: Output }],\n onChange: [{ type: HostListener, args: ['change',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FileSelectDirective, [{\n type: Directive,\n args: [{ selector: '[ng2FileSelect]' }]\n }], function () { return [{ type: ɵngcc0.ElementRef }]; }, { onFileSelected: [{\n type: Output\n }], \n /**\n * @return {?}\n */\n onChange: [{\n type: HostListener,\n args: ['change']\n }], uploader: [{\n type: Input\n }] }); })();\nif (false) {\n /** @type {?} */\n FileSelectDirective.prototype.uploader;\n /** @type {?} */\n FileSelectDirective.prototype.onFileSelected;\n /**\n * @type {?}\n * @protected\n */\n FileSelectDirective.prototype.element;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass FileDropDirective {\n /**\n * @param {?} element\n */\n constructor(element) {\n this.fileOver = new EventEmitter();\n this.onFileDrop = new EventEmitter();\n this.element = element;\n }\n /**\n * @return {?}\n */\n getOptions() {\n return this.uploader.options;\n }\n /**\n * @return {?}\n */\n getFilters() {\n return {};\n }\n /**\n * @param {?} event\n * @return {?}\n */\n onDrop(event) {\n /** @type {?} */\n let transfer = this._getTransfer(event);\n if (!transfer) {\n return;\n }\n /** @type {?} */\n let options = this.getOptions();\n /** @type {?} */\n let filters = this.getFilters();\n this._preventAndStop(event);\n this.uploader.addToQueue(transfer.files, options, filters);\n this.fileOver.emit(false);\n this.onFileDrop.emit(transfer.files);\n }\n /**\n * @param {?} event\n * @return {?}\n */\n onDragOver(event) {\n /** @type {?} */\n let transfer = this._getTransfer(event);\n if (!this._haveFiles(transfer.types)) {\n return;\n }\n transfer.dropEffect = 'copy';\n this._preventAndStop(event);\n this.fileOver.emit(true);\n }\n /**\n * @param {?} event\n * @return {?}\n */\n onDragLeave(event) {\n if (((/** @type {?} */ (this))).element) {\n if (event.currentTarget === ((/** @type {?} */ (this))).element[0]) {\n return;\n }\n }\n this._preventAndStop(event);\n this.fileOver.emit(false);\n }\n /**\n * @protected\n * @param {?} event\n * @return {?}\n */\n _getTransfer(event) {\n return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix;\n }\n /**\n * @protected\n * @param {?} event\n * @return {?}\n */\n _preventAndStop(event) {\n event.preventDefault();\n event.stopPropagation();\n }\n /**\n * @protected\n * @param {?} types\n * @return {?}\n */\n _haveFiles(types) {\n if (!types) {\n return false;\n }\n if (types.indexOf) {\n return types.indexOf('Files') !== -1;\n }\n else if (types.contains) {\n return types.contains('Files');\n }\n else {\n return false;\n }\n }\n}\nFileDropDirective.ɵfac = function FileDropDirective_Factory(t) { return new (t || FileDropDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nFileDropDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: FileDropDirective, selectors: [[\"\", \"ng2FileDrop\", \"\"]], hostBindings: function FileDropDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"drop\", function FileDropDirective_drop_HostBindingHandler($event) { return ctx.onDrop($event); })(\"dragover\", function FileDropDirective_dragover_HostBindingHandler($event) { return ctx.onDragOver($event); })(\"dragleave\", function FileDropDirective_dragleave_HostBindingHandler($event) { return ctx.onDragLeave($event); });\n } }, inputs: { uploader: \"uploader\" }, outputs: { fileOver: \"fileOver\", onFileDrop: \"onFileDrop\" } });\n/** @nocollapse */\nFileDropDirective.ctorParameters = () => [\n { type: ElementRef }\n];\nFileDropDirective.propDecorators = {\n uploader: [{ type: Input }],\n fileOver: [{ type: Output }],\n onFileDrop: [{ type: Output }],\n onDrop: [{ type: HostListener, args: ['drop', ['$event'],] }],\n onDragOver: [{ type: HostListener, args: ['dragover', ['$event'],] }],\n onDragLeave: [{ type: HostListener, args: ['dragleave', ['$event'],] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FileDropDirective, [{\n type: Directive,\n args: [{ selector: '[ng2FileDrop]' }]\n }], function () { return [{ type: ɵngcc0.ElementRef }]; }, { fileOver: [{\n type: Output\n }], onFileDrop: [{\n type: Output\n }], \n /**\n * @param {?} event\n * @return {?}\n */\n onDrop: [{\n type: HostListener,\n args: ['drop', ['$event']]\n }], \n /**\n * @param {?} event\n * @return {?}\n */\n onDragOver: [{\n type: HostListener,\n args: ['dragover', ['$event']]\n }], \n /**\n * @param {?} event\n * @return {?}\n */\n onDragLeave: [{\n type: HostListener,\n args: ['dragleave', ['$event']]\n }], uploader: [{\n type: Input\n }] }); })();\nif (false) {\n /** @type {?} */\n FileDropDirective.prototype.uploader;\n /** @type {?} */\n FileDropDirective.prototype.fileOver;\n /** @type {?} */\n FileDropDirective.prototype.onFileDrop;\n /**\n * @type {?}\n * @protected\n */\n FileDropDirective.prototype.element;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass FileUploadModule {\n}\nFileUploadModule.ɵfac = function FileUploadModule_Factory(t) { return new (t || FileUploadModule)(); };\nFileUploadModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: FileUploadModule });\nFileUploadModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [CommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FileUploadModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n declarations: [FileDropDirective, FileSelectDirective],\n exports: [FileDropDirective, FileSelectDirective]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FileUploadModule, { declarations: function () { return [FileDropDirective, FileSelectDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [FileDropDirective, FileSelectDirective]; } }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\nexport { FileDropDirective, FileItem, FileLikeObject, FileSelectDirective, FileUploadModule, FileUploader };\n\n","/*!\n * perfect-scrollbar v1.5.0\n * Copyright 2020 Hyunje Jun, MDBootstrap and Contributors\n * Licensed under MIT\n */\n\nfunction get(element) {\n return getComputedStyle(element);\n}\n\nfunction set(element, obj) {\n for (var key in obj) {\n var val = obj[key];\n if (typeof val === 'number') {\n val = val + \"px\";\n }\n element.style[key] = val;\n }\n return element;\n}\n\nfunction div(className) {\n var div = document.createElement('div');\n div.className = className;\n return div;\n}\n\nvar elMatches =\n typeof Element !== 'undefined' &&\n (Element.prototype.matches ||\n Element.prototype.webkitMatchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector);\n\nfunction matches(element, query) {\n if (!elMatches) {\n throw new Error('No element matching method supported');\n }\n\n return elMatches.call(element, query);\n}\n\nfunction remove(element) {\n if (element.remove) {\n element.remove();\n } else {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n}\n\nfunction queryChildren(element, selector) {\n return Array.prototype.filter.call(element.children, function (child) { return matches(child, selector); }\n );\n}\n\nvar cls = {\n main: 'ps',\n rtl: 'ps__rtl',\n element: {\n thumb: function (x) { return (\"ps__thumb-\" + x); },\n rail: function (x) { return (\"ps__rail-\" + x); },\n consuming: 'ps__child--consume',\n },\n state: {\n focus: 'ps--focus',\n clicking: 'ps--clicking',\n active: function (x) { return (\"ps--active-\" + x); },\n scrolling: function (x) { return (\"ps--scrolling-\" + x); },\n },\n};\n\n/*\n * Helper methods\n */\nvar scrollingClassTimeout = { x: null, y: null };\n\nfunction addScrollingClass(i, x) {\n var classList = i.element.classList;\n var className = cls.state.scrolling(x);\n\n if (classList.contains(className)) {\n clearTimeout(scrollingClassTimeout[x]);\n } else {\n classList.add(className);\n }\n}\n\nfunction removeScrollingClass(i, x) {\n scrollingClassTimeout[x] = setTimeout(\n function () { return i.isAlive && i.element.classList.remove(cls.state.scrolling(x)); },\n i.settings.scrollingThreshold\n );\n}\n\nfunction setScrollingClassInstantly(i, x) {\n addScrollingClass(i, x);\n removeScrollingClass(i, x);\n}\n\nvar EventElement = function EventElement(element) {\n this.element = element;\n this.handlers = {};\n};\n\nvar prototypeAccessors = { isEmpty: { configurable: true } };\n\nEventElement.prototype.bind = function bind (eventName, handler) {\n if (typeof this.handlers[eventName] === 'undefined') {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(handler);\n this.element.addEventListener(eventName, handler, false);\n};\n\nEventElement.prototype.unbind = function unbind (eventName, target) {\n var this$1 = this;\n\n this.handlers[eventName] = this.handlers[eventName].filter(function (handler) {\n if (target && handler !== target) {\n return true;\n }\n this$1.element.removeEventListener(eventName, handler, false);\n return false;\n });\n};\n\nEventElement.prototype.unbindAll = function unbindAll () {\n for (var name in this.handlers) {\n this.unbind(name);\n }\n};\n\nprototypeAccessors.isEmpty.get = function () {\n var this$1 = this;\n\n return Object.keys(this.handlers).every(\n function (key) { return this$1.handlers[key].length === 0; }\n );\n};\n\nObject.defineProperties( EventElement.prototype, prototypeAccessors );\n\nvar EventManager = function EventManager() {\n this.eventElements = [];\n};\n\nEventManager.prototype.eventElement = function eventElement (element) {\n var ee = this.eventElements.filter(function (ee) { return ee.element === element; })[0];\n if (!ee) {\n ee = new EventElement(element);\n this.eventElements.push(ee);\n }\n return ee;\n};\n\nEventManager.prototype.bind = function bind (element, eventName, handler) {\n this.eventElement(element).bind(eventName, handler);\n};\n\nEventManager.prototype.unbind = function unbind (element, eventName, handler) {\n var ee = this.eventElement(element);\n ee.unbind(eventName, handler);\n\n if (ee.isEmpty) {\n // remove\n this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n }\n};\n\nEventManager.prototype.unbindAll = function unbindAll () {\n this.eventElements.forEach(function (e) { return e.unbindAll(); });\n this.eventElements = [];\n};\n\nEventManager.prototype.once = function once (element, eventName, handler) {\n var ee = this.eventElement(element);\n var onceHandler = function (evt) {\n ee.unbind(eventName, onceHandler);\n handler(evt);\n };\n ee.bind(eventName, onceHandler);\n};\n\nfunction createEvent(name) {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(name);\n } else {\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(name, false, false, undefined);\n return evt;\n }\n}\n\nfunction processScrollDiff(\n i,\n axis,\n diff,\n useScrollingClass,\n forceFireReachEvent\n) {\n if ( useScrollingClass === void 0 ) useScrollingClass = true;\n if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n var fields;\n if (axis === 'top') {\n fields = [\n 'contentHeight',\n 'containerHeight',\n 'scrollTop',\n 'y',\n 'up',\n 'down' ];\n } else if (axis === 'left') {\n fields = [\n 'contentWidth',\n 'containerWidth',\n 'scrollLeft',\n 'x',\n 'left',\n 'right' ];\n } else {\n throw new Error('A proper axis should be provided');\n }\n\n processScrollDiff$1(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff$1(\n i,\n diff,\n ref,\n useScrollingClass,\n forceFireReachEvent\n) {\n var contentHeight = ref[0];\n var containerHeight = ref[1];\n var scrollTop = ref[2];\n var y = ref[3];\n var up = ref[4];\n var down = ref[5];\n if ( useScrollingClass === void 0 ) useScrollingClass = true;\n if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n var element = i.element;\n\n // reset reach\n i.reach[y] = null;\n\n // 1 for subpixel rounding\n if (element[scrollTop] < 1) {\n i.reach[y] = 'start';\n }\n\n // 1 for subpixel rounding\n if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n i.reach[y] = 'end';\n }\n\n if (diff) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + y)));\n\n if (diff < 0) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + up)));\n } else if (diff > 0) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + down)));\n }\n\n if (useScrollingClass) {\n setScrollingClassInstantly(i, y);\n }\n }\n\n if (i.reach[y] && (diff || forceFireReachEvent)) {\n element.dispatchEvent(createEvent((\"ps-\" + y + \"-reach-\" + (i.reach[y]))));\n }\n}\n\nfunction toInt(x) {\n return parseInt(x, 10) || 0;\n}\n\nfunction isEditable(el) {\n return (\n matches(el, 'input,[contenteditable]') ||\n matches(el, 'select,[contenteditable]') ||\n matches(el, 'textarea,[contenteditable]') ||\n matches(el, 'button,[contenteditable]')\n );\n}\n\nfunction outerWidth(element) {\n var styles = get(element);\n return (\n toInt(styles.width) +\n toInt(styles.paddingLeft) +\n toInt(styles.paddingRight) +\n toInt(styles.borderLeftWidth) +\n toInt(styles.borderRightWidth)\n );\n}\n\nvar env = {\n isWebKit:\n typeof document !== 'undefined' &&\n 'WebkitAppearance' in document.documentElement.style,\n supportsTouch:\n typeof window !== 'undefined' &&\n ('ontouchstart' in window ||\n ('maxTouchPoints' in window.navigator &&\n window.navigator.maxTouchPoints > 0) ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)),\n supportsIePointer:\n typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n isChrome:\n typeof navigator !== 'undefined' &&\n /Chrome/i.test(navigator && navigator.userAgent),\n};\n\nfunction updateGeometry(i) {\n var element = i.element;\n var roundedScrollTop = Math.floor(element.scrollTop);\n var rect = element.getBoundingClientRect();\n\n i.containerWidth = Math.ceil(rect.width);\n i.containerHeight = Math.ceil(rect.height);\n i.contentWidth = element.scrollWidth;\n i.contentHeight = element.scrollHeight;\n\n if (!element.contains(i.scrollbarXRail)) {\n // clean up and append\n queryChildren(element, cls.element.rail('x')).forEach(function (el) { return remove(el); }\n );\n element.appendChild(i.scrollbarXRail);\n }\n if (!element.contains(i.scrollbarYRail)) {\n // clean up and append\n queryChildren(element, cls.element.rail('y')).forEach(function (el) { return remove(el); }\n );\n element.appendChild(i.scrollbarYRail);\n }\n\n if (\n !i.settings.suppressScrollX &&\n i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n ) {\n i.scrollbarXActive = true;\n i.railXWidth = i.containerWidth - i.railXMarginWidth;\n i.railXRatio = i.containerWidth / i.railXWidth;\n i.scrollbarXWidth = getThumbSize(\n i,\n toInt((i.railXWidth * i.containerWidth) / i.contentWidth)\n );\n i.scrollbarXLeft = toInt(\n ((i.negativeScrollAdjustment + element.scrollLeft) *\n (i.railXWidth - i.scrollbarXWidth)) /\n (i.contentWidth - i.containerWidth)\n );\n } else {\n i.scrollbarXActive = false;\n }\n\n if (\n !i.settings.suppressScrollY &&\n i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n ) {\n i.scrollbarYActive = true;\n i.railYHeight = i.containerHeight - i.railYMarginHeight;\n i.railYRatio = i.containerHeight / i.railYHeight;\n i.scrollbarYHeight = getThumbSize(\n i,\n toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n );\n i.scrollbarYTop = toInt(\n (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n (i.contentHeight - i.containerHeight)\n );\n } else {\n i.scrollbarYActive = false;\n }\n\n if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n }\n if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n }\n\n updateCss(element, i);\n\n if (i.scrollbarXActive) {\n element.classList.add(cls.state.active('x'));\n } else {\n element.classList.remove(cls.state.active('x'));\n i.scrollbarXWidth = 0;\n i.scrollbarXLeft = 0;\n element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n }\n if (i.scrollbarYActive) {\n element.classList.add(cls.state.active('y'));\n } else {\n element.classList.remove(cls.state.active('y'));\n i.scrollbarYHeight = 0;\n i.scrollbarYTop = 0;\n element.scrollTop = 0;\n }\n}\n\nfunction getThumbSize(i, thumbSize) {\n if (i.settings.minScrollbarLength) {\n thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n }\n if (i.settings.maxScrollbarLength) {\n thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n }\n return thumbSize;\n}\n\nfunction updateCss(element, i) {\n var xRailOffset = { width: i.railXWidth };\n var roundedScrollTop = Math.floor(element.scrollTop);\n\n if (i.isRtl) {\n xRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth -\n i.contentWidth;\n } else {\n xRailOffset.left = element.scrollLeft;\n }\n if (i.isScrollbarXUsingBottom) {\n xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n } else {\n xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n }\n set(i.scrollbarXRail, xRailOffset);\n\n var yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n if (i.isScrollbarYUsingRight) {\n if (i.isRtl) {\n yRailOffset.right =\n i.contentWidth -\n (i.negativeScrollAdjustment + element.scrollLeft) -\n i.scrollbarYRight -\n i.scrollbarYOuterWidth -\n 9;\n } else {\n yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n }\n } else {\n if (i.isRtl) {\n yRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth * 2 -\n i.contentWidth -\n i.scrollbarYLeft -\n i.scrollbarYOuterWidth;\n } else {\n yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n }\n }\n set(i.scrollbarYRail, yRailOffset);\n\n set(i.scrollbarX, {\n left: i.scrollbarXLeft,\n width: i.scrollbarXWidth - i.railBorderXWidth,\n });\n set(i.scrollbarY, {\n top: i.scrollbarYTop,\n height: i.scrollbarYHeight - i.railBorderYWidth,\n });\n}\n\nfunction clickRail(i) {\n var element = i.element;\n\n i.event.bind(i.scrollbarY, 'mousedown', function (e) { return e.stopPropagation(); });\n i.event.bind(i.scrollbarYRail, 'mousedown', function (e) {\n var positionTop =\n e.pageY -\n window.pageYOffset -\n i.scrollbarYRail.getBoundingClientRect().top;\n var direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n i.element.scrollTop += direction * i.containerHeight;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n\n i.event.bind(i.scrollbarX, 'mousedown', function (e) { return e.stopPropagation(); });\n i.event.bind(i.scrollbarXRail, 'mousedown', function (e) {\n var positionLeft =\n e.pageX -\n window.pageXOffset -\n i.scrollbarXRail.getBoundingClientRect().left;\n var direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n i.element.scrollLeft += direction * i.containerWidth;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n}\n\nfunction dragThumb(i) {\n bindMouseScrollHandler(i, [\n 'containerWidth',\n 'contentWidth',\n 'pageX',\n 'railXWidth',\n 'scrollbarX',\n 'scrollbarXWidth',\n 'scrollLeft',\n 'x',\n 'scrollbarXRail' ]);\n bindMouseScrollHandler(i, [\n 'containerHeight',\n 'contentHeight',\n 'pageY',\n 'railYHeight',\n 'scrollbarY',\n 'scrollbarYHeight',\n 'scrollTop',\n 'y',\n 'scrollbarYRail' ]);\n}\n\nfunction bindMouseScrollHandler(\n i,\n ref\n) {\n var containerHeight = ref[0];\n var contentHeight = ref[1];\n var pageY = ref[2];\n var railYHeight = ref[3];\n var scrollbarY = ref[4];\n var scrollbarYHeight = ref[5];\n var scrollTop = ref[6];\n var y = ref[7];\n var scrollbarYRail = ref[8];\n\n var element = i.element;\n\n var startingScrollTop = null;\n var startingMousePageY = null;\n var scrollBy = null;\n\n function mouseMoveHandler(e) {\n if (e.touches && e.touches[0]) {\n e[pageY] = e.touches[0].pageY;\n }\n element[scrollTop] =\n startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\n addScrollingClass(i, y);\n updateGeometry(i);\n\n e.stopPropagation();\n e.preventDefault();\n }\n\n function mouseUpHandler() {\n removeScrollingClass(i, y);\n i[scrollbarYRail].classList.remove(cls.state.clicking);\n i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n }\n\n function bindMoves(e, touchMode) {\n startingScrollTop = element[scrollTop];\n if (touchMode && e.touches) {\n e[pageY] = e.touches[0].pageY;\n }\n startingMousePageY = e[pageY];\n scrollBy =\n (i[contentHeight] - i[containerHeight]) /\n (i[railYHeight] - i[scrollbarYHeight]);\n if (!touchMode) {\n i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\n e.preventDefault();\n } else {\n i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);\n }\n\n i[scrollbarYRail].classList.add(cls.state.clicking);\n\n e.stopPropagation();\n }\n\n i.event.bind(i[scrollbarY], 'mousedown', function (e) {\n bindMoves(e);\n });\n i.event.bind(i[scrollbarY], 'touchstart', function (e) {\n bindMoves(e, true);\n });\n}\n\nfunction keyboard(i) {\n var element = i.element;\n\n var elementHovered = function () { return matches(element, ':hover'); };\n var scrollbarFocused = function () { return matches(i.scrollbarX, ':focus') || matches(i.scrollbarY, ':focus'); };\n\n function shouldPreventDefault(deltaX, deltaY) {\n var scrollTop = Math.floor(element.scrollTop);\n if (deltaX === 0) {\n if (!i.scrollbarYActive) {\n return false;\n }\n if (\n (scrollTop === 0 && deltaY > 0) ||\n (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n\n var scrollLeft = element.scrollLeft;\n if (deltaY === 0) {\n if (!i.scrollbarXActive) {\n return false;\n }\n if (\n (scrollLeft === 0 && deltaX < 0) ||\n (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n return true;\n }\n\n i.event.bind(i.ownerDocument, 'keydown', function (e) {\n if (\n (e.isDefaultPrevented && e.isDefaultPrevented()) ||\n e.defaultPrevented\n ) {\n return;\n }\n\n if (!elementHovered() && !scrollbarFocused()) {\n return;\n }\n\n var activeElement = document.activeElement\n ? document.activeElement\n : i.ownerDocument.activeElement;\n if (activeElement) {\n if (activeElement.tagName === 'IFRAME') {\n activeElement = activeElement.contentDocument.activeElement;\n } else {\n // go deeper if element is a webcomponent\n while (activeElement.shadowRoot) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n }\n if (isEditable(activeElement)) {\n return;\n }\n }\n\n var deltaX = 0;\n var deltaY = 0;\n\n switch (e.which) {\n case 37: // left\n if (e.metaKey) {\n deltaX = -i.contentWidth;\n } else if (e.altKey) {\n deltaX = -i.containerWidth;\n } else {\n deltaX = -30;\n }\n break;\n case 38: // up\n if (e.metaKey) {\n deltaY = i.contentHeight;\n } else if (e.altKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = 30;\n }\n break;\n case 39: // right\n if (e.metaKey) {\n deltaX = i.contentWidth;\n } else if (e.altKey) {\n deltaX = i.containerWidth;\n } else {\n deltaX = 30;\n }\n break;\n case 40: // down\n if (e.metaKey) {\n deltaY = -i.contentHeight;\n } else if (e.altKey) {\n deltaY = -i.containerHeight;\n } else {\n deltaY = -30;\n }\n break;\n case 32: // space bar\n if (e.shiftKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = -i.containerHeight;\n }\n break;\n case 33: // page up\n deltaY = i.containerHeight;\n break;\n case 34: // page down\n deltaY = -i.containerHeight;\n break;\n case 36: // home\n deltaY = i.contentHeight;\n break;\n case 35: // end\n deltaY = -i.contentHeight;\n break;\n default:\n return;\n }\n\n if (i.settings.suppressScrollX && deltaX !== 0) {\n return;\n }\n if (i.settings.suppressScrollY && deltaY !== 0) {\n return;\n }\n\n element.scrollTop -= deltaY;\n element.scrollLeft += deltaX;\n updateGeometry(i);\n\n if (shouldPreventDefault(deltaX, deltaY)) {\n e.preventDefault();\n }\n });\n}\n\nfunction wheel(i) {\n var element = i.element;\n\n function shouldPreventDefault(deltaX, deltaY) {\n var roundedScrollTop = Math.floor(element.scrollTop);\n var isTop = element.scrollTop === 0;\n var isBottom =\n roundedScrollTop + element.offsetHeight === element.scrollHeight;\n var isLeft = element.scrollLeft === 0;\n var isRight =\n element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n var hitsBound;\n\n // pick axis with primary direction\n if (Math.abs(deltaY) > Math.abs(deltaX)) {\n hitsBound = isTop || isBottom;\n } else {\n hitsBound = isLeft || isRight;\n }\n\n return hitsBound ? !i.settings.wheelPropagation : true;\n }\n\n function getDeltaFromEvent(e) {\n var deltaX = e.deltaX;\n var deltaY = -1 * e.deltaY;\n\n if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n // OS X Safari\n deltaX = (-1 * e.wheelDeltaX) / 6;\n deltaY = e.wheelDeltaY / 6;\n }\n\n if (e.deltaMode && e.deltaMode === 1) {\n // Firefox in deltaMode 1: Line scrolling\n deltaX *= 10;\n deltaY *= 10;\n }\n\n if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n // IE in some mouse drivers\n deltaX = 0;\n deltaY = e.wheelDelta;\n }\n\n if (e.shiftKey) {\n // reverse axis with shift key\n return [-deltaY, -deltaX];\n }\n return [deltaX, deltaY];\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n // FIXME: this is a workaround for \n \n
    \n \n \n
    \n \n
    \n \n \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n \n`.replace(/(^|\\n)\\s*/g, '');\n\n /**\n * @returns {boolean}\n */\n const resetOldContainer = () => {\n const oldContainer = getContainer();\n if (!oldContainer) {\n return false;\n }\n oldContainer.remove();\n removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);\n return true;\n };\n const resetValidationMessage$1 = () => {\n globalState.currentInstance.resetValidationMessage();\n };\n const addInputChangeListeners = () => {\n const popup = getPopup();\n const input = getDirectChildByClass(popup, swalClasses.input);\n const file = getDirectChildByClass(popup, swalClasses.file);\n /** @type {HTMLInputElement} */\n const range = popup.querySelector(`.${swalClasses.range} input`);\n /** @type {HTMLOutputElement} */\n const rangeOutput = popup.querySelector(`.${swalClasses.range} output`);\n const select = getDirectChildByClass(popup, swalClasses.select);\n /** @type {HTMLInputElement} */\n const checkbox = popup.querySelector(`.${swalClasses.checkbox} input`);\n const textarea = getDirectChildByClass(popup, swalClasses.textarea);\n input.oninput = resetValidationMessage$1;\n file.onchange = resetValidationMessage$1;\n select.onchange = resetValidationMessage$1;\n checkbox.onchange = resetValidationMessage$1;\n textarea.oninput = resetValidationMessage$1;\n range.oninput = () => {\n resetValidationMessage$1();\n rangeOutput.value = range.value;\n };\n range.onchange = () => {\n resetValidationMessage$1();\n rangeOutput.value = range.value;\n };\n };\n\n /**\n * @param {string | HTMLElement} target\n * @returns {HTMLElement}\n */\n const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target;\n\n /**\n * @param {SweetAlertOptions} params\n */\n const setupAccessibility = params => {\n const popup = getPopup();\n popup.setAttribute('role', params.toast ? 'alert' : 'dialog');\n popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');\n if (!params.toast) {\n popup.setAttribute('aria-modal', 'true');\n }\n };\n\n /**\n * @param {HTMLElement} targetElement\n */\n const setupRTL = targetElement => {\n if (window.getComputedStyle(targetElement).direction === 'rtl') {\n addClass(getContainer(), swalClasses.rtl);\n }\n };\n\n /**\n * Add modal + backdrop + no-war message for Russians to DOM\n *\n * @param {SweetAlertOptions} params\n */\n const init = params => {\n // Clean up the old popup container if it exists\n const oldContainerExisted = resetOldContainer();\n\n /* istanbul ignore if */\n if (isNodeEnv()) {\n error('SweetAlert2 requires document to initialize');\n return;\n }\n const container = document.createElement('div');\n container.className = swalClasses.container;\n if (oldContainerExisted) {\n addClass(container, swalClasses['no-transition']);\n }\n setInnerHtml(container, sweetHTML);\n const targetElement = getTarget(params.target);\n targetElement.appendChild(container);\n setupAccessibility(params);\n setupRTL(targetElement);\n addInputChangeListeners();\n };\n\n /**\n * @param {HTMLElement | object | string} param\n * @param {HTMLElement} target\n */\n const parseHtmlToContainer = (param, target) => {\n // DOM element\n if (param instanceof HTMLElement) {\n target.appendChild(param);\n }\n\n // Object\n else if (typeof param === 'object') {\n handleObject(param, target);\n }\n\n // Plain string\n else if (param) {\n setInnerHtml(target, param);\n }\n };\n\n /**\n * @param {object} param\n * @param {HTMLElement} target\n */\n const handleObject = (param, target) => {\n // JQuery element(s)\n if (param.jquery) {\n handleJqueryElem(target, param);\n }\n\n // For other objects use their string representation\n else {\n setInnerHtml(target, param.toString());\n }\n };\n\n /**\n * @param {HTMLElement} target\n * @param {HTMLElement} elem\n */\n const handleJqueryElem = (target, elem) => {\n target.textContent = '';\n if (0 in elem) {\n for (let i = 0; (i in elem); i++) {\n target.appendChild(elem[i].cloneNode(true));\n }\n } else {\n target.appendChild(elem.cloneNode(true));\n }\n };\n\n /**\n * @returns {'webkitAnimationEnd' | 'animationend' | false}\n */\n const animationEndEvent = (() => {\n // Prevent run in Node env\n /* istanbul ignore if */\n if (isNodeEnv()) {\n return false;\n }\n const testEl = document.createElement('div');\n const transEndEventNames = {\n WebkitAnimation: 'webkitAnimationEnd',\n // Chrome, Safari and Opera\n animation: 'animationend' // Standard syntax\n };\n\n for (const i in transEndEventNames) {\n if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') {\n return transEndEventNames[i];\n }\n }\n return false;\n })();\n\n /**\n * Measure scrollbar width for padding body during modal show/hide\n * https://github.com/twbs/bootstrap/blob/master/js/src/modal.js\n *\n * @returns {number}\n */\n const measureScrollbar = () => {\n const scrollDiv = document.createElement('div');\n scrollDiv.className = swalClasses['scrollbar-measure'];\n document.body.appendChild(scrollDiv);\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const renderActions = (instance, params) => {\n const actions = getActions();\n const loader = getLoader();\n\n // Actions (buttons) wrapper\n if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {\n hide(actions);\n } else {\n show(actions);\n }\n\n // Custom class\n applyCustomClass(actions, params, 'actions');\n\n // Render all the buttons\n renderButtons(actions, loader, params);\n\n // Loader\n setInnerHtml(loader, params.loaderHtml);\n applyCustomClass(loader, params, 'loader');\n };\n\n /**\n * @param {HTMLElement} actions\n * @param {HTMLElement} loader\n * @param {SweetAlertOptions} params\n */\n function renderButtons(actions, loader, params) {\n const confirmButton = getConfirmButton();\n const denyButton = getDenyButton();\n const cancelButton = getCancelButton();\n\n // Render buttons\n renderButton(confirmButton, 'confirm', params);\n renderButton(denyButton, 'deny', params);\n renderButton(cancelButton, 'cancel', params);\n handleButtonsStyling(confirmButton, denyButton, cancelButton, params);\n if (params.reverseButtons) {\n if (params.toast) {\n actions.insertBefore(cancelButton, confirmButton);\n actions.insertBefore(denyButton, confirmButton);\n } else {\n actions.insertBefore(cancelButton, loader);\n actions.insertBefore(denyButton, loader);\n actions.insertBefore(confirmButton, loader);\n }\n }\n }\n\n /**\n * @param {HTMLElement} confirmButton\n * @param {HTMLElement} denyButton\n * @param {HTMLElement} cancelButton\n * @param {SweetAlertOptions} params\n */\n function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {\n if (!params.buttonsStyling) {\n removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n return;\n }\n addClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n\n // Buttons background colors\n if (params.confirmButtonColor) {\n confirmButton.style.backgroundColor = params.confirmButtonColor;\n addClass(confirmButton, swalClasses['default-outline']);\n }\n if (params.denyButtonColor) {\n denyButton.style.backgroundColor = params.denyButtonColor;\n addClass(denyButton, swalClasses['default-outline']);\n }\n if (params.cancelButtonColor) {\n cancelButton.style.backgroundColor = params.cancelButtonColor;\n addClass(cancelButton, swalClasses['default-outline']);\n }\n }\n\n /**\n * @param {HTMLElement} button\n * @param {'confirm' | 'deny' | 'cancel'} buttonType\n * @param {SweetAlertOptions} params\n */\n function renderButton(button, buttonType, params) {\n toggle(button, params[`show${capitalizeFirstLetter(buttonType)}Button`], 'inline-block');\n setInnerHtml(button, params[`${buttonType}ButtonText`]); // Set caption text\n button.setAttribute('aria-label', params[`${buttonType}ButtonAriaLabel`]); // ARIA label\n\n // Add buttons custom classes\n button.className = swalClasses[buttonType];\n applyCustomClass(button, params, `${buttonType}Button`);\n addClass(button, params[`${buttonType}ButtonClass`]);\n }\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const renderCloseButton = (instance, params) => {\n const closeButton = getCloseButton();\n setInnerHtml(closeButton, params.closeButtonHtml);\n\n // Custom class\n applyCustomClass(closeButton, params, 'closeButton');\n toggle(closeButton, params.showCloseButton);\n closeButton.setAttribute('aria-label', params.closeButtonAriaLabel);\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const renderContainer = (instance, params) => {\n const container = getContainer();\n if (!container) {\n return;\n }\n handleBackdropParam(container, params.backdrop);\n handlePositionParam(container, params.position);\n handleGrowParam(container, params.grow);\n\n // Custom class\n applyCustomClass(container, params, 'container');\n };\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['backdrop']} backdrop\n */\n function handleBackdropParam(container, backdrop) {\n if (typeof backdrop === 'string') {\n container.style.background = backdrop;\n } else if (!backdrop) {\n addClass([document.documentElement, document.body], swalClasses['no-backdrop']);\n }\n }\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['position']} position\n */\n function handlePositionParam(container, position) {\n if (position in swalClasses) {\n addClass(container, swalClasses[position]);\n } else {\n warn('The \"position\" parameter is not valid, defaulting to \"center\"');\n addClass(container, swalClasses.center);\n }\n }\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['grow']} grow\n */\n function handleGrowParam(container, grow) {\n if (grow && typeof grow === 'string') {\n const growClass = `grow-${grow}`;\n if (growClass in swalClasses) {\n addClass(container, swalClasses[growClass]);\n }\n }\n }\n\n /// \n\n /** @type {InputClass[]} */\n const inputClasses = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const renderInput = (instance, params) => {\n const popup = getPopup();\n const innerParams = privateProps.innerParams.get(instance);\n const rerender = !innerParams || params.input !== innerParams.input;\n inputClasses.forEach(inputClass => {\n const inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]);\n\n // set attributes\n setAttributes(inputClass, params.inputAttributes);\n\n // set class\n inputContainer.className = swalClasses[inputClass];\n if (rerender) {\n hide(inputContainer);\n }\n });\n if (params.input) {\n if (rerender) {\n showInput(params);\n }\n // set custom class\n setCustomClass(params);\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n const showInput = params => {\n if (!renderInputType[params.input]) {\n error(`Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"${params.input}\"`);\n return;\n }\n const inputContainer = getInputContainer(params.input);\n const input = renderInputType[params.input](inputContainer, params);\n show(inputContainer);\n\n // input autofocus\n if (params.inputAutoFocus) {\n setTimeout(() => {\n focusInput(input);\n });\n }\n };\n\n /**\n * @param {HTMLInputElement} input\n */\n const removeAttributes = input => {\n for (let i = 0; i < input.attributes.length; i++) {\n const attrName = input.attributes[i].name;\n if (!['type', 'value', 'style'].includes(attrName)) {\n input.removeAttribute(attrName);\n }\n }\n };\n\n /**\n * @param {InputClass} inputClass\n * @param {SweetAlertOptions['inputAttributes']} inputAttributes\n */\n const setAttributes = (inputClass, inputAttributes) => {\n const input = getInput$1(getPopup(), inputClass);\n if (!input) {\n return;\n }\n removeAttributes(input);\n for (const attr in inputAttributes) {\n input.setAttribute(attr, inputAttributes[attr]);\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n const setCustomClass = params => {\n const inputContainer = getInputContainer(params.input);\n if (typeof params.customClass === 'object') {\n addClass(inputContainer, params.customClass.input);\n }\n };\n\n /**\n * @param {HTMLInputElement | HTMLTextAreaElement} input\n * @param {SweetAlertOptions} params\n */\n const setInputPlaceholder = (input, params) => {\n if (!input.placeholder || params.inputPlaceholder) {\n input.placeholder = params.inputPlaceholder;\n }\n };\n\n /**\n * @param {Input} input\n * @param {Input} prependTo\n * @param {SweetAlertOptions} params\n */\n const setInputLabel = (input, prependTo, params) => {\n if (params.inputLabel) {\n input.id = swalClasses.input;\n const label = document.createElement('label');\n const labelClass = swalClasses['input-label'];\n label.setAttribute('for', input.id);\n label.className = labelClass;\n if (typeof params.customClass === 'object') {\n addClass(label, params.customClass.inputLabel);\n }\n label.innerText = params.inputLabel;\n prependTo.insertAdjacentElement('beforebegin', label);\n }\n };\n\n /**\n * @param {SweetAlertOptions['input']} inputType\n * @returns {HTMLElement}\n */\n const getInputContainer = inputType => {\n return getDirectChildByClass(getPopup(), swalClasses[inputType] || swalClasses.input);\n };\n\n /**\n * @param {HTMLInputElement | HTMLOutputElement | HTMLTextAreaElement} input\n * @param {SweetAlertOptions['inputValue']} inputValue\n */\n const checkAndSetInputValue = (input, inputValue) => {\n if (['string', 'number'].includes(typeof inputValue)) {\n input.value = `${inputValue}`;\n } else if (!isPromise(inputValue)) {\n warn(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof inputValue}\"`);\n }\n };\n\n /** @type {Record Input>} */\n const renderInputType = {};\n\n /**\n * @param {HTMLInputElement} input\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => {\n checkAndSetInputValue(input, params.inputValue);\n setInputLabel(input, input, params);\n setInputPlaceholder(input, params);\n input.type = params.input;\n return input;\n };\n\n /**\n * @param {HTMLInputElement} input\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.file = (input, params) => {\n setInputLabel(input, input, params);\n setInputPlaceholder(input, params);\n return input;\n };\n\n /**\n * @param {HTMLInputElement} range\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.range = (range, params) => {\n const rangeInput = range.querySelector('input');\n const rangeOutput = range.querySelector('output');\n checkAndSetInputValue(rangeInput, params.inputValue);\n rangeInput.type = params.input;\n checkAndSetInputValue(rangeOutput, params.inputValue);\n setInputLabel(rangeInput, range, params);\n return range;\n };\n\n /**\n * @param {HTMLSelectElement} select\n * @param {SweetAlertOptions} params\n * @returns {HTMLSelectElement}\n */\n renderInputType.select = (select, params) => {\n select.textContent = '';\n if (params.inputPlaceholder) {\n const placeholder = document.createElement('option');\n setInnerHtml(placeholder, params.inputPlaceholder);\n placeholder.value = '';\n placeholder.disabled = true;\n placeholder.selected = true;\n select.appendChild(placeholder);\n }\n setInputLabel(select, select, params);\n return select;\n };\n\n /**\n * @param {HTMLInputElement} radio\n * @returns {HTMLInputElement}\n */\n renderInputType.radio = radio => {\n radio.textContent = '';\n return radio;\n };\n\n /**\n * @param {HTMLLabelElement} checkboxContainer\n * @param {SweetAlertOptions} params\n * @returns {HTMLInputElement}\n */\n renderInputType.checkbox = (checkboxContainer, params) => {\n const checkbox = getInput$1(getPopup(), 'checkbox');\n checkbox.value = '1';\n checkbox.id = swalClasses.checkbox;\n checkbox.checked = Boolean(params.inputValue);\n const label = checkboxContainer.querySelector('span');\n setInnerHtml(label, params.inputPlaceholder);\n return checkbox;\n };\n\n /**\n * @param {HTMLTextAreaElement} textarea\n * @param {SweetAlertOptions} params\n * @returns {HTMLTextAreaElement}\n */\n renderInputType.textarea = (textarea, params) => {\n checkAndSetInputValue(textarea, params.inputValue);\n setInputPlaceholder(textarea, params);\n setInputLabel(textarea, textarea, params);\n\n /**\n * @param {HTMLElement} el\n * @returns {number}\n */\n const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight);\n\n // https://github.com/sweetalert2/sweetalert2/issues/2291\n setTimeout(() => {\n // https://github.com/sweetalert2/sweetalert2/issues/1699\n if ('MutationObserver' in window) {\n const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);\n const textareaResizeHandler = () => {\n const textareaWidth = textarea.offsetWidth + getMargin(textarea);\n if (textareaWidth > initialPopupWidth) {\n getPopup().style.width = `${textareaWidth}px`;\n } else {\n getPopup().style.width = null;\n }\n };\n new MutationObserver(textareaResizeHandler).observe(textarea, {\n attributes: true,\n attributeFilter: ['style']\n });\n }\n });\n return textarea;\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const renderContent = (instance, params) => {\n const htmlContainer = getHtmlContainer();\n applyCustomClass(htmlContainer, params, 'htmlContainer');\n\n // Content as HTML\n if (params.html) {\n parseHtmlToContainer(params.html, htmlContainer);\n show(htmlContainer, 'block');\n }\n\n // Content as plain text\n else if (params.text) {\n htmlContainer.textContent = params.text;\n show(htmlContainer, 'block');\n }\n\n // No content\n else {\n hide(htmlContainer);\n }\n renderInput(instance, params);\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const renderFooter = (instance, params) => {\n const footer = getFooter();\n toggle(footer, params.footer);\n if (params.footer) {\n parseHtmlToContainer(params.footer, footer);\n }\n\n // Custom class\n applyCustomClass(footer, params, 'footer');\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const renderIcon = (instance, params) => {\n const innerParams = privateProps.innerParams.get(instance);\n const icon = getIcon();\n\n // if the given icon already rendered, apply the styling without re-rendering the icon\n if (innerParams && params.icon === innerParams.icon) {\n // Custom or default content\n setContent(icon, params);\n applyStyles(icon, params);\n return;\n }\n if (!params.icon && !params.iconHtml) {\n hide(icon);\n return;\n }\n if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) {\n error(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${params.icon}\"`);\n hide(icon);\n return;\n }\n show(icon);\n\n // Custom or default content\n setContent(icon, params);\n applyStyles(icon, params);\n\n // Animate icon\n addClass(icon, params.showClass.icon);\n };\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n const applyStyles = (icon, params) => {\n for (const iconType in iconTypes) {\n if (params.icon !== iconType) {\n removeClass(icon, iconTypes[iconType]);\n }\n }\n addClass(icon, iconTypes[params.icon]);\n\n // Icon color\n setColor(icon, params);\n\n // Success icon background color\n adjustSuccessIconBackgroundColor();\n\n // Custom class\n applyCustomClass(icon, params, 'icon');\n };\n\n // Adjust success icon background color to match the popup background color\n const adjustSuccessIconBackgroundColor = () => {\n const popup = getPopup();\n const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');\n /** @type {NodeListOf} */\n const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');\n for (let i = 0; i < successIconParts.length; i++) {\n successIconParts[i].style.backgroundColor = popupBackgroundColor;\n }\n };\n const successIconHtml = `\n
    \n \n
    \n
    \n`;\n const errorIconHtml = `\n \n \n \n \n`;\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n const setContent = (icon, params) => {\n let oldContent = icon.innerHTML;\n let newContent;\n if (params.iconHtml) {\n newContent = iconContent(params.iconHtml);\n } else if (params.icon === 'success') {\n newContent = successIconHtml;\n oldContent = oldContent.replace(/ style=\".*?\"/g, ''); // undo adjustSuccessIconBackgroundColor()\n } else if (params.icon === 'error') {\n newContent = errorIconHtml;\n } else {\n const defaultIconHtml = {\n question: '?',\n warning: '!',\n info: 'i'\n };\n newContent = iconContent(defaultIconHtml[params.icon]);\n }\n if (oldContent.trim() !== newContent.trim()) {\n setInnerHtml(icon, newContent);\n }\n };\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n const setColor = (icon, params) => {\n if (!params.iconColor) {\n return;\n }\n icon.style.color = params.iconColor;\n icon.style.borderColor = params.iconColor;\n for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) {\n setStyle(icon, sel, 'backgroundColor', params.iconColor);\n }\n setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor);\n };\n\n /**\n * @param {string} content\n * @returns {string}\n */\n const iconContent = content => `
    ${content}
    `;\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const renderImage = (instance, params) => {\n const image = getImage();\n if (!params.imageUrl) {\n hide(image);\n return;\n }\n show(image, '');\n\n // Src, alt\n image.setAttribute('src', params.imageUrl);\n image.setAttribute('alt', params.imageAlt);\n\n // Width, height\n applyNumericalStyle(image, 'width', params.imageWidth);\n applyNumericalStyle(image, 'height', params.imageHeight);\n\n // Class\n image.className = swalClasses.image;\n applyCustomClass(image, params, 'image');\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const renderPopup = (instance, params) => {\n const container = getContainer();\n const popup = getPopup();\n\n // Width\n // https://github.com/sweetalert2/sweetalert2/issues/2170\n if (params.toast) {\n applyNumericalStyle(container, 'width', params.width);\n popup.style.width = '100%';\n popup.insertBefore(getLoader(), getIcon());\n } else {\n applyNumericalStyle(popup, 'width', params.width);\n }\n\n // Padding\n applyNumericalStyle(popup, 'padding', params.padding);\n\n // Color\n if (params.color) {\n popup.style.color = params.color;\n }\n\n // Background\n if (params.background) {\n popup.style.background = params.background;\n }\n hide(getValidationMessage());\n\n // Classes\n addClasses$1(popup, params);\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} params\n */\n const addClasses$1 = (popup, params) => {\n // Default Class + showClass when updating Swal.update({})\n popup.className = `${swalClasses.popup} ${isVisible$1(popup) ? params.showClass.popup : ''}`;\n if (params.toast) {\n addClass([document.documentElement, document.body], swalClasses['toast-shown']);\n addClass(popup, swalClasses.toast);\n } else {\n addClass(popup, swalClasses.modal);\n }\n\n // Custom class\n applyCustomClass(popup, params, 'popup');\n if (typeof params.customClass === 'string') {\n addClass(popup, params.customClass);\n }\n\n // Icon class (#1842)\n if (params.icon) {\n addClass(popup, swalClasses[`icon-${params.icon}`]);\n }\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const renderProgressSteps = (instance, params) => {\n const progressStepsContainer = getProgressSteps();\n if (!params.progressSteps || params.progressSteps.length === 0) {\n hide(progressStepsContainer);\n return;\n }\n show(progressStepsContainer);\n progressStepsContainer.textContent = '';\n if (params.currentProgressStep >= params.progressSteps.length) {\n warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');\n }\n params.progressSteps.forEach((step, index) => {\n const stepEl = createStepElement(step);\n progressStepsContainer.appendChild(stepEl);\n if (index === params.currentProgressStep) {\n addClass(stepEl, swalClasses['active-progress-step']);\n }\n if (index !== params.progressSteps.length - 1) {\n const lineEl = createLineElement(params);\n progressStepsContainer.appendChild(lineEl);\n }\n });\n };\n\n /**\n * @param {string} step\n * @returns {HTMLLIElement}\n */\n const createStepElement = step => {\n const stepEl = document.createElement('li');\n addClass(stepEl, swalClasses['progress-step']);\n setInnerHtml(stepEl, step);\n return stepEl;\n };\n\n /**\n * @param {SweetAlertOptions} params\n * @returns {HTMLLIElement}\n */\n const createLineElement = params => {\n const lineEl = document.createElement('li');\n addClass(lineEl, swalClasses['progress-step-line']);\n if (params.progressStepsDistance) {\n applyNumericalStyle(lineEl, 'width', params.progressStepsDistance);\n }\n return lineEl;\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const renderTitle = (instance, params) => {\n const title = getTitle();\n toggle(title, params.title || params.titleText, 'block');\n if (params.title) {\n parseHtmlToContainer(params.title, title);\n }\n if (params.titleText) {\n title.innerText = params.titleText;\n }\n\n // Custom class\n applyCustomClass(title, params, 'title');\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const render = (instance, params) => {\n renderPopup(instance, params);\n renderContainer(instance, params);\n renderProgressSteps(instance, params);\n renderIcon(instance, params);\n renderImage(instance, params);\n renderTitle(instance, params);\n renderCloseButton(instance, params);\n renderContent(instance, params);\n renderActions(instance, params);\n renderFooter(instance, params);\n if (typeof params.didRender === 'function') {\n params.didRender(getPopup());\n }\n };\n\n /**\n * Hides loader and shows back the button which was hidden by .showLoading()\n */\n function hideLoading() {\n // do nothing if popup is closed\n const innerParams = privateProps.innerParams.get(this);\n if (!innerParams) {\n return;\n }\n const domCache = privateProps.domCache.get(this);\n hide(domCache.loader);\n if (isToast()) {\n if (innerParams.icon) {\n show(getIcon());\n }\n } else {\n showRelatedButton(domCache);\n }\n removeClass([domCache.popup, domCache.actions], swalClasses.loading);\n domCache.popup.removeAttribute('aria-busy');\n domCache.popup.removeAttribute('data-loading');\n domCache.confirmButton.disabled = false;\n domCache.denyButton.disabled = false;\n domCache.cancelButton.disabled = false;\n }\n const showRelatedButton = domCache => {\n const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace'));\n if (buttonToReplace.length) {\n show(buttonToReplace[0], 'inline-block');\n } else if (allButtonsAreHidden()) {\n hide(domCache.actions);\n }\n };\n\n /**\n * Gets the input DOM node, this method works with input parameter.\n *\n * @param {SweetAlert2} instance\n * @returns {HTMLElement | null}\n */\n function getInput(instance) {\n const innerParams = privateProps.innerParams.get(instance || this);\n const domCache = privateProps.domCache.get(instance || this);\n if (!domCache) {\n return null;\n }\n return getInput$1(domCache.popup, innerParams.input);\n }\n\n /*\n * Global function to determine if SweetAlert2 popup is shown\n */\n const isVisible = () => {\n return isVisible$1(getPopup());\n };\n\n /*\n * Global function to click 'Confirm' button\n */\n const clickConfirm = () => getConfirmButton() && getConfirmButton().click();\n\n /*\n * Global function to click 'Deny' button\n */\n const clickDeny = () => getDenyButton() && getDenyButton().click();\n\n /*\n * Global function to click 'Cancel' button\n */\n const clickCancel = () => getCancelButton() && getCancelButton().click();\n\n const DismissReason = Object.freeze({\n cancel: 'cancel',\n backdrop: 'backdrop',\n close: 'close',\n esc: 'esc',\n timer: 'timer'\n });\n\n /**\n * @param {GlobalState} globalState\n */\n const removeKeydownHandler = globalState => {\n if (globalState.keydownTarget && globalState.keydownHandlerAdded) {\n globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {\n capture: globalState.keydownListenerCapture\n });\n globalState.keydownHandlerAdded = false;\n }\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {GlobalState} globalState\n * @param {SweetAlertOptions} innerParams\n * @param {*} dismissWith\n */\n const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => {\n removeKeydownHandler(globalState);\n if (!innerParams.toast) {\n globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith);\n globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();\n globalState.keydownListenerCapture = innerParams.keydownListenerCapture;\n globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {\n capture: globalState.keydownListenerCapture\n });\n globalState.keydownHandlerAdded = true;\n }\n };\n\n /**\n * @param {number} index\n * @param {number} increment\n */\n const setFocus = (index, increment) => {\n const focusableElements = getFocusableElements();\n // search for visible elements and select the next possible match\n if (focusableElements.length) {\n index = index + increment;\n\n // rollover to first item\n if (index === focusableElements.length) {\n index = 0;\n\n // go to last item\n } else if (index === -1) {\n index = focusableElements.length - 1;\n }\n focusableElements[index].focus();\n return;\n }\n // no visible focusable elements, focus the popup\n getPopup().focus();\n };\n const arrowKeysNextButton = ['ArrowRight', 'ArrowDown'];\n const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp'];\n\n /**\n * @param {SweetAlert2} instance\n * @param {KeyboardEvent} event\n * @param {Function} dismissWith\n */\n const keydownHandler = (instance, event, dismissWith) => {\n const innerParams = privateProps.innerParams.get(instance);\n if (!innerParams) {\n return; // This instance has already been destroyed\n }\n\n // Ignore keydown during IME composition\n // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition\n // https://github.com/sweetalert2/sweetalert2/issues/720\n // https://github.com/sweetalert2/sweetalert2/issues/2406\n if (event.isComposing || event.keyCode === 229) {\n return;\n }\n if (innerParams.stopKeydownPropagation) {\n event.stopPropagation();\n }\n\n // ENTER\n if (event.key === 'Enter') {\n handleEnter(instance, event, innerParams);\n }\n\n // TAB\n else if (event.key === 'Tab') {\n handleTab(event);\n }\n\n // ARROWS - switch focus between buttons\n else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(event.key)) {\n handleArrows(event.key);\n }\n\n // ESC\n else if (event.key === 'Escape') {\n handleEsc(event, innerParams, dismissWith);\n }\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {KeyboardEvent} event\n * @param {SweetAlertOptions} innerParams\n */\n const handleEnter = (instance, event, innerParams) => {\n // https://github.com/sweetalert2/sweetalert2/issues/2386\n if (!callIfFunction(innerParams.allowEnterKey)) {\n return;\n }\n if (event.target && instance.getInput() && event.target instanceof HTMLElement && event.target.outerHTML === instance.getInput().outerHTML) {\n if (['textarea', 'file'].includes(innerParams.input)) {\n return; // do not submit\n }\n\n clickConfirm();\n event.preventDefault();\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n */\n const handleTab = event => {\n const targetElement = event.target;\n const focusableElements = getFocusableElements();\n let btnIndex = -1;\n for (let i = 0; i < focusableElements.length; i++) {\n if (targetElement === focusableElements[i]) {\n btnIndex = i;\n break;\n }\n }\n\n // Cycle to the next button\n if (!event.shiftKey) {\n setFocus(btnIndex, 1);\n }\n\n // Cycle to the prev button\n else {\n setFocus(btnIndex, -1);\n }\n event.stopPropagation();\n event.preventDefault();\n };\n\n /**\n * @param {string} key\n */\n const handleArrows = key => {\n const confirmButton = getConfirmButton();\n const denyButton = getDenyButton();\n const cancelButton = getCancelButton();\n /** @type HTMLElement[] */\n const buttons = [confirmButton, denyButton, cancelButton];\n if (document.activeElement instanceof HTMLElement && !buttons.includes(document.activeElement)) {\n return;\n }\n const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling';\n let buttonToFocus = document.activeElement;\n for (let i = 0; i < getActions().children.length; i++) {\n buttonToFocus = buttonToFocus[sibling];\n if (!buttonToFocus) {\n return;\n }\n if (buttonToFocus instanceof HTMLButtonElement && isVisible$1(buttonToFocus)) {\n break;\n }\n }\n if (buttonToFocus instanceof HTMLButtonElement) {\n buttonToFocus.focus();\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n * @param {SweetAlertOptions} innerParams\n * @param {Function} dismissWith\n */\n const handleEsc = (event, innerParams, dismissWith) => {\n if (callIfFunction(innerParams.allowEscapeKey)) {\n event.preventDefault();\n dismissWith(DismissReason.esc);\n }\n };\n\n /**\n * This module contains `WeakMap`s for each effectively-\"private property\" that a `Swal` has.\n * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n * This is the approach that Babel will probably take to implement private methods/fields\n * https://github.com/tc39/proposal-private-methods\n * https://github.com/babel/babel/pull/7555\n * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n * then we can use that language feature.\n */\n\n var privateMethods = {\n swalPromiseResolve: new WeakMap(),\n swalPromiseReject: new WeakMap()\n };\n\n // From https://developer.paciellogroup.com/blog/2018/06/the-current-state-of-modal-dialog-accessibility/\n // Adding aria-hidden=\"true\" to elements outside of the active modal dialog ensures that\n // elements not within the active modal dialog will not be surfaced if a user opens a screen\n // reader’s list of elements (headings, form controls, landmarks, etc.) in the document.\n\n const setAriaHidden = () => {\n const bodyChildren = Array.from(document.body.children);\n bodyChildren.forEach(el => {\n if (el === getContainer() || el.contains(getContainer())) {\n return;\n }\n if (el.hasAttribute('aria-hidden')) {\n el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden'));\n }\n el.setAttribute('aria-hidden', 'true');\n });\n };\n const unsetAriaHidden = () => {\n const bodyChildren = Array.from(document.body.children);\n bodyChildren.forEach(el => {\n if (el.hasAttribute('data-previous-aria-hidden')) {\n el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden'));\n el.removeAttribute('data-previous-aria-hidden');\n } else {\n el.removeAttribute('aria-hidden');\n }\n });\n };\n\n /* istanbul ignore file */\n\n // Fix iOS scrolling http://stackoverflow.com/q/39626302\n\n const iOSfix = () => {\n const iOS =\n // @ts-ignore\n /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n if (iOS && !hasClass(document.body, swalClasses.iosfix)) {\n const offset = document.body.scrollTop;\n document.body.style.top = `${offset * -1}px`;\n addClass(document.body, swalClasses.iosfix);\n lockBodyScroll();\n addBottomPaddingForTallPopups();\n }\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1948\n */\n const addBottomPaddingForTallPopups = () => {\n const ua = navigator.userAgent;\n const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);\n const webkit = !!ua.match(/WebKit/i);\n const iOSSafari = iOS && webkit && !ua.match(/CriOS/i);\n if (iOSSafari) {\n const bottomPanelHeight = 44;\n if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) {\n getContainer().style.paddingBottom = `${bottomPanelHeight}px`;\n }\n }\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1246\n */\n const lockBodyScroll = () => {\n const container = getContainer();\n let preventTouchMove;\n /**\n * @param {TouchEvent} event\n */\n container.ontouchstart = event => {\n preventTouchMove = shouldPreventTouchMove(event);\n };\n /**\n * @param {TouchEvent} event\n */\n container.ontouchmove = event => {\n if (preventTouchMove) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n };\n\n /**\n * @param {TouchEvent} event\n * @returns {boolean}\n */\n const shouldPreventTouchMove = event => {\n const target = event.target;\n const container = getContainer();\n if (isStylus(event) || isZoom(event)) {\n return false;\n }\n if (target === container) {\n return true;\n }\n if (!isScrollable(container) && target instanceof HTMLElement && target.tagName !== 'INPUT' &&\n // #1603\n target.tagName !== 'TEXTAREA' &&\n // #2266\n !(isScrollable(getHtmlContainer()) &&\n // #1944\n getHtmlContainer().contains(target))) {\n return true;\n }\n return false;\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1786\n *\n * @param {*} event\n * @returns {boolean}\n */\n const isStylus = event => {\n return event.touches && event.touches.length && event.touches[0].touchType === 'stylus';\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1891\n *\n * @param {TouchEvent} event\n * @returns {boolean}\n */\n const isZoom = event => {\n return event.touches && event.touches.length > 1;\n };\n const undoIOSfix = () => {\n if (hasClass(document.body, swalClasses.iosfix)) {\n const offset = parseInt(document.body.style.top, 10);\n removeClass(document.body, swalClasses.iosfix);\n document.body.style.top = '';\n document.body.scrollTop = offset * -1;\n }\n };\n\n const fixScrollbar = () => {\n // for queues, do not do this more than once\n if (states.previousBodyPadding !== null) {\n return;\n }\n // if the body has overflow\n if (document.body.scrollHeight > window.innerHeight) {\n // add padding so the content doesn't shift after removal of scrollbar\n states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));\n document.body.style.paddingRight = `${states.previousBodyPadding + measureScrollbar()}px`;\n }\n };\n const undoScrollbar = () => {\n if (states.previousBodyPadding !== null) {\n document.body.style.paddingRight = `${states.previousBodyPadding}px`;\n states.previousBodyPadding = null;\n }\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {HTMLElement} container\n * @param {boolean} returnFocus\n * @param {Function} didClose\n */\n function removePopupAndResetState(instance, container, returnFocus, didClose) {\n if (isToast()) {\n triggerDidCloseAndDispose(instance, didClose);\n } else {\n restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose));\n removeKeydownHandler(globalState);\n }\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n // workaround for #2088\n // for some reason removing the container in Safari will scroll the document to bottom\n if (isSafari) {\n container.setAttribute('style', 'display:none !important');\n container.removeAttribute('class');\n container.innerHTML = '';\n } else {\n container.remove();\n }\n if (isModal()) {\n undoScrollbar();\n undoIOSfix();\n unsetAriaHidden();\n }\n removeBodyClasses();\n }\n\n /**\n * Remove SweetAlert2 classes from body\n */\n function removeBodyClasses() {\n removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]);\n }\n\n /**\n * Instance method to close sweetAlert\n *\n * @param {any} resolveValue\n */\n function close(resolveValue) {\n resolveValue = prepareResolveValue(resolveValue);\n const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);\n const didClose = triggerClosePopup(this);\n if (this.isAwaitingPromise()) {\n // A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335\n if (!resolveValue.isDismissed) {\n handleAwaitingPromise(this);\n swalPromiseResolve(resolveValue);\n }\n } else if (didClose) {\n // Resolve Swal promise\n swalPromiseResolve(resolveValue);\n }\n }\n\n /**\n * @returns {boolean}\n */\n function isAwaitingPromise() {\n return !!privateProps.awaitingPromise.get(this);\n }\n const triggerClosePopup = instance => {\n const popup = getPopup();\n if (!popup) {\n return false;\n }\n const innerParams = privateProps.innerParams.get(instance);\n if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {\n return false;\n }\n removeClass(popup, innerParams.showClass.popup);\n addClass(popup, innerParams.hideClass.popup);\n const backdrop = getContainer();\n removeClass(backdrop, innerParams.showClass.backdrop);\n addClass(backdrop, innerParams.hideClass.backdrop);\n handlePopupAnimation(instance, popup, innerParams);\n return true;\n };\n\n /**\n * @param {any} error\n */\n function rejectPromise(error) {\n const rejectPromise = privateMethods.swalPromiseReject.get(this);\n handleAwaitingPromise(this);\n if (rejectPromise) {\n // Reject Swal promise\n rejectPromise(error);\n }\n }\n\n /**\n * @param {SweetAlert2} instance\n */\n const handleAwaitingPromise = instance => {\n // @ts-ignore\n if (instance.isAwaitingPromise()) {\n privateProps.awaitingPromise.delete(instance);\n // The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335\n if (!privateProps.innerParams.get(instance)) {\n // @ts-ignore\n instance._destroy();\n }\n }\n };\n\n /**\n * @param {any} resolveValue\n * @returns {SweetAlertResult}\n */\n const prepareResolveValue = resolveValue => {\n // When user calls Swal.close()\n if (typeof resolveValue === 'undefined') {\n return {\n isConfirmed: false,\n isDenied: false,\n isDismissed: true\n };\n }\n return Object.assign({\n isConfirmed: false,\n isDenied: false,\n isDismissed: false\n }, resolveValue);\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} innerParams\n */\n const handlePopupAnimation = (instance, popup, innerParams) => {\n const container = getContainer();\n // If animation is supported, animate\n const animationIsSupported = animationEndEvent && hasCssAnimation(popup);\n if (typeof innerParams.willClose === 'function') {\n innerParams.willClose(popup);\n }\n if (animationIsSupported) {\n animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose);\n } else {\n // Otherwise, remove immediately\n removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose);\n }\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {HTMLElement} popup\n * @param {HTMLElement} container\n * @param {boolean} returnFocus\n * @param {Function} didClose\n */\n const animatePopup = (instance, popup, container, returnFocus, didClose) => {\n globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);\n popup.addEventListener(animationEndEvent, function (e) {\n if (e.target === popup) {\n globalState.swalCloseEventFinishedCallback();\n delete globalState.swalCloseEventFinishedCallback;\n }\n });\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {Function} didClose\n */\n const triggerDidCloseAndDispose = (instance, didClose) => {\n setTimeout(() => {\n if (typeof didClose === 'function') {\n // @ts-ignore\n didClose.bind(instance.params)();\n }\n // @ts-ignore\n instance._destroy();\n });\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {string[]} buttons\n * @param {boolean} disabled\n */\n function setButtonsDisabled(instance, buttons, disabled) {\n const domCache = privateProps.domCache.get(instance);\n buttons.forEach(button => {\n domCache[button].disabled = disabled;\n });\n }\n\n /**\n * @param {HTMLInputElement} input\n * @param {boolean} disabled\n */\n function setInputDisabled(input, disabled) {\n if (!input) {\n return;\n }\n if (input.type === 'radio') {\n const radiosContainer = input.parentNode.parentNode;\n const radios = radiosContainer.querySelectorAll('input');\n for (let i = 0; i < radios.length; i++) {\n radios[i].disabled = disabled;\n }\n } else {\n input.disabled = disabled;\n }\n }\n\n /**\n * Enable all the buttons\n */\n function enableButtons() {\n setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false);\n }\n\n /**\n * Disable all the buttons\n */\n function disableButtons() {\n setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true);\n }\n\n /**\n * Enable the input field\n */\n function enableInput() {\n setInputDisabled(this.getInput(), false);\n }\n\n /**\n * Disable the input field\n */\n function disableInput() {\n setInputDisabled(this.getInput(), true);\n }\n\n /**\n * Show block with validation message\n *\n * @param {string} error\n */\n function showValidationMessage(error) {\n const domCache = privateProps.domCache.get(this);\n const params = privateProps.innerParams.get(this);\n setInnerHtml(domCache.validationMessage, error);\n domCache.validationMessage.className = swalClasses['validation-message'];\n if (params.customClass && params.customClass.validationMessage) {\n addClass(domCache.validationMessage, params.customClass.validationMessage);\n }\n show(domCache.validationMessage);\n const input = this.getInput();\n if (input) {\n input.setAttribute('aria-invalid', true);\n input.setAttribute('aria-describedby', swalClasses['validation-message']);\n focusInput(input);\n addClass(input, swalClasses.inputerror);\n }\n }\n\n /**\n * Hide block with validation message\n */\n function resetValidationMessage() {\n const domCache = privateProps.domCache.get(this);\n if (domCache.validationMessage) {\n hide(domCache.validationMessage);\n }\n const input = this.getInput();\n if (input) {\n input.removeAttribute('aria-invalid');\n input.removeAttribute('aria-describedby');\n removeClass(input, swalClasses.inputerror);\n }\n }\n\n const defaultParams = {\n title: '',\n titleText: '',\n text: '',\n html: '',\n footer: '',\n icon: undefined,\n iconColor: undefined,\n iconHtml: undefined,\n template: undefined,\n toast: false,\n showClass: {\n popup: 'swal2-show',\n backdrop: 'swal2-backdrop-show',\n icon: 'swal2-icon-show'\n },\n hideClass: {\n popup: 'swal2-hide',\n backdrop: 'swal2-backdrop-hide',\n icon: 'swal2-icon-hide'\n },\n customClass: {},\n target: 'body',\n color: undefined,\n backdrop: true,\n heightAuto: true,\n allowOutsideClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n stopKeydownPropagation: true,\n keydownListenerCapture: false,\n showConfirmButton: true,\n showDenyButton: false,\n showCancelButton: false,\n preConfirm: undefined,\n preDeny: undefined,\n confirmButtonText: 'OK',\n confirmButtonAriaLabel: '',\n confirmButtonColor: undefined,\n denyButtonText: 'No',\n denyButtonAriaLabel: '',\n denyButtonColor: undefined,\n cancelButtonText: 'Cancel',\n cancelButtonAriaLabel: '',\n cancelButtonColor: undefined,\n buttonsStyling: true,\n reverseButtons: false,\n focusConfirm: true,\n focusDeny: false,\n focusCancel: false,\n returnFocus: true,\n showCloseButton: false,\n closeButtonHtml: '×',\n closeButtonAriaLabel: 'Close this dialog',\n loaderHtml: '',\n showLoaderOnConfirm: false,\n showLoaderOnDeny: false,\n imageUrl: undefined,\n imageWidth: undefined,\n imageHeight: undefined,\n imageAlt: '',\n timer: undefined,\n timerProgressBar: false,\n width: undefined,\n padding: undefined,\n background: undefined,\n input: undefined,\n inputPlaceholder: '',\n inputLabel: '',\n inputValue: '',\n inputOptions: {},\n inputAutoFocus: true,\n inputAutoTrim: true,\n inputAttributes: {},\n inputValidator: undefined,\n returnInputValueOnDeny: false,\n validationMessage: undefined,\n grow: false,\n position: 'center',\n progressSteps: [],\n currentProgressStep: undefined,\n progressStepsDistance: undefined,\n willOpen: undefined,\n didOpen: undefined,\n didRender: undefined,\n willClose: undefined,\n didClose: undefined,\n didDestroy: undefined,\n scrollbarPadding: true\n };\n const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'color', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose'];\n const deprecatedParams = {};\n const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture'];\n\n /**\n * Is valid parameter\n *\n * @param {string} paramName\n * @returns {boolean}\n */\n const isValidParameter = paramName => {\n return Object.prototype.hasOwnProperty.call(defaultParams, paramName);\n };\n\n /**\n * Is valid parameter for Swal.update() method\n *\n * @param {string} paramName\n * @returns {boolean}\n */\n const isUpdatableParameter = paramName => {\n return updatableParams.indexOf(paramName) !== -1;\n };\n\n /**\n * Is deprecated parameter\n *\n * @param {string} paramName\n * @returns {string | undefined}\n */\n const isDeprecatedParameter = paramName => {\n return deprecatedParams[paramName];\n };\n\n /**\n * @param {string} param\n */\n const checkIfParamIsValid = param => {\n if (!isValidParameter(param)) {\n warn(`Unknown parameter \"${param}\"`);\n }\n };\n\n /**\n * @param {string} param\n */\n const checkIfToastParamIsValid = param => {\n if (toastIncompatibleParams.includes(param)) {\n warn(`The parameter \"${param}\" is incompatible with toasts`);\n }\n };\n\n /**\n * @param {string} param\n */\n const checkIfParamIsDeprecated = param => {\n if (isDeprecatedParameter(param)) {\n warnAboutDeprecation(param, isDeprecatedParameter(param));\n }\n };\n\n /**\n * Show relevant warnings for given params\n *\n * @param {SweetAlertOptions} params\n */\n const showWarningsForParams = params => {\n if (params.backdrop === false && params.allowOutsideClick) {\n warn('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`');\n }\n for (const param in params) {\n checkIfParamIsValid(param);\n if (params.toast) {\n checkIfToastParamIsValid(param);\n }\n checkIfParamIsDeprecated(param);\n }\n };\n\n /**\n * Updates popup parameters.\n *\n * @param {SweetAlertOptions} params\n */\n function update(params) {\n const popup = getPopup();\n const innerParams = privateProps.innerParams.get(this);\n if (!popup || hasClass(popup, innerParams.hideClass.popup)) {\n warn(`You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.`);\n return;\n }\n const validUpdatableParams = filterValidParams(params);\n const updatedParams = Object.assign({}, innerParams, validUpdatableParams);\n render(this, updatedParams);\n privateProps.innerParams.set(this, updatedParams);\n Object.defineProperties(this, {\n params: {\n value: Object.assign({}, this.params, params),\n writable: false,\n enumerable: true\n }\n });\n }\n\n /**\n * @param {SweetAlertOptions} params\n * @returns {SweetAlertOptions}\n */\n const filterValidParams = params => {\n const validUpdatableParams = {};\n Object.keys(params).forEach(param => {\n if (isUpdatableParameter(param)) {\n validUpdatableParams[param] = params[param];\n } else {\n warn(`Invalid parameter to update: ${param}`);\n }\n });\n return validUpdatableParams;\n };\n\n /**\n * Dispose the current SweetAlert2 instance\n */\n function _destroy() {\n const domCache = privateProps.domCache.get(this);\n const innerParams = privateProps.innerParams.get(this);\n if (!innerParams) {\n disposeWeakMaps(this); // The WeakMaps might have been partly destroyed, we must recall it to dispose any remaining WeakMaps #2335\n return; // This instance has already been destroyed\n }\n\n // Check if there is another Swal closing\n if (domCache.popup && globalState.swalCloseEventFinishedCallback) {\n globalState.swalCloseEventFinishedCallback();\n delete globalState.swalCloseEventFinishedCallback;\n }\n if (typeof innerParams.didDestroy === 'function') {\n innerParams.didDestroy();\n }\n disposeSwal(this);\n }\n\n /**\n * @param {SweetAlert2} instance\n */\n const disposeSwal = instance => {\n disposeWeakMaps(instance);\n // Unset this.params so GC will dispose it (#1569)\n // @ts-ignore\n delete instance.params;\n // Unset globalState props so GC will dispose globalState (#1569)\n delete globalState.keydownHandler;\n delete globalState.keydownTarget;\n // Unset currentInstance\n delete globalState.currentInstance;\n };\n\n /**\n * @param {SweetAlert2} instance\n */\n const disposeWeakMaps = instance => {\n // If the current instance is awaiting a promise result, we keep the privateMethods to call them once the promise result is retrieved #2335\n // @ts-ignore\n if (instance.isAwaitingPromise()) {\n unsetWeakMaps(privateProps, instance);\n privateProps.awaitingPromise.set(instance, true);\n } else {\n unsetWeakMaps(privateMethods, instance);\n unsetWeakMaps(privateProps, instance);\n }\n };\n\n /**\n * @param {object} obj\n * @param {SweetAlert2} instance\n */\n const unsetWeakMaps = (obj, instance) => {\n for (const i in obj) {\n obj[i].delete(instance);\n }\n };\n\n var instanceMethods = /*#__PURE__*/Object.freeze({\n __proto__: null,\n _destroy: _destroy,\n close: close,\n closeModal: close,\n closePopup: close,\n closeToast: close,\n disableButtons: disableButtons,\n disableInput: disableInput,\n disableLoading: hideLoading,\n enableButtons: enableButtons,\n enableInput: enableInput,\n getInput: getInput,\n handleAwaitingPromise: handleAwaitingPromise,\n hideLoading: hideLoading,\n isAwaitingPromise: isAwaitingPromise,\n rejectPromise: rejectPromise,\n resetValidationMessage: resetValidationMessage,\n showValidationMessage: showValidationMessage,\n update: update\n });\n\n /**\n * Shows loader (spinner), this is useful with AJAX requests.\n * By default the loader be shown instead of the \"Confirm\" button.\n *\n * @param {HTMLButtonElement} [buttonToReplace]\n */\n const showLoading = buttonToReplace => {\n let popup = getPopup();\n if (!popup) {\n new Swal(); // eslint-disable-line no-new\n }\n\n popup = getPopup();\n const loader = getLoader();\n if (isToast()) {\n hide(getIcon());\n } else {\n replaceButton(popup, buttonToReplace);\n }\n show(loader);\n popup.setAttribute('data-loading', 'true');\n popup.setAttribute('aria-busy', 'true');\n popup.focus();\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {HTMLButtonElement} [buttonToReplace]\n */\n const replaceButton = (popup, buttonToReplace) => {\n const actions = getActions();\n const loader = getLoader();\n if (!buttonToReplace && isVisible$1(getConfirmButton())) {\n buttonToReplace = getConfirmButton();\n }\n show(actions);\n if (buttonToReplace) {\n hide(buttonToReplace);\n loader.setAttribute('data-button-to-replace', buttonToReplace.className);\n }\n loader.parentNode.insertBefore(loader, buttonToReplace);\n addClass([popup, actions], swalClasses.loading);\n };\n\n /**\n * @typedef { string | number | boolean } InputValue\n */\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const handleInputOptionsAndValue = (instance, params) => {\n if (params.input === 'select' || params.input === 'radio') {\n handleInputOptions(instance, params);\n } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {\n showLoading(getConfirmButton());\n handleInputValue(instance, params);\n }\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} innerParams\n * @returns {string | number | File | FileList | null}\n */\n const getInputValue = (instance, innerParams) => {\n const input = instance.getInput();\n if (!input) {\n return null;\n }\n switch (innerParams.input) {\n case 'checkbox':\n return getCheckboxValue(input);\n case 'radio':\n return getRadioValue(input);\n case 'file':\n return getFileValue(input);\n default:\n return innerParams.inputAutoTrim ? input.value.trim() : input.value;\n }\n };\n\n /**\n * @param {HTMLInputElement} input\n * @returns {number}\n */\n const getCheckboxValue = input => input.checked ? 1 : 0;\n\n /**\n * @param {HTMLInputElement} input\n * @returns {string | null}\n */\n const getRadioValue = input => input.checked ? input.value : null;\n\n /**\n * @param {HTMLInputElement} input\n * @returns {FileList | File | null}\n */\n const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null;\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const handleInputOptions = (instance, params) => {\n const popup = getPopup();\n /**\n * @param {Record} inputOptions\n */\n const processInputOptions = inputOptions => {\n populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params);\n };\n if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {\n showLoading(getConfirmButton());\n asPromise(params.inputOptions).then(inputOptions => {\n instance.hideLoading();\n processInputOptions(inputOptions);\n });\n } else if (typeof params.inputOptions === 'object') {\n processInputOptions(params.inputOptions);\n } else {\n error(`Unexpected type of inputOptions! Expected object, Map or Promise, got ${typeof params.inputOptions}`);\n }\n };\n\n /**\n * @param {SweetAlert2} instance\n * @param {SweetAlertOptions} params\n */\n const handleInputValue = (instance, params) => {\n const input = instance.getInput();\n hide(input);\n asPromise(params.inputValue).then(inputValue => {\n input.value = params.input === 'number' ? `${parseFloat(inputValue) || 0}` : `${inputValue}`;\n show(input);\n input.focus();\n instance.hideLoading();\n }).catch(err => {\n error(`Error in inputValue promise: ${err}`);\n input.value = '';\n show(input);\n input.focus();\n instance.hideLoading();\n });\n };\n const populateInputOptions = {\n /**\n * @param {HTMLElement} popup\n * @param {Record} inputOptions\n * @param {SweetAlertOptions} params\n */\n select: (popup, inputOptions, params) => {\n const select = getDirectChildByClass(popup, swalClasses.select);\n /**\n * @param {HTMLElement} parent\n * @param {string} optionLabel\n * @param {string} optionValue\n */\n const renderOption = (parent, optionLabel, optionValue) => {\n const option = document.createElement('option');\n option.value = optionValue;\n setInnerHtml(option, optionLabel);\n option.selected = isSelected(optionValue, params.inputValue);\n parent.appendChild(option);\n };\n inputOptions.forEach(inputOption => {\n const optionValue = inputOption[0];\n const optionLabel = inputOption[1];\n // spec:\n // https://www.w3.org/TR/html401/interact/forms.html#h-17.6\n // \"...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)...\"\n // check whether this is a \n if (Array.isArray(optionLabel)) {\n // if it is an array, then it is an \n const optgroup = document.createElement('optgroup');\n optgroup.label = optionValue;\n optgroup.disabled = false; // not configurable for now\n select.appendChild(optgroup);\n optionLabel.forEach(o => renderOption(optgroup, o[1], o[0]));\n } else {\n // case of